No description
Find a file
Yorhel d523a77fdc Improve exclude pattern matching performance (and behavior, a bit)
Behavioral changes:
- A single wildcard ('*') does not cross directory boundary anymore.
  Previously 'a*b' would also match 'a/b', but no other tool that I am
  aware of matches paths that way. This change breaks compatibility with
  old exclude patterns but improves consistency with other tools.
- Patterns with a trailing '/' now prevent recursing into the directory.
  Previously any directory excluded with such a pattern would show up as
  a regular directory with all its contents excluded, but now the
  directory entry itself shows up as excluded.
- If the path given to ncdu matches one of the exclude patterns, the old
  implementation would exclude every file/dir being read, this new
  implementation would instead ignore the rule. Not quite sure how to
  best handle this case, perhaps just exit with an error message?

Performance wise, I haven't yet found a scenario where this
implementation is slower than the old one and it's *significantly*
faster in some cases - in particular when using a large amount of
patterns, especially with literal paths and file names.

That's not to say this implementation is anywhere near optimal:
- A list of relevant patterns is constructed for each directory being
  scanned. It may be possible to merge pattern lists that share
  the same prefix, which could both reduce memory use and the number of
  patterns that need to be matched upon entering a directory.
- A hash table with dynamic arrays as values is just garbage from a
  memory allocation point of view.
- This still uses libc fnmatch(), but there's an opportunity to
  precompile patterns for faster matching.
2022-08-10 09:46:39 +02:00
LICENSES Add REUSE-compliant copyright headers 2021-07-18 11:50:50 +02:00
src Improve exclude pattern matching performance (and behavior, a bit) 2022-08-10 09:46:39 +02:00
.gitignore Add REUSE-compliant copyright headers 2021-07-18 11:50:50 +02:00
build.zig Version 2.0.1 + copyright year bump 2022-01-01 16:01:47 +01:00
ChangeLog Version 2.1.2 2022-04-28 11:19:43 +02:00
Makefile Version 2.0.1 + copyright year bump 2022-01-01 16:01:47 +01:00
ncdu.pod Revert default --graph-style to "hash" 2022-03-16 09:53:02 +01:00
README.md Version 2.1.1 2022-03-25 12:38:47 +01:00

ncdu-zig

Description

Ncdu is a disk usage analyzer with an ncurses interface. It is designed to find space hogs on a remote server where you don't have an entire graphical setup 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.

See the ncdu 2 release announcement for information about the differences between this Zig implementation (2.x) and the C version (1.x).

Requirements

  • Zig 0.9.0 or 0.9.1
  • Some sort of POSIX-like OS
  • ncurses libraries and header files

Install

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.:

make
sudo make install PREFIX=/usr