Tags: Byron/dua-cli
Tags
The first release of the directory walk implementation of the `dua-cl… …i`, to allow its usage in other places as well. ### Commit Statistics - 2 commits contributed to the release. - 0 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details * **Uncategorized** - Prepare changelog prior to `dua-core` release (965ce7c) - Extract filesystem walker into dua-lib (3b1c8cf)
A one-line change that makes all the difference: Windows TUI performa… …nce 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](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit 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)
There are two major features: 30x and more performance on Windows, an… …d `--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 <!-- agent --> 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 <!-- agent --> 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](https://www.conventionalcommits.org). - 1 unique issue was worked on: #302 ### Commit 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)
Even more performance, up to 15%. That's it now, trying to hit 1 week… … without a release ;). ### Bug Fixes - avoid aggregate progress flicker <!-- agent --> 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 <!-- agent --> 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](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit 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)
The headline feature is 40% more scanning speed in my particular scen… …ario. More cores on Linux should now scale much better as well, so I wouldn't be surprised if it's even faster for you. ### New Features - Replace jwalk with a work-stealing directory walker for up to 40% more scan speed <!-- agent --> Replace jwalk and Rayon with a crate-local walker built on crossbeam-deque and standard-library threads. Directory reads and metadata collection run on stealable worker queues, while a bounded channel limits completed batches held ahead of the iterator. The walker never follows symlinks and no longer sorts entries because consumers sort their final results where needed. Provide two delivery modes on the shared implementation: aggregate scans and recursive deletion use completion order for maximum throughput and continuous progress; interactive traversal uses parent-first delivery so ancestor sizes and entry counts grow throughout the scan. Recursive deletion remains parallel through scoped standard-library workers. Raise the macOS default from three to eight filesystem workers based on warm-cache measurements. ### Commit Statistics - 4 commits contributed to the release. - 1 day passed between releases. - 1 commit was understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Thanks Clippy [Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic. ### Commit Details * **Uncategorized** - Prepare changelog prior to release (5c9976f) - Merge pull request #355 from Byron/workstealing (0b21b22) - Thanks clippy (9e36f03) - Replace jwalk with a work-stealing directory walker for up to 40% more scan speed (8ada93f)
This release is merely to allow attestations to be used, and you shou… …ld be able to validate the binary origin with: - `gh attestation verify ./dua-v2.39.1-aarch64-apple-darwin.tar.gz --repo Byron/dua-cli` ### Commit Statistics - 4 commits contributed to the release. - 2 days passed between releases. - 0 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details * **Uncategorized** - Prepare next release with attestations (953a87a) - Merge pull request #354 from Vam-si-krish/ci/release-provenance (2d11eb9) - Review (ddfd0fb) - Add provenance attestations for release archives (f374d9c)
The main feature this release is parallel deletion, both for collecti… …ng files to be deleted as well as the deletion itself. On my local disk, it now reaches 144k files/s overall deletion performance. ### New Features - delete files in parallel Recursive deletion now uses the same worker count selected with `--threads` for the initial filesystem scan, to accelerate the collection of files to be deleted, as well as the deletion of files. <!-- agent --> When marked directories are deleted, `dua` now: 1. walks the selected tree without (following symbolic links as usual) 2. collects regular files and symbolic links; 3. removes those entries *across the configured workers*; 4. removes directories from deepest to shallowest after their contents are gone on *a single thread*. A value of `1` keeps deletion effectively serial. Larger values allow independent file removals to overlap, which is most useful for large directory trees or filesystems with concurrent metadata operations. ### Bug Fixes - open errors and cleanup/gitignored footer labels ### Refactor - use jwalk for parallel, symlink-safe deletion Replace the hand-rolled stack traversal in delete_directory_recursively with a jwalk WalkDir (follow_links=false, skip_hidden=false). This is the same walker the rest of dua uses for scanning, so deletion now benefits from parallel traversal on multi-core machines. Behaviour preserved: - Symlinks are removed without following them (remove_file on the link). - Directories are removed deepest-first so each remove_dir sees an empty directory. - Error counting and byte accounting unchanged. Adds unit tests covering: single file, nested tree, symlink safety, and missing-path error reporting. ### Test - Make traversal tree tests filesystem-independent That way, tests will work locally. ### Commit Statistics - 10 commits contributed to the release over the course of 4 calendar days. - 8 days passed between releases. - 4 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details * **Uncategorized** - Prepare changelog for release (254ea4f) - Merge pull request #353 from Solaris-star/fix/43-jwalk-parallel-deletion (0f55a5c) - Delete files in parallel (b04f9f3) - Review (cd82444) - Make traversal tree tests filesystem-independent (48fb6df) - Use jwalk for parallel, symlink-safe deletion (7e9d0a8) - Merge pull request #352 from l0rush1/main (496bd78) - Rustfmt annotation_message match arm (3dba5a4) - Open errors and cleanup/gitignored footer labels (f2a957a) - Fix: interactive exit code and footer entries/s (1b3f60d)
This release fixes a long-standing bug where `NO_COLOR=1` would make … …all styling disapear, including the selection indicator itself. Now it's usable, finally. ### Bug Fixes - only strip colors when `NO_COLOR` is enabled ### Commit Statistics - 3 commits contributed to the release. - 6 days passed between releases. - 1 commit was understood as [conventional](https://www.conventionalcommits.org). - 1 unique issue was worked on: #238 ### Commit Details * **#238** - Only strip colors when `NO_COLOR` is enabled (ad19f3f) * **Uncategorized** - Prepare changelog prior to release (9c89430) - Merge pull request #351 from Byron/fix-colors (9c9364d)
### New Features - notify after interactive work when unfocused Interactive scans, refreshes, deletion, and trash operations can take long enough that users leave the terminal, but dua previously had no way to signal completion without exiting the TUI. Track terminal focus events and emit sanitized OSC 777 notifications only when the terminal is unfocused. Include concise entry, byte, duration, and error statistics, and add a notifications config section whose scan_finished and delete_finished switches default to true. ### Commit Statistics - 7 commits contributed to the release over the course of 6 calendar days. - 1 commit was understood as [conventional](https://www.conventionalcommits.org). - 1 unique issue was worked on: #347 ### Commit Details * **#347** - Notify after interactive work when unfocused (d800f22) * **Uncategorized** - Merge pull request #348 from Byron/notify-when-done-and-unfocussed (92f4502) - Merge pull request #346 from rlex/apple_silicon_ci (0c81cb8) - Review (08d960e) - Arm64 osx gh build (2d8b45f) - Merge pull request #345 from luhenry/main (11892d5) - Add release for linux-riscv64 (a90b5d8)
### Bug Fixes - degrade entries title on narrow terminals improve the interactive top-bar so narrow terminal sizes degrade gracefully. Statistics should disappear when the current path needs the space, and the path should compact by removing the fewest consecutive middle components needed to fit. ### Commit Statistics - 5 commits contributed to the release. - 7 days passed between releases. - 1 commit was understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details * **Uncategorized** - Merge pull request #344 from Byron/interactive-path-display-degradation (157996b) - Degrade entries title on narrow terminals (a83583c) - Merge pull request #341 from knightmare2600/main (68989b6) - Review - more consistent naming, add name to build array (2ade4e7) - Update release.yml (a506c74)
PreviousNext