]> Sergey Matveev's repositories - bfs.git/blob - docs/CHANGELOG.md
Release 3.0.4
[bfs.git] / docs / CHANGELOG.md
1 3.*
2 ===
3
4 3.0.4
5 -----
6
7 **October 12, 2023**
8
9 ### Bug Fixes
10
11 - Fixed a segfault when reporting errors under musl ([`d40eb87`])
12
13 [`d40eb87`]: https://github.com/tavianator/bfs/commit/d40eb87cc00f50a5debb8899eacb7fcf1065badf
14
15
16 3.0.3
17 -----
18
19 **October 12, 2023**
20
21 ### Changes
22
23 - Iterative deepening modes (`-S {ids,eds}`) were optimized by delaying teardown until the very end ([`5f16169`])
24
25 - Parallel depth-first search (`-S dfs`) was optimized to avoid enqueueing every file separately ([`2572273`])
26
27 ### Bug Fixes
28
29 - Iterative deepening modes (`-S {ids,eds}`) were performing iterative *breadth*-first searches since `bfs` 3.0, negating any advantages they may have had over normal breadth-first search.
30   They now do iterative *depth*-first searches as expected.
31   ([`a029d95`])
32
33 - Fixed a linked-list corruption that could lead to an infinite loop on macOS and other non-Linux, non-FreeBSD platforms ([`773f4a4`])
34
35 [`5f16169`]: https://github.com/tavianator/bfs/commit/5f1616912ba3a7a23ce6bce02df3791b73da38ab
36 [`2572273`]: https://github.com/tavianator/bfs/commit/257227326fe60fe70e80433fd34d1ebcb2f9f623
37 [`a029d95`]: https://github.com/tavianator/bfs/commit/a029d95b5736a74879f32089514a5a6b63d6efbc
38 [`773f4a4`]: https://github.com/tavianator/bfs/commit/773f4a446f03da62d88e6d17be49fdc0a3e38465
39
40
41 3.0.2
42 -----
43
44 **September 6, 2023**
45
46 ### Changes
47
48 - `-files0-from` now allows an empty set of paths to be given, matching GNU findutils 4.9.0
49
50 - Reduced memory consumption in multi-threaded searches
51
52 - Many man page updates
53
54 ### Bug fixes
55
56 - Fixed an out-of-bounds memory read that could occur when escaping a string containing an incomplete multi-byte character
57
58
59 3.0.1
60 -----
61
62 **July 18, 2023**
63
64 ### Bug fixes
65
66 - Traversal fixes that mostly affect large directory trees ([#107])
67
68   - `bfs` could encounter `EMFILE`, close a file, and retry many times, particularly with `-j1`
69
70   - Breadth-first search could become highly unbalanced, negating many of the benefits of `bfs`
71
72   - On non-{Linux,FreeBSD} plaforms, directories could stay open longer than necessary, consuming extra memory
73
74 [#107]: https://github.com/tavianator/bfs/pull/107
75
76
77 3.0
78 ---
79
80 **July 13, 2023**
81
82 ### New features
83
84 - `bfs` now reads directories asynchronously and in parallel ([#101]).
85   Performance is significantly improved as a result.
86   Parallelism is controlled by the new `-j` flag, e.g. `-j1`, `-j2`, etc.
87
88 [#101]: https://github.com/tavianator/bfs/issues/101
89
90 ### Changes
91
92 - `bfs` now uses the [C17] standard version, up from C11
93
94 - Due to [#101], `bfs` now requires some additional C and POSIX features:
95   - [Standard C atomics] (`<stdatomic.h>`)
96   - [POSIX threads] (`<pthread.h>`)
97
98 - `$LS_COLORS` extensions written in different cases (e.g. `*.jpg=35:*.JPG=01;35`) are now matched case-sensitively, to match the new behaviour of GNU ls since coreutils version 9.2
99
100 - Added a warning/error if `$LS_COLORS` can't be parsed, depending on whether `-color` is requested explicitly
101
102 - Filenames with control characters are now escaped when printing with `-color`
103
104 - Build flags like `WITH_ONIGURUMA` have been renamed to `USE_ONIGURUMA`
105
106 [C17]: https://en.cppreference.com/w/c/17
107 [Standard C atomics]: https://en.cppreference.com/w/c/atomic
108 [POSIX threads]: https://pubs.opengroup.org/onlinepubs/9699919799/idx/threads.html
109
110 ### Bug fixes
111
112 - Fixed handling of the "normal text" color (`no` in `$LS_COLORS`) to match GNU ls
113
114
115 2.*
116 ===
117
118 2.6.3
119 -----
120
121 **January 31, 2023**
122
123 - Fixed running the tests as root on Linux [`8b24de3`]
124
125 - Fixed some tests on Android [`2724dfb`] [`0a5a80c`]
126
127 - Stopped relying on non-POSIX touch(1) features in the tests.
128   This should fix the tests on at least OpenBSD.
129   [`2d5edb3`]
130
131 - User/group caches are now filled lazily instead of eagerly [`b41dca5`]
132
133 - More caches and I/O streams are flushed before -exec/-ok [`f98a1c4`]
134
135 - Fixed various memory safety issues found by fuzzing \
136   [`712b137`] [`5ce883d`] [`da02def`] [`c55e855`]
137
138 - Fixed a test failure on certain macOS versions [`8b24de3`]
139
140 - Mitigated a race condition when determining filesystem types ([#97])
141
142 - Lots of refactoring and optimization
143
144 [`8b24de3`]: https://github.com/tavianator/bfs/commit/8b24de3882ff5a3e33b82ab20bb4eadf134cf559
145 [`2724dfb`]: https://github.com/tavianator/bfs/commit/2724dfbd17552f892a0d8b39b96cbe9e49d66fdb
146 [`0a5a80c`]: https://github.com/tavianator/bfs/commit/0a5a80c98cc7e5d8735b615fa197a6cff2bb08cc
147 [`2d5edb3`]: https://github.com/tavianator/bfs/commit/2d5edb37b924715b4fbee4d917ac334c773fca61
148 [`b41dca5`]: https://github.com/tavianator/bfs/commit/b41dca52762c5188638236ae81b9f4597bb29ac9
149 [`f98a1c4`]: https://github.com/tavianator/bfs/commit/f98a1c4a1cf61ff7d6483388ca1fac365fb0b31b
150 [`712b137`]: https://github.com/tavianator/bfs/commit/712b13756a09014ef730c8f9b96da4dc2f09b762
151 [`5ce883d`]: https://github.com/tavianator/bfs/commit/5ce883daaafc69f83b01dac5db0647e9662a6e87
152 [`da02def`]: https://github.com/tavianator/bfs/commit/da02defb91c3a1bda0ea7e653d81f997f1c8884a
153 [`c55e855`]: https://github.com/tavianator/bfs/commit/c55e85580df10c5afdc6fc0710e756a456aa8e93
154 [`8b24de3`]: https://github.com/tavianator/bfs/commit/8b24de3882ff5a3e33b82ab20bb4eadf134cf559
155 [#97]: https://github.com/tavianator/bfs/issues/97
156
157
158 2.6.2
159 -----
160
161 **October 21, 2022**
162
163 - Fixed use of uninitialized memory on parsing errors involving `-fprintf`
164
165 - Fixed Android build issues ([#96])
166
167 - Refactored the test suite
168
169 [#96]: https://github.com/tavianator/bfs/issues/96
170
171
172 2.6.1
173 -----
174
175 **July 7, 2022**
176
177 - Fix `stat()` errors on GNU Hurd systems with glibc older than 2.35
178
179 - Added fish shell tab completion ([#94]).
180   Thanks @xfgusta!
181
182 [#94]: https://github.com/tavianator/bfs/pull/94
183
184
185 2.6
186 ---
187
188 **May 21, 2022**
189
190 - Fixed deleting large NFS directories on FreeBSD ([#67]).
191
192 - Added support for a `bfs`-specific `BFS_COLORS` environment variable.
193
194 - Refactored the build system, directory structure, and documentation ([#88], [#89], [#91]).
195   Thanks @ElectronicsArchiver!
196
197 - Added `zsh` completion ([#86]).
198   Thanks @VorpalBlade!
199
200 - Updated the default color scheme to match GNU coreutils 9.1.
201   Files with capabilities set are no longer colored differently by default, resulting in a significant performance improvement.
202
203 - Became less aggressive at triggering automounts
204
205 - Added support for out-of-tree builds with `BUILDDIR`
206
207 [#67]: https://github.com/tavianator/bfs/issues/67
208 [#86]: https://github.com/tavianator/bfs/issues/86
209 [#88]: https://github.com/tavianator/bfs/issues/88
210 [#89]: https://github.com/tavianator/bfs/issues/89
211 [#91]: https://github.com/tavianator/bfs/issues/91
212
213
214 2.5
215 ---
216
217 **March 27, 2022**
218
219 - Added compiler-style context for errors and warnings.
220   Errors look like this:
221
222       $ bfs -nam needle
223       bfs: error: bfs -nam needle
224       bfs: error:     ~~~~
225       bfs: error: Unknown argument; did you mean -name?
226
227   and warnings look like this:
228
229       $ bfs -print -name 'needle'
230       bfs: warning: bfs -print -name needle
231       bfs: warning:            ~~~~~~~~~~~~
232       bfs: warning: The result of this expression is ignored.
233
234 - Updated from C99 to C11
235
236 - Fixed the tests when built against musl
237
238 - Fixed a build error reported on Manjaro
239
240
241 2.4.1
242 -----
243
244 **February 24, 2022**
245
246 - Fixed the build when Oniguruma is not installed in the default search paths ([#82])
247
248 - Fixed string encoding bugs with Oniguruma enabled
249
250 - Fixed regex error reporting bugs
251
252 [#82]: https://github.com/tavianator/bfs/issues/82
253
254
255 2.4
256 ---
257
258 **February 22, 2022**
259
260 - Added the Oniguruma regular expression library as an (optional, but enabled by default) dependency ([#81]).
261   Oniguruma supports more regular expression syntax types than the POSIX regex API, and often performs better.
262   To build `bfs` without this new dependency, do `make WITH_ONIGURUMA=` to disable it.
263   Thanks @data-man!
264
265 - Added support for the `ed`, `emacs`, `grep`, and `sed` regular expression types ([#21])
266
267 - Before executing a process with `-exec[dir]`/`-ok[dir]`, `bfs` now ensures all output streams are flushed.
268   Previously, I/O from subprocesses could be interleaved unpredictably with buffered I/O from `bfs` itself.
269
270 [#81]: https://github.com/tavianator/bfs/pull/81
271 [#21]: https://github.com/tavianator/bfs/issues/21
272
273
274 2.3.1
275 -----
276
277 **January 21, 2022**
278
279 - Fixed the build on Debian kFreeBSD
280
281 - Fixed a crash on GNU Hurd when piping bfs's output
282
283 - Fixed a double-`close()` on non-Linux platforms if `fdopendir()` fails
284
285 - Reduced memory allocations on startup
286
287
288 2.3
289 ---
290
291 **November 25, 2021**
292
293 - More tweaks to `PAGER` and `LESS` handling for `bfs -help` ([#76])
294
295 - Use 512-byte blocks for `-ls` when `POSIXLY_CORRECT` is set ([#77])
296
297 - Implemented `-files0-from FILE` to take a list of `'\0'`-separated starting paths.
298   GNU find will implement the same feature in an upcoming release.
299
300 - Added colors to `-printf` output ([#62])
301
302 - Faster recovery from `E2BIG` during `-exec`
303
304 [#76]: https://github.com/tavianator/bfs/issues/76
305 [#77]: https://github.com/tavianator/bfs/issues/77
306 [#62]: https://github.com/tavianator/bfs/issues/62
307
308
309 2.2.1
310 -----
311
312 **June 2, 2021**
313
314 - Fixed some incorrect coloring of broken links when links are being followed (`-L`)
315
316 - Made the tests work when run as root by dropping privileges.
317   This may be helpful for certain packaging or CI environments, but is not recommended.
318
319 - Treat empty `PAGER` and `LESS` environment variables like they're unset, for `bfs -help` ([#71]).
320   Thanks @markus-oberhumer!
321
322 - The soft `RLIMIT_NOFILE` is now raised automatically to a fairly large value when possible.
323   This provides a minor performance benefit for large directory trees.
324
325 - Implemented time units for `-mtime` as found in FreeBSD find ([#75])
326
327 [#71]: https://github.com/tavianator/bfs/issues/71
328 [#75]: https://github.com/tavianator/bfs/issues/75
329
330
331 2.2
332 ---
333
334 **March 6, 2021**
335
336 - Fixed `-hidden` on hidden start paths
337
338 - Added a Bash completion script.
339   Thanks @bmundt6!
340
341 - Fixed rounding in `-used`.
342   Corresponding fixes were made to GNU find in version 4.8.0.
343
344 - Optimized the open directory representation.
345   On Linux, much libc overhead is bypassed by issuing syscalls directly.
346   On all platforms, a few fewer syscalls and open file descriptors will be used.
347
348 - Implemented `-flags` from BSD find
349
350
351 2.1
352 ---
353
354 **November 11, 2020**
355
356 - Added a new `-status` option that displays the search progress in a bar at the bottom of the terminal
357
358 - Fixed an optimizer bug introduced in version 2.0 that affected some combinations of `-user`/`-group` and `-nouser`/`-nogroup`
359
360
361 2.0
362 ---
363
364 **October 14, 2020**
365
366 - [#8]: New `-exclude <expression>` syntax to more easily and reliably filter out paths.
367   For example:
368
369       bfs -name config -exclude -name .git
370
371   will find all files named `config`, without searching any directories (or files) named `.git`.
372   In this case, the same effect could have been achieved (more awkwardly) with `-prune`:
373
374       bfs ! \( -name .git -prune \) -name config
375
376   But `-exclude` will work in more cases:
377
378       # -exclude works with -depth, while -prune doesn't:
379       bfs -depth -name config -exclude -name .git
380
381       # -exclude applies even to paths below the minimum depth:
382       bfs -mindepth 3 -name config -exclude -name .git
383
384 - [#30]: `-nohidden` is now equivalent to `-exclude -hidden`.
385   This changes the behavior of command lines like
386
387       bfs -type f -nohidden
388
389   to do what was intended.
390
391 - Optimized the iterative deepening (`-S ids`) implementation
392
393 - Added a new search strategy: exponential deepening search (`-S eds`).
394   This strategy provides many of the benefits of iterative deepening, but much faster due to fewer re-traversals.
395
396 - Fixed an optimizer bug that could skip `-empty`/`-xtype` if they didn't always lead to an action
397
398 - Implemented `-xattrname` to find files with a particular extended attribute (from macOS find)
399
400 - Made `-printf %l` still respect the width specifier (e.g. `%10l`) for non-links, to match GNU find
401
402 - Made `bfs` fail if `-color` is given explicitly and `LS_COLORS` can't be parsed, rather than falling back to non-colored output
403
404 [#8]: https://github.com/tavianator/bfs/issues/8
405 [#30]: https://github.com/tavianator/bfs/issues/30
406
407
408 1.*
409 ===
410
411 1.7
412 ---
413
414 **April 22, 2020**
415
416 - Fixed `-ls` printing numeric IDs instead of user/group names in large directory trees
417 - Cached the user and group tables for a performance boost
418 - Fixed interpretation of "default" ACLs
419 - Implemented `-s` flag to sort results
420
421
422 1.6
423 ---
424
425 **February 25, 2020**
426
427 - Implemented `-newerXt` (explicit reference times), `-since`, `-asince`, etc.
428 - Fixed `-empty` to skip special files (pipes, devices, sockets, etc.)
429
430
431 1.5.2
432 -----
433
434 **January 9, 2020**
435
436 - Fixed the build on NetBSD
437 - Added support for NFSv4 ACLs on FreeBSD
438 - Added a `+` after the file mode for files with ACLs in `-ls`
439 - Supported more file types (whiteouts, doors) in symbolic modes for `-ls`/`-printf %M`
440 - Implemented `-xattr` on FreeBSD
441
442
443 1.5.1
444 -----
445
446 **September 14, 2019**
447
448 - Added a warning to `-mount`, since it will change behaviour in the next POSIX revision
449 - Added a workaround for environments that block `statx()` with `seccomp()`, like older Docker
450 - Fixed coloring of nonexistent leading directories
451 - Avoided calling `stat()` on all mount points at startup
452
453
454 1.5
455 ---
456
457 **June 27, 2019**
458
459 - New `-xattr` predicate to find files with extended attributes
460 - Fixed the `-acl` implementation on macOS
461 - Implemented depth-first (`-S dfs`) and iterative deepening search (`-S ids`)
462 - Piped `-help` output into `$PAGER` by default
463 - Fixed crashes on some invalid `LS_COLORS` values
464
465
466 1.4.1
467 -----
468
469 **April 5, 2019**
470
471 - Added a nicer error message when the tests are run as root
472 - Fixed detection of comparison expressions with signs, to match GNU find for things like `-uid ++10`
473 - Added support for https://no-color.org/
474 - Decreased the number of `stat()` calls necessary in some cases
475
476
477 1.4
478 ---
479
480 **April 15, 2019**
481
482 - New `-unique` option that filters out duplicate files ([#48])
483 - Optimized the file coloring implementation
484 - Fixed the coloring implementation to match GNU ls more closely in many corner cases
485   - Implemented escape sequence parsing for `LS_COLORS`
486   - Implemented `ln=target` for coloring links like their targets
487   - Fixed the order of fallbacks used when some color keys are unset
488 - Add a workaround for incorrect file types for bind-mounted files on Linux ([#37])
489
490 [#48]: https://github.com/tavianator/bfs/issues/48
491 [#37]: https://github.com/tavianator/bfs/issues/37
492
493
494 1.3.3
495 -----
496
497 **February 10, 2019**
498
499 - Fixed unpredictable behaviour for empty responses to `-ok`/`-okdir` caused by an uninitialized string
500 - Writing to standard output now causes `bfs` to fail if the descriptor was closed
501 - Fixed incomplete file coloring in error messages
502 - Added some data flow optimizations
503 - Fixed `-nogroup`/`-nouser` in big directory trees
504 - Added `-type w` for whiteouts, as supported by FreeBSD `find`
505 - Re-wrote the `-help` message and manual page
506
507
508 1.3.2
509 -----
510
511 **January 11, 2019**
512
513 - Fixed an out-of-bounds read if LS_COLORS doesn't end with a `:`
514 - Allowed multiple debug flags to be specified like `-D opt,tree`
515
516
517 1.3.1
518 -----
519
520 **January 3, 2019**
521
522 - Fixed some portability problems affecting FreeBSD
523
524
525 1.3
526 ---
527
528 **January 2, 2019**
529
530 New features:
531
532 - `-acl` finds files with non-trivial Access Control Lists (from FreeBSD)
533 - `-capable` finds files with capabilities set
534 - `-D all` turns on all debugging flags at once
535
536 Fixes:
537
538 - `LS_COLORS` handling has been improved:
539   - Extension colors are now case-insensitive like GNU `ls`
540   - `or` (orphan) and `mi` (missing) files are now treated differently
541   - Default colors can be unset with `di=00` or similar
542   - Specific colors fall back to more general colors when unspecified in more places
543   - `LS_COLORS` no longer needs a trailing colon
544 - `-ls`/`-fls` now prints the major/minor numbers for device nodes
545 - `-exec ;` is rejected rather than segfaulting
546 - `bfs` now builds on old Linux versions that require `-lrt` for POSIX timers
547 - For files whose access/change/modification times can't be read, `bfs` no longer fails unless those times are needed for tests
548 - The testsuite is now more correct and portable
549
550
551 1.2.4
552 -----
553
554 **September 24, 2018**
555
556 - GNU find compatibility fixes for `-printf`:
557   - `%Y` now prints `?` if an error occurs resolving the link
558   - `%B` is now supported for birth/creation time (as well as `%W`/`%w`)
559   - All standard `strftime()` formats are supported, not just the ones from the GNU find manual
560 - Optimizations are now re-run if any expressions are reordered
561 - `-exec` and friends no longer leave zombie processes around when `exec()` fails
562
563
564 1.2.3
565 -----
566
567 **July 15, 2018**
568
569 - Fixed `test_depth_error` on filesystems that don't fill in `d_type`
570 - Fixed the build on Linux architectures that don't have the `statx()` syscall (ia64, sh4)
571 - Fixed use of AT_EMPTY_PATH for fstatat on systems that don't support it (Hurd)
572 - Fixed `ARG_MAX` accounting on architectures with large pages (ppc64le)
573 - Fixed the build against the upcoming glibc 2.28 release that includes its own `statx()` wrapper
574
575
576 1.2.2
577 -----
578
579 **June 23, 2018**
580
581 - Minor bug fixes:
582   - Fixed `-exec ... '{}' +` argument size tracking after recovering from `E2BIG`
583   - Fixed `-fstype` if `/proc` is available but `/etc/mtab` is not
584   - Fixed an uninitialized variable when given `-perm +rw...`
585   - Fixed some potential "error: 'path': Success" messages
586 - Reduced reliance on GNU coreutils in the testsuite
587 - Refactored and simplified the internals of `bftw()`
588
589
590 1.2.1
591 -----
592
593 **February 8, 2018**
594
595 - Performance optimizations
596
597
598 1.2
599 ---
600
601 **January 20, 2018**
602
603 - Added support for the `-perm +7777` syntax deprecated by GNU find (equivalent to `-perm /7777`), for compatibility with BSD finds
604 - Added support for file birth/creation times on platforms that report it
605   - `-Bmin`/`-Btime`/`-Bnewer`
606   - `B` flag for `-newerXY`
607   - `%w` and `%Wk` directives for `-printf`
608   - Uses the `statx(2)` system call on new enough Linux kernels
609 - More robustness to `E2BIG` added to the `-exec` implementation
610
611
612 1.1.4
613 -----
614
615 **October 27, 2017**
616
617 - Added a man page
618 - Fixed cases where multiple actions write to the same file
619 - Report errors that occur when closing files/flushing streams
620 - Fixed "argument list too long" errors with `-exec ... '{}' +`
621
622
623 1.1.3
624 -----
625
626 **October 4, 2017**
627
628 - Refactored the optimizer
629 - Implemented data flow optimizations
630
631
632 1.1.2
633 -----
634
635 **September 10, 2017**
636
637 - Fixed `-samefile` and similar predicates when passed broken symbolic links
638 - Implemented `-fstype` on Solaris
639 - Fixed `-fstype` under musl
640 - Implemented `-D search`
641 - Implemented a cost-based optimizer
642
643
644 1.1.1
645 -----
646
647 **August 10, 2017**
648
649 - Re-licensed under the BSD Zero Clause License
650 - Fixed some corner cases with `-exec` and `-ok` parsing
651
652
653 1.1
654 ---
655
656 **July 22, 2017**
657
658 - Implemented some primaries from NetBSD `find`:
659   - `-exit [STATUS]` (like `-quit`, but with an optional explicit exit status)
660   - `-printx` (escape special characters for `xargs`)
661   - `-rm` (alias for `-delete`)
662 - Warn if `-prune` will have no effect due to `-depth`
663 - Handle y/n prompts according to the user's locale
664 - Prompt the user to correct typos without having to re-run `bfs`
665 - Fixed handling of paths longer than `PATH_MAX`
666 - Fixed spurious "Inappropriate ioctl for device" errors when redirecting `-exec ... +` output
667 - Fixed the handling of paths that treat a file as a directory (e.g. `a/b/c` where `a/b` is a regular file)
668 - Fixed an expression optimizer bug that broke command lines like `bfs -name '*' -o -print`
669
670
671 1.0.2
672 -----
673
674 **June 15, 2017**
675
676 Bugfix release.
677
678 - Fixed handling of \0 inside -printf format strings
679 - Fixed `-perm` interpretation of permcopy actions (e.g. `u=rw,g=r`)
680
681
682 1.0.1
683 -----
684
685 **May 17, 2017**
686
687 Bugfix release.
688
689 - Portability fixes that mostly affect GNU Hurd
690 - Implemented `-D exec`
691 - Made `-quit` not disable the implicit `-print`
692
693
694 1.0
695 ---
696
697 **April 24, 2017**
698
699 This is the first release of bfs with support for all of GNU find's primitives.
700
701 Changes since 0.96:
702
703 - Implemented `-fstype`
704 - Implemented `-exec/-execdir ... +`
705 - Implemented BSD's `-X`
706 - Fixed the tests under Bash 3 (mostly for macOS)
707 - Some minor optimizations and fixes
708
709
710 0.*
711 ===
712
713
714 0.96
715 ----
716
717 **March 11, 2017**
718
719 73/76 GNU find features supported.
720
721 - Implemented -nouser and -nogroup
722 - Implemented -printf and -fprintf
723 - Implemented -ls and -fls
724 - Implemented -type with multiple types at once (e.g. -type f,d,l)
725 - Fixed 32-bit builds
726 - Fixed -lname on "symlinks" in Linux /proc
727 - Fixed -quit to take effect as soon as it's reached
728 - Stopped redirecting standard input from /dev/null for -ok and -okdir, as that violates POSIX
729 - Many test suite improvements
730
731
732 0.88
733 ----
734
735 **December 20, 2016**
736
737 67/76 GNU find features supported.
738
739 - Fixed the build on macOS, and some other UNIXes
740 - Implemented `-regex`, `-iregex`, `-regextype`, and BSD's `-E`
741 - Implemented `-x` (same as `-mount`/`-xdev`) from BSD
742 - Implemented `-mnewer` (same as `-newer`) from BSD
743 - Implemented `-depth N` from BSD
744 - Implemented `-sparse` from FreeBSD
745 - Implemented the `T` and `P` suffices for `-size`, for BSD compatibility
746 - Added support for `-gid NAME` and `-uid NAME` as in BSD
747
748
749 0.84.1
750 ------
751
752 **November 24, 2016**
753
754 Bugfix release.
755
756 - Fixed [#7] again
757 - Like GNU find, don't print warnings by default if standard input is not a terminal
758 - Redirect standard input from /dev/null for -ok and -okdir
759 - Skip . when -delete'ing
760 - Fixed -execdir when the root path has no slashes
761 - Fixed -execdir in /
762 - Support -perm +MODE for symbolic modes
763 - Fixed the build on FreeBSD
764
765 [#7]: https://github.com/tavianator/bfs/issues/7
766
767
768 0.84
769 ----
770
771 **October 29, 2016**
772
773 64/76 GNU find features supported.
774
775 - Spelling suggestion improvements
776 - Handle `--`
777 - (Untested) support for exotic file types like doors, ports, and whiteouts
778 - Improved robustness in the face of closed std{in,out,err}
779 - Fixed the build on macOS
780 - Implement `-ignore_readdir_race`, `-noignore_readdir_race`
781 - Implement `-perm`
782
783
784 0.82
785 ----
786
787 **September 4, 2016**
788
789 62/76 GNU find features supported.
790
791 - Rework optimization levels
792   - `-O1`
793     - Simple boolean simplification
794   - `-O2`
795     - Purity-based optimizations, allowing side-effect-free tests like `-name` or `-type` to be moved or removed
796   - `-O3` (**default**):
797     - Re-order tests to reduce the expected cost (TODO)
798   - `-O4`
799     - Aggressive optimizations that may have surprising effects on warning/error messages and runtime, but should not otherwise affect the results
800   - `-Ofast`:
801     - Always the highest level, currently the same as `-O4`
802 - Color files with multiple hard links correctly
803 - Treat `-`, `)`, and `,` as paths when required to by POSIX
804   - `)` and `,` are only supported before the expression begins
805 - Implement `-D opt`
806 - Implement `-D rates`
807 - Implement `-fprint`
808 - Implement `-fprint0`
809 - Implement BSD's `-f`
810 - Suggest fixes for typo'd arguments
811
812 0.79
813 ----
814
815 **May 27, 2016**
816
817 60/76 GNU find features supported.
818
819 - Remove an errant debug `printf()` from `-used`
820 - Implement the `{} ;` variants of `-exec`, `-execdir`, `-ok`, and `-okdir`
821
822
823 0.74
824 ----
825
826 **March 12, 2016**
827
828 56/76 GNU find features supported.
829
830 - Color broken symlinks correctly
831 - Fix [#7]
832 - Fix `-daystart`'s rounding of midnight
833 - Implement (most of) `-newerXY`
834 - Implement `-used`
835 - Implement `-size`
836
837 [#7]: https://github.com/tavianator/bfs/issues/7
838
839
840 0.70
841 ----
842
843 **February 23, 2016**
844
845 53/76 GNU find features supported.
846
847 - New `make install` and `make uninstall` targets
848 - Squelch non-positional warnings for `-follow`
849 - Reduce memory footprint by as much as 64% by closing `DIR*`s earlier
850 - Speed up `bfs` by ~5% by using a better FD cache eviction policy
851 - Fix infinite recursion when evaluating `! expr`
852 - Optimize unused pure expressions (e.g. `-empty -a -false`)
853 - Optimize double-negation (e.g. `! ! -name foo`)
854 - Implement `-D stat` and `-D tree`
855 - Implement `-O`
856
857
858 0.67
859 ----
860
861 **February 14, 2016**
862
863 Initial release.
864
865 51/76 GNU find features supported.