|author||Yorhel <firstname.lastname@example.org>||2021-07-22 16:29:55 +0200|
|committer||Yorhel <email@example.com>||2021-07-22 16:29:55 +0200|
Tagging this as a 2.0-beta1 releasev2.0-beta1
3 files changed, 29 insertions, 66 deletions
@@ -1,6 +1,23 @@
# SPDX-FileCopyrightText: 2021 Yoran Heling <firstname.lastname@example.org>
# SPDX-License-Identifier: MIT
+2.0-beta1 - 2021-07-22
+ - Full release announcement: https://dev.yorhel.nl/doc/ncdu2
+ - Requires Zig 8.0
+ - Lower memory use in most scenarios (except with many hard links)
+ - Improved performance of hard link counting
+ - Extra column for shared/unique directory sizes
+1.16 - 2021-07-02
+ - Increase width of size bar depending on terminal size (Christian Göttsche)
+ - Set/increment $NCDU_LEVEL variable when spawning a shell
+ - Indicate whether apparent size or disk usage is being displayed
+ - Display setuid, setgid and sticky bits in file flags in extended mode
+ - Fix error handling while reading --exclude-from file
+ - Improve JSON import to allow for several future extensions to the format
+ - Export link count in JSON dumps
+ - Don't export inode in JSON dumps for non-hardlinks
1.15.1 - 2020-06-10
- (Linux) Fix build on older Linux systems (Christian Göttsche)
- (MacOS) Revert "Exclude firmlinks by default" behavior (until we have a better solution)
@@ -13,70 +13,9 @@ available, but it is a useful tool even on regular desktop systems. Ncdu aims
to be fast, simple and easy to use, and should be able to run in any minimal
POSIX-like environment with ncurses installed.
-## This Zig implementation
-This branch represents an experimental rewrite of ncdu using the [Zig
-programming language](https://ziglang.org/). It is supposed to be fully
-compatible (in terms of behavior, UI and CLI flags) with the C version, so it
-can eventually be used as a drop-in replacement.
-Since Zig itself is still very much unstable and things tend to break with each
-release, I can't in good conscience publish this rewrite as a proper release of
-ncdu (...yet). I intent to maintain the C version as long as necessary while
-Zig matures and gets more widely supported among Linux/BSD systems.
-This rewrite is a test-bed for various improvements to the design of ncdu that
-would impact large parts of its codebase. The improvements may also be
-backported to the C version, depending on how viable a proper Zig release is.
-### Improvements compared to the C version
-- Significantly reduced memory usage, achieved by:
- - Removing pointers between nodes that are not strictly necessary for basic
- tree traversal (this impacts *all* code in the C version of ncdu).
- - Using separate structs for directory, file and hard link nodes, each storing
- only the information necessary for that particular type of node.
- - Using an arena allocator and getting rid of data alignment.
- - Refreshing a directory no longer creates a full copy of the (sub)tree.
-- Improved performance of hard link counting (fixing
-- Add support for separate counting hard links that are shared with other
- directories or unique within the directory (issue
-- Faster --exclude-kernfs thanks to `statfs()` caching.
-- Improved handling of Unicode and special characters.
-- Key to switch to path from a file's hard link listing.
-- Remembers item position when switching directories.
-Potentially to be implemented:
-- Faster --exclude-pattern matching
-- Multithreaded scanning
-- Exporting a JSON dump after scanning into RAM
-- Transparent dump (de)compression by piping through gzip/bzip2/etc
-### Regressions compared to the C version
-Aside from this implementation being unfinished:
-- Assumes a UTF-8 locale and terminal.
-- No doubt somewhat less portable.
-- Listing all paths for a particular hard link requires a full search through
- the in-memory directory tree.
-- Not nearly as well tested.
-- Directories that could not be opened are displayed as files.
-- The disk usage of directory entries themselves is not updated during refresh.
-### Minor UI differences
-Not sure if these count as improvements or regressions, so I'll just list these
-- The browsing UI is not visible during refresh or file deletion.
-- Some columns in the file browser are hidden automatically if the terminal is
- not wide enough to display them.
-- The file's path is not displayed in the item window anymore (it's redundant).
-- The item window's height is dynamic based on its contents.
+See the [ncdu 2 release announcement](https://dev.yorhel.nl/doc/ncdu2) for
+information about the differences between this Zig implementation (2.x) and the
+C version (1.x).
@@ -86,4 +25,11 @@ separately:
+You can use the Zig build system if you're familiar with that.
+There's also a handy Makefile that supports the typical targets, e.g.:
+sudo make install PREFIX=/usr
diff --git a/src/main.zig b/src/main.zig
index 040d14e..a6ca14b 100644
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2021 Yoran Heling <email@example.com>
// SPDX-License-Identifier: MIT
-pub const program_version = "2.0-dev";
+pub const program_version = "2.0-beta1";
const std = @import("std");
const model = @import("model.zig");