Releases: Byron/dua-cli
Release list
dua-core v3.3.0
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
v2.43.0
Thanks to our contributors, there are not one, but two (a joke, a human is writing this with fleshy fingers :D) headline features:
dua aggregate --depth Nshows an indented tree-like view, instead of a flat listdua aggregate --stack | inferno-flamegraph > fire.svgoutputs 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 Nfor 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
--stackand--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 Nfor 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
New Features
-
Match macOS
duallocation 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
duallocation 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*
*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
dua-core v3.1.0
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
v2.42.0 - 30% faster on macOS
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
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
v2.41.1
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
v2.41.0 - 30x faster on Windows
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
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