Skip to content

Releases: Byron/dua-cli

dua-core v3.3.0

Choose a tag to compare

@Byron Byron released this 28 Aug 04:02
6fed577

New Features

  • reuse workers when restarting a walk

    Retain a completed single-root walk pool and add Walk::restart() so callers
    that rescan a changing directory avoid rebuilding worker threads.

    Declare Rust 1.88 support for let-chain and integer-cast syntax.

Commit Statistics

  • 2 commits contributed to the release.
  • 3 days passed between releases.
  • 1 commit was understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Merge pull request #381 from Byron/reuse-walk-pool (28a7279)
    • Reuse workers when restarting a walk (c0005aa)

v2.43.0

Choose a tag to compare

@Byron Byron released this 25 Aug 13:36
7baa926

Thanks to our contributors, there are not one, but two (a joke, a human is writing this with fleshy fingers :D) headline features:

  1. dua aggregate --depth N shows an indented tree-like view, instead of a flat list
  2. dua aggregate --stack | inferno-flamegraph > fire.svg outputs a flame-graph compatible stack listing, for pretty visualisations of the directory. It also works with --depth N.

On the side, on macOS, the bytes output of dua now matches du byte-perfectly, and for the first time it's possible to pipe dua
output into a file without terminal escape sequences (why did this take me so long again?).

New Features

  • Add dua aggregate --depth N for indented tree output

Bug Fixes

  • don't output colors when stdout isn't a terminal.
    This facilitates piping into a file.
  • --stats printed the u128 sentinel as the smallest file size
    The sentinel reset was guarded by entries_traversed == 0, but an entry
    whose metadata cannot be read still counts as traversed while never
    contributing a size. Reset when the sentinel is still in place instead.
  • Apply --ignore-dirs to prepared aggregate roots
  • Apply --ignore-dirs to paths dua expanded into roots itself

Commit Statistics

  • 28 commits contributed to the release over the course of 9 calendar days.
  • 10 days passed between releases.
  • 5 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Merge pull request #378 from ChrisJr404/feature/stacks-folded-output (886f3ce)
    • Fix folded stack path assertions on Windows (52df4c5)
    • Progress support for --stack and --depth N (e476971)
    • Review (a14f2b7)
    • Add 'stacks' subcommand emitting folded stacks for flame graphs (d40a44d)
    • Merge pull request #380 from ChrisJr404/feature/aggregate-tree-depth (7cfa98c)
    • Review (136a86a)
    • Add dua aggregate --depth N for indented tree output (74bf377)
    • Merge pull request #373 from VXNCXNX/fix/root-path-ending-in-dotdot (c4cda95)
    • Don't output colors when stdout isn't a terminal. (b1e16a0)
    • Merge pull request #375 from tamird/perf-skip-apfs-apparent-size (06b4237)
    • Review (511bb35)
    • Merge pull request #372 from VXNCXNX/fix/smallest-file-sentinel-leak (95ab634)
    • Merge pull request #374 from tamird/perf-skip-empty-ignore-realpath (83d467a)
    • Review (5bf9204)
    • Review (de9f8a0)
    • Merge pull request #376 from tamird/perf-stream-prepared-roots (bed32a4)
    • Skip path resolution without ignored directories (6c1c511)
    • Avoid materiailizing vector (dbf33e6)
    • Skip clone metadata for apparent sizes (18f6395)
    • --stats printed the u128 sentinel as the smallest file size (dd9e0ce)
    • Merge pull request #371 from tamird/macos-apfs-clone-accounting (7231d83)
    • Review (0acd5fa)
    • Count fully shared APFS clones once (6b3a231)
    • Merge pull request #370 from VXNCXNX/fix/ignore-dirs-on-expanded-roots (cfa5ed2)
    • Apply --ignore-dirs to prepared aggregate roots (f9b6200)
    • Review (1c41b46)
    • Apply --ignore-dirs to paths dua expanded into roots itself (72faa62)

dua-core v3.2.0

Choose a tag to compare

@Byron Byron released this 25 Aug 13:36
7baa926

New Features

  • Match macOS du allocation accounting
    Mirror Apple FTS complete common/file attribute request and packed-invalid records so macOS allocation totals match /usr/bin/du. Reject unknown vnode types, round allocation bytes to 512-byte stat blocks, and fall back to symlink metadata for directories, firmlinks, and incomplete records.

    Layer optional APFS clone and data-fork attributes onto the same packed layout so the upstream clone-deduplication path remains intact.

Bug Fixes

  • don't output colors when stdout isn't a terminal.
    This facilitates piping into a file.
  • a relative root ending in .. is mis-resolved

