Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | eval: Make -hidden behave consistently | Tavian Barnes | 2020-11-28 | 1 | -1/+8 |
| | | | | | | | | | | | | | | | Previously there was an unexpected difference between $ bfs .hidden -hidden and $ bfs ./.hidden -hidden ./.hidden The intent of the code was to avoid considering `.`, the default starting point, as hidden and thus pruning a whole search with -nohidden. Fix it to do that explicitly, and handle `..` too. | ||||
* | Include what I use | Tavian Barnes | 2020-11-12 | 1 | -0/+2 |
| | | | | Thanks to https://github.com/include-what-you-use/include-what-you-use | ||||
* | Use two newlines for all pre-eval warnings | Tavian Barnes | 2020-11-09 | 1 | -1/+1 |
| | |||||
* | eval: Fix the status bar to only print the parent again | Tavian Barnes | 2020-11-04 | 1 | -5/+7 |
| | |||||
* | eval: Make a crude attempt to handle double-width chars in the status bar | Tavian Barnes | 2020-11-04 | 1 | -11/+49 |
| | |||||
* | Enable -Wsign-compare to catch bugs like 726d7801 | Tavian Barnes | 2020-11-04 | 1 | -5/+5 |
| | |||||
* | New -status option to display a status bar | Tavian Barnes | 2020-11-03 | 1 | -11/+100 |
| | |||||
* | expr, eval: Clean up header dependencies | Tavian Barnes | 2020-10-06 | 1 | -0/+1 |
| | |||||
* | diag: New bfs_perror() function | Tavian Barnes | 2020-10-05 | 1 | -6/+6 |
| | |||||
* | util: Don't rely on bftw | Tavian Barnes | 2020-09-30 | 1 | -1/+1 |
| | | | | And rename format_mode() to xstrmode() while I'm at it. | ||||
* | Rename struct cmdline to bfs_ctx | Tavian Barnes | 2020-09-27 | 1 | -66/+80 |
| | | | | | The API remains similar, with some added accessor functions for lazy initialization of the pwcache and mtab. | ||||
* | stat: Rename bfs_stat_flag to _flags | Tavian Barnes | 2020-09-18 | 1 | -2/+2 |
| | | | | Flags enums should be plural. | ||||
* | Don't call stat() just to determine symbolic lengths | Tavian Barnes | 2020-09-18 | 1 | -5/+3 |
| | | | | | | | The new bftw_cached_stat() helper gets us stat info if we already have it, but doesn't call stat() if we don't. In that case we just take a guess for the initial length to readlinkat(). This lets us avoid stat() entirely in many cases for -lname and -printf %l. | ||||
* | Implement -xattrname | Tavian Barnes | 2020-08-13 | 1 | -0/+13 |
| | | | | From macOS find. | ||||
* | bftw: Make some flag names more explicit | Tavian Barnes | 2020-07-29 | 1 | -6/+6 |
| | |||||
* | bftw: Rename bftw_typeflag to bftw_type, and make it not a bitmask | Tavian Barnes | 2020-07-29 | 1 | -37/+35 |
| | |||||
* | eval: Fix an assertion failure with -D search -s | Tavian Barnes | 2020-06-16 | 1 | -0/+1 |
| | |||||
* | eval: Fix a segfault with -D search -S eds | Tavian Barnes | 2020-06-16 | 1 | -0/+1 |
| | |||||
* | Treat -nohidden like -exclude -hidden | Tavian Barnes | 2020-06-07 | 1 | -12/+0 |
| | | | | Fixes #30. | ||||
* | Implement -exclude, a special form for convenient exclusions | Tavian Barnes | 2020-06-07 | 1 | -0/+5 |
| | | | | Fixes #8. | ||||
* | diag: Unify debug printing | Tavian Barnes | 2020-06-02 | 1 | -14/+14 |
| | |||||
* | pwcache: Rename from passwd.[ch] | Tavian Barnes | 2020-04-22 | 1 | -1/+1 |
| | |||||
* | passwd: Cache the user/group tables | Tavian Barnes | 2020-02-29 | 1 | -22/+7 |
| | | | | | | | | | | | | | | | | | | | | | | This is a significant optimization for conditions that need these tables: Benchmark #1: ./bfs ~/code/linux -nouser >/dev/null Time (mean ± σ): 232.0 ms ± 2.5 ms [User: 44.3 ms, System: 185.0 ms] Range (min … max): 228.7 ms … 238.7 ms 12 runs Benchmark #2: ./bfs-1.6 ~/code/linux -nouser >/dev/null Time (mean ± σ): 1.050 s ± 0.012 s [User: 544.2 ms, System: 500.0 ms] Range (min … max): 1.025 s … 1.063 s 10 runs Benchmark #3: find ~/code/linux -nouser >/dev/null Time (mean ± σ): 1.040 s ± 0.012 s [User: 533.6 ms, System: 500.6 ms] Range (min … max): 1.017 s … 1.054 s 10 runs Summary './bfs ~/code/linux -nouser >/dev/null' ran 4.48 ± 0.07 times faster than 'find ~/code/linux -nouser >/dev/null' 4.52 ± 0.07 times faster than './bfs-1.6 ~/code/linux -nouser >/dev/null' | ||||
* | eval: Irregular files aren't empty | Tavian Barnes | 2020-02-14 | 1 | -1/+1 |
| | | | | | GNU find's -empty returns false for devices, sockets, etc., even though their st_size is 0. Match that behaviour. | ||||
* | time: Split out time-related functions from util | Tavian Barnes | 2020-02-13 | 1 | -0/+1 |
| | |||||
* | Update copyright dates | Tavian Barnes | 2020-01-07 | 1 | -1/+1 |
| | |||||
* | eval: For -ls, print a + if a file has ACLs | Tavian Barnes | 2020-01-07 | 1 | -1/+2 |
| | |||||
* | darray: New dynamic array library | Tavian Barnes | 2019-08-29 | 1 | -1/+2 |
| | |||||
* | Make -mount and -xdev do different things | Tavian Barnes | 2019-07-04 | 1 | -0/+1 |
| | | | | | | | | | POSIX now says -mount should skip the whole mount point, while -xdev should only skip its descendents. C.f. http://austingroupbugs.net/view.php?id=1133 C.f. https://savannah.gnu.org/bugs/?42318 C.f. https://savannah.gnu.org/bugs/?54745 | ||||
* | bftw: Remove BFTW_SKIP_SIBLINGS | Tavian Barnes | 2019-06-25 | 1 | -7/+6 |
| | | | | | It's not used by bfs, and it's difficult to support in all search strategies. | ||||
* | util: Filter out . and .. in xreaddir() | Tavian Barnes | 2019-06-25 | 1 | -25/+8 |
| | |||||
* | eval: Get rid of a level of indirection for quit | Tavian Barnes | 2019-06-16 | 1 | -13/+10 |
| | |||||
* | Implement an iterative deepening mode (-ids) | Tavian Barnes | 2019-05-29 | 1 | -1/+2 |
| | |||||
* | Implement a depth-first mode (-dfs) | Tavian Barnes | 2019-05-28 | 1 | -1/+14 |
| | |||||
* | bftw: Visit multiple roots breadth-first | Tavian Barnes | 2019-05-28 | 1 | -36/+33 |
| | | | | This makes `bfs a b` treat `a` and `b` as siblings. | ||||
* | Implement -xattr predicate | Tavian Barnes | 2019-05-24 | 1 | -0/+13 |
| | |||||
* | fsade: Refactor the POSIX.1e abstractions | Tavian Barnes | 2019-05-24 | 1 | -3/+15 |
| | | | | | | | Since we're going to want to abstract more things that aren't part of POSIX.1e (like xattrs) in a similar way, let's give this a more generic name. And while we're at it, give it some more precise error reporting, and add some tests. | ||||
* | color: Don't stat() if we don't need to | Tavian Barnes | 2019-05-05 | 1 | -7/+1 |
| | |||||
* | bftw: Pass a const struct BFTW * to the callback | Tavian Barnes | 2019-05-05 | 1 | -12/+12 |
| | |||||
* | bftw: Add a caching stat() API to struct BFTW | Tavian Barnes | 2019-05-04 | 1 | -134/+75 |
| | |||||
* | stat: Unify the flags arguments | Tavian Barnes | 2019-05-04 | 1 | -16/+12 |
| | |||||
* | Release 1.41.4 | Tavian Barnes | 2019-04-15 | 1 | -1/+1 |
| | |||||
* | eval: Fix -unique with -depth | Tavian Barnes | 2019-03-07 | 1 | -1/+1 |
| | |||||
* | bftw: Work around d_type being wrong for bind mounts on Linux | Tavian Barnes | 2019-03-06 | 1 | -7/+14 |
| | | | | | | C.f. https://savannah.gnu.org/bugs/?54913 C.f. https://lkml.org/lkml/2019/2/11/2027 Fixes https://github.com/tavianator/bfs/issues/37 | ||||
* | bftw: Switch from taking separate parameters to a parameters struct | Tavian Barnes | 2019-03-06 | 1 | -6/+18 |
| | |||||
* | parse: Use a trie to hold currently open files | Tavian Barnes | 2019-03-06 | 1 | -4/+2 |
| | |||||
* | trie: Revamp the API to support mappings | Tavian Barnes | 2019-03-04 | 1 | -5/+8 |
| | |||||
* | Implement -unique | Tavian Barnes | 2019-03-01 | 1 | -0/+43 |
| | | | | Closes #48 | ||||
* | Add some documentation comments | Tavian Barnes | 2019-02-09 | 1 | -0/+4 |
| | |||||
* | Fix -nouser/-nogroup error handling | Tavian Barnes | 2019-02-06 | 1 | -2/+20 |
| | | | | | | | | | | The proper way to check for nonexistent users/groups is to set errno to 0 before the get{grg,pwu}id() call, and check it afterwards. On doing this, it becomes obvious that the call can fail if bftw() is using all the available FDs, so give them some ephemeral FDs. It would be ideal to read the user/group table only once, but this fixes the bug for now. |