Commit Statistics

  • 12 commits contributed to the release over the course of 9 calendar days.
  • 10 days passed between releases.
  • 3 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Prepare changelog priot to release (c042449)
    • Merge pull request #379 from nshcr/codex/macos-du-allocation-accounting (2262295)
    • Review (df12088)
    • Match macOS du allocation accounting (ddee9e4)
    • Don't output colors when stdout isn't a terminal. (b1e16a0)
    • Merge pull request #377 from tamird/perf-compact-apfs-metadata (8b1d8da)
    • Review (d812272)
    • Shrink native macOS traversal metadata (6156641)
    • A relative root ending in .. is mis-resolved (a6b6f68)
    • Merge pull request #371 from tamird/macos-apfs-clone-accounting (7231d83)
    • Review (0acd5fa)
    • Count fully shared APFS clones once (6b3a231)

v2.42.1 - 30% faster on macOS*

Choose a tag to compare

@Byron Byron released this 15 Aug 04:30
9560df3

*the same as 2.42, and:

Starting directories with a large amount of files, like 50k, now see a 5x speedup on macOS and Windows as bulk-reading is also done there. Note also that this is still a small absolute difference, 100ms vs 500ms, but a good demonstration of how much large trees with a lot of such directories will benefit by this, as these small absolute improvements accumulate.

Commit Statistics

  • 3 commits contributed to the release.
  • 1 day passed between releases.
  • 0 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Merge pull request #369 from tamird/macos-prepared-roots (3b1659e)
    • Review (ffb2a2e)
    • Reuse bulk metadata for macOS aggregation roots (d45a2f8)

dua-core v3.1.0

Choose a tag to compare

@Byron Byron released this 15 Aug 04:30
9560df3

Support providing walk roots with their metadata already set due to bulk-reading.

Commit Statistics

  • 4 commits contributed to the release.
  • 1 day passed between releases.
  • 0 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Prepare changelog prior to release (b32d912)
    • Merge pull request #369 from tamird/macos-prepared-roots (3b1659e)
    • Review (ffb2a2e)
    • Reuse bulk metadata for macOS aggregation roots (d45a2f8)

v2.42.0 - 30% faster on macOS

Choose a tag to compare

@Byron Byron released this 14 Aug 14:36
07985d2

The headline or this release is ~30% better traversal performance on macOS due to the usage of bulk-metadata APIs on supported filesytems.

Bug Fixes

  • sanitize control characters in marked path output
    dua-cli's interactive TUI is built on ratatui, which protects the
    paths it renders on screen. But marking a file for deletion and then
    quitting prints that file's path directly to the terminal after the
    TUI has already released terminal control, bypassing ratatui's
    protective rendering entirely. A scanned file's name has no character
    restrictions, so a crafted file name can inject terminal escape
    sequences into the printed path.

    Add sanitize_for_display (src/main.rs), replacing control characters
    with the Unicode replacement character, applied at the sole print site
    for marked paths.

Commit Statistics

  • 8 commits contributed to the release over the course of 9 calendar days.
  • 10 days passed between releases.
  • 1 commit was understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Merge pull request #367 from tamird/macos-native-traversal (e68868c)
    • Review (872b6be)
    • Avoid per-entry macOS metadata queries (7d115c0)
    • Merge pull request #366 from carfeii/fix/sanitize-marked-path-output (f515d36)
    • Review (8521d0d)
    • Sanitize control characters in marked path output (a2d375d)
    • Merge pull request #362 from Byron/dua-lib (b6e7caf)
    • Extract filesystem walker into dua-lib (3b1c8cf)

dua-core v3.0.0

Choose a tag to compare

@Byron Byron released this 14 Aug 14:35
ac9766c

macOS specificy bulk-readtree implementation for 30% performance boost on supported filesystems.

Commit Statistics

  • 5 commits contributed to the release over the course of 9 calendar days.
  • 9 days passed between releases.
  • 0 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Prepare changelog prior to release (40c2816)
    • Merge pull request #367 from tamird/macos-native-traversal (e68868c)
    • Review (872b6be)
    • Avoid per-entry macOS metadata queries (7d115c0)
    • Merge pull request #362 from Byron/dua-lib (b6e7caf)

v2.41.1

Choose a tag to compare

@Byron Byron released this 04 Aug 15:46
90a59e1

A one-line change that makes all the difference: Windows TUI performance isn't sluggish anymore as the drawing is now buffered!

Bug Fixes

  • buffer terminal frame output

Commit Statistics

  • 5 commits contributed to the release.
  • 1 day passed between releases.
  • 1 commit was understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Prepare changelog for upcoming release (f18921c)
    • Merge pull request #361 from larsch/fix/buffer-tui-output (c05f608)
    • Buffer terminal frame output (bccddb7)
    • Merge pull request #360 from Byron/windows-performance (f73cc51)
    • Preserve Windows verbatim paths (381824f)

v2.41.0 - 30x faster on Windows

Choose a tag to compare

@Byron Byron released this 03 Aug 09:52
2350999

There are two major features: 30x and more performance on Windows, and --ignore-from <file> support.
This makes this release the best one yet, and I do hope that I can last a week or more until the next one.

New Features

  • add --ignore-from to exclude paths with gitignore-style patterns
    Reads gitignore-syntax patterns from one or more files and leaves everything
    they match out of the report, in both aggregate and interactive mode. This is
    the equivalent of rsync's --exclude-from and restic's --exclude-file, so the
    same pattern file can answer "how much of this would actually be backed up?".

    Matching is powered by gix-ignore, which is already a dependency, so negation,
    anchoring, ** and directory-only patterns all behave exactly like Git.
    Excluded directories are pruned from the walk rather than only hidden, and
    excluded top-level paths are dropped before the walk so they are absent from
    the report instead of appearing as empty.

Bug Fixes

  • propagate background root device errors

    Background traversal replaced failed root-device lookups with device ID
    zero. Readable root metadata could then be rejected as cross-device while the
    traversal incorrectly retained a successful error count.

    Skip roots whose lookup fails and carry their per-root errors in the traversal
    completion event, restoring the previous statistics and exit status. Keep
    interleaved overlapping and duplicate roots isolated by including each root path
    Arc allocation in private directory-map keys while preserving public traversal
    event types.

  • propagate aggregate root device errors

    A failed root-device lookup was replaced with device ID zero after the parallel
    traversal rewrite. For a dangling symlink, symlink metadata remained readable
    but failed the device check, hiding the initialization error and producing a
    successful exit status.

    Count the lookup failure on its root, mark that root complete for ordered
    output, and omit it from traversal. Flush completed roots after traversal
    because failed roots emit no completion event.

    Keep all roots in the shared
    parallel traversal pool; when hard links are deduplicated, per-root attribution
    is scheduling-dependent while the total remains correct, in the name of performance.

Commit Statistics

  • 14 commits contributed to the release.
  • 2 days passed between releases.
  • 3 commits were understood as conventional.
  • 1 unique issue was worked on: #302

Commit Details

view details
  • #302
    • Avoid per-entry Windows metadata queries (9831b1e)
  • Uncategorized
    • Prepare changelog prior to release (2b78d30)
    • Merge pull request #359 from Byron/windows-performance (bdee013)
    • Review (d784e02)
    • Simplify platform-specific walker entries (f94fe6d)
    • Address CI comment about reader type complexity (542e36a)
    • Use Result::is_ok_and in entry checks (29b9c8c)
    • Optimize Windows directory metadata scheduling (e36a66d)
    • Merge pull request #358 from pelazas/feat/ignore-from (1db53ae)
    • Review (af83aa5)
    • Add --ignore-from to exclude paths with gitignore-style patterns (27d16f0)
    • Merge pull request #357 from Byron/crossdev-fix (d7b1503)
    • Propagate background root device errors (b4d944e)
    • Propagate aggregate root device errors (01d7e00)

v2.40.1

Choose a tag to compare

@Byron Byron released this 01 Aug 16:28
9bc8f74

Even more performance, up to 15%. That's it now, trying to hit 1 week without a release ;).

Bug Fixes

  • avoid aggregate progress flicker Track whether aggregate progress has actually been rendered before clearing the
    terminal line. Keep sorted multi-root progress visible until final output, while
    clearing before immediate unsorted results, and cover fast roots that previously
    emitted repeated invisible erase sequences.

Performance

  • parallelize filesystem traversal

    Split completion-order directory entries into small stealable metadata jobs
    and use idle-aware relay waking with LIFO local queues. Submit all top-level
    roots to the same worker pool, carrying a root index through descendant jobs and
    result batches so aggregate and interactive traversal retain per-root accounting
    without serial barriers.

    Also, track pending work per root and emit completion events after all of a
    root's batches are delivered. Flush the longest completed input-order prefix so
    --no-sort prints results immediately without serializing the shared worker pool.

Commit Statistics

  • 7 commits contributed to the release over the course of 1 calendar day.
  • 1 day passed between releases.
  • 2 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Prepare next release (8163e0e)
    • Merge pull request #356 from Byron/performance (fea714d)
    • Parallelize filesystem traversal (4dba3ad)
    • Avoid aggregate progress flicker (3b7415b)
    • Upgrade ratatui to 0.30.2 (995571d)
    • Upgrade byte-unit to 5.2.5 (f113e06)
    • Upgrade compatible dependencies (86b5db8)