summaryrefslogtreecommitdiffstats
path: root/CHANGELOG.md
blob: 584a602c914825b763bb559854bd28ff1be4495e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
# v10.0.0

## Features

- Add `dir` as an alias to `directory` when using `-t` \ `--type`, see #1460 and #1464 (@Ato2207).
- Add support for @%s date format in time filters similar to GNU date (seconds since Unix epoch for --older/--newer), see #1493 (@nabellows)
- Breaking: No longer automatically ignore `.git` when using `--hidden` with vcs ignore enabled. This reverts the change in v9.0.0. While this feature
  was often useful, it also broke some existing workflows, and there wasn't a good way to opt out of it. And there isn't really a good way for us to add
  a way to opt out of it. And you can easily get similar behavior by adding `.git/` to your global fdignore file.
    See #1457.

## Bugfixes

- Respect NO_COLOR environment variable with `--list-details` option. (#1455)
- Fix bug that would cause hidden files to be included despite gitignore rules
  if search path is "." (#1461, BurntSushi/ripgrep#2711).
- aarch64 builds now use 64k page sizes with jemalloc. This fixes issues on some systems, such as ARM Macs that
  have a larger system page size than the system that the binary was built on. (#1547)
- Address [CVE-2024-24576](https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html), by increasing minimum rust version.


## Changes
- Minimum supported rust version is now 1.77.2


# v9.0.0

## Performance

- Performance has been *significantly improved*, both due to optimizations in the underlying `ignore`
  crate (#1429), and in `fd` itself (#1422, #1408, #1362) - @tavianator.
  [Benchmarks results](https://gist.github.com/tavianator/32edbe052f33ef60570cf5456b59de81) show gains
  of 6-8x for full traversals of smaller directories (100k files) and up to 13x for larger directories (1M files).

- The default number of threads is now constrained to be at most 64. This should improve startup time on
  systems with many CPU cores. (#1203, #1410, #1412, #1431) - @tmccombs and @tavianator

- New flushing behavior when writing output to stdout, providing better performance for TTY and non-TTY
  use cases, see #1452 and #1313 (@tavianator).

## Features

- Support character and block device file types, see #1213 and #1336 (@cgzones)
- Breaking: `.git/` is now ignored by default when using `--hidden` / `-H`, use `--no-ignore` / `-I` or
  `--no-ignore-vcs` to override, see #1387 and #1396 (@skoriop)

## Bugfixes

- Fix `NO_COLOR` support, see #1421 (@acuteenvy)

## Other

- Fixed documentation typos, see #1409 (@marcospb19)

## Thanks

Special thanks to @tavianator for his incredible work on performance in the `ignore` crate and `fd` itself.



# v8.7.1

## Bugfixes

- `-1` properly conflicts with the exec family of options.
- `--max-results` overrides `-1`
- `--quiet` properly conflicts with the exec family of options. This used to be the case, but broke during the switch to clap-derive
- `--changed-within` now accepts a space as well as a "T" as the separator between date and time (due to update of chrono dependency)

## Other
- Many dependencies were updated
- Some documentation was updated and fixed

# v8.7.0

## Features

- Add flag --no-require-git to always respect gitignore files, see #1216 (@vegerot)

## Bugfixes

- Fix logic for when to use global ignore file. There was a bug where the only case where the
  global ignore file wasn't processed was if `--no-ignore` was passed, but neither `--unrestricted`
  nor `--no-global-ignore-file` is passed. See #1209

# v8.6.0

## Features

- New `--and <pattern>` option to add additional patterns that must also be matched. See #315
  and #1139 (@Uthar)
- Added `--changed-after` as alias for `--changed-within`, to have a name consistent with `--changed-before`.


## Changes

- Breaking: On Unix-like systems, `--type executable` now additionally checks if
  the file is executable by the current user, see #1106 and #1169 (@ptipiak)


## Bugfixes

- Use fd instead of fd.exe for Powershell completions (when completions are generated on windows)


## Other


# v8.5.3

## Bugfixes

- Fix completion generation to not include full path of fd command
- Fix build error if completions feature is disabled

# v8.5.2

## Bugfixes

- Fix --owner option value parsing, see #1163 and #1164 (@tmccombs)


# v8.5.1

## Bugfixes

- Fix --threads/-j option value parsing, see #1160 and #1162 (@sharkdp)


# v8.5.0

## Features

- `--type executable`/`-t` now works on Windows, see #1051 and #1061 (@tavianator)

## Bugfixes

- Fixed differences between piped / non-piped output. This changes `fd`s behavior back to what we
  had before 8.3.0, i.e. there will be no leading `./` prefixes, unless `--exec`/`-x`,
  `--exec-batch`/`-X`, or `--print0`/`-0` are used. `--strip-cwd-prefix` can be used to strip that
  prefix in those cases. See #1046, #1115, and #1121 (@tavianator)
- `fd` could previously crash with a panic due to a race condition in Rusts standard library
  (see https://github.com/rust-lang/rust/issues/39364). This has been fixed by switching to a different
  message passing implementation, see #1060 and #1146 (@tavianator)
- `fd`s memory usage will not grow unboundedly on huge directory trees, see #1146 (@tavianator)
- fd returns an error when current working directory does not exist while a search path is
  specified, see #1072 (@vijfhoek)
- Improved "command not found" error message, see #1083 and #1109 (@themkat)
- Preserve command exit codes when using `--exec-batch`, see #1136 and #1137 (@amesgen)

## Changes

- No leading `./` prefix for non-interactive results, see above.
- fd now colorizes paths in parallel, significantly improving performance, see #1148 (@tavianator)
- fd can now avoid `stat` syscalls even when colorizing paths, as long as the color scheme doesn't
  require metadata, see #1148 (@tavianator)
- The statically linked `musl` versions of `fd` now use `jmalloc`, leading to a significant performance
  improvement, see #1062 (@tavianator)

## Other

- Added link back to GitHub in man page and `--help` text, see #1086 (@scottchiefbaker)
- Major update in how `fd` handles command line options internally, see #1067 (@tmccombs)

# v8.4.0

## Features

- Support multiple `--exec <cmd>` instances, see #406 and #960 (@tmccombs)

## Bugfixes

- "Argument list too long" errors can not appear anymore when using `--exec-batch`/`-X`, as the command invocations are automatically batched at the maximum possible size, even if `--batch-size` is not given. See #410 and #1020 (@tavianator)

## Changes

- Directories are now printed with an additional path separator at the end: `foo/bar/`, see #436 and #812 (@yyogo)
- The `-u` flag was changed to be equivalent to `-HI` (previously, a single `-u` was only equivalent to `-I`). Additional `-u` flags are still allowed, but ignored. See #840 and #986 (@jacksontheel)

## Other

- Added installation instructions for RHEL8, see #989 (@ethsol)


# v8.3.2

## Bugfixes

- Invalid absolute path on windows when searching from the drive root, see #931 and #936 (@gbarta)


# v8.3.1

## Bugfixes

- Stop implying `--no-ignore-parent` when `--no-vcs-ignore` is supplied, see #907, #901, #908 (@tmccombs)
- fd no longer waits for the whole traversal if the only matches arrive within max_buffer_time, see #868 and #895 (@tavianator)
- `--max-results=1` now immediately quits after the first result, see #867
- `fd -h` does not panic anymore when stdout is closed, see #897

## Changes

- Disable jemalloc on FreeBSD, see #896 (@xanderio)
- Updated man page, see #912 (@rlue)
- Updated zsh completions, see #932 (@tmccombs)


# v8.3.0

## Performance improvements

- Colorized output is now significantly faster, see #720 and #853 (@tavianator)
- Writing to stdout is now buffered if the output does not go to a TTY. This increases performance
  when the output of `fd` is piped to another program or to a file, see #885 (@tmccombs, original
  implementation by @sourlemon207)
- File metadata is now cached between the different filters that require it (e.g. `--owner`,
  `--size`), reducing the number of `stat` syscalls when multiple filters are used; see #863
  (@tavianator, original implementation by @alexmaco)

## Features

- Don't buffer command output from `--exec` when using a single thread. See #522
- Add new `-q, --quiet` flag, see #303 (@Asha20)
- Add new `--no-ignore-parent` flag, see #787 (@will459)
- Add new `--batch-size` flag, see #410 (@devonhollowood)
- Add opposing command-line options, see #595 (@Asha20)
- Add support for more filesystem indicators in `LS_COLORS`, see
  https://github.com/sharkdp/lscolors/pull/35 (@tavianator)

## Bugfixes

- Always show the `./` prefix for search results unless the output is a TTY or `--strip-cwd-prefix` is set, see #760 and #861 (@jcaplan)
- Set default path separator to `/` in MSYS, see #537 and #730 (@aswild)
- fd cannot search files under a RAM disk, see #752
- fd doesn't show substituted drive on Windows, see #365
- Properly handle write errors to devices that are full, see #737
- Use local time zone for time functions (`--change-newer-than`, `--change-older-than`), see #631 (@jacobmischka)
- Support `--list-details` on more platforms (like BusyBox), see #783
- The filters `--owner`, `--size`, and `--changed-{within,before}` now apply to symbolic links
  themselves, rather than the link target, except when `--follow` is specified; see #863
- Change time comparisons to be exclusive, see #794 (@jacobmischka)

## Changes

- Apply custom `--path-separator` to commands run with `--exec(-batch)` and `--list-details`, see #697 (@aswild)

## Other

- Many documentation updates


# v8.2.1

No functional changes with respect to v8.2.0. Bugfix in the release process.

# v8.2.0

## Features

- Add new `--prune` flag, see #535 (@reima)
- Improved the usability of the time-based options, see #624 and #645 (@gorogoroumaru)
- Add support for exact file sizes in the `--size` filter, see #669 and #696 (@Rogach)
- `fd` now prints an error message if the search pattern requires a leading dot but
  `--hidden` is not enabled (Unix only), see #615

## Bugfixes

- Avoid panic when performing limited searches in directories with restricted permissions, see #678
- Invalid numeric command-line arguments are silently ignored, see #675
- Disable jemalloc on Android, see #662
- The `--help` text will be colorless if `NO_COLOR` has been set, see #600 (@xanonid)

## Changes

- If `LS_COLORS` is not set (e.g. on Windows), we now provide a more comprehensive default which
  includes much more filetypes, see #604 and #682 (mjsir911).

## Other

- Added `zsh` completion files, see #654 and #189 (@smancill)

# v8.1.1

## Bugfixes

- Support colored output on older Windows versions if either (1) `--color=always` is set or (2) the `TERM` environment variable is set. See #469

# v8.1.0

## Features

- Add new `--owner [user][:group]` filter. See #307 (pull #581) (@alexmaco)
- Add support for a global ignore file (`~/.config/fd/ignore` on Unix), see #575 (@soedirgo)
- Do not exit immediately if one of the search paths is missing, see #587 (@DJRHails)

## Bugfixes

- Reverted a change from fd 8.0 that enabled colors on all Windows terminals (see below) in order to support older Windows versions again, see #577. Unfortunately, this re-opens #469
- Fix segfault caused by jemalloc on macOS Catalina, see #498
- Fix `--glob` behavior with empty pattern, see #579 (@SeamusConnor)
- Fix `--list-details` on FreeBSD, DragonFly BSD, OpenBSD and NetBSD. See #573 (@t6)

## Changes

- Updated documentation for `--size`, see #584

# v8.0.0

## Features

- Add a new `-l`/`--list-details` option to show more details about the search results. This is
  basically an alias for `--exec-batch ls -l` with some additional `ls` options.
  This can be used in order to:
    * see metadata like permissions, owner, file size, modification times (#491)
    * see symlink targets (#482)
    * achieve a deterministic output order (#324, #196, #159)
- Add a new `--max-results=<count>` option to limit the number of search results, see #472, #476 and #555
  This can be useful to speed up searches in cases where you know that there are only N results.
  Using this option is also (slightly) faster than piping to `head -n <count>` where `fd` can only
  exit when it finds the search results `<count> + 1`.
- Add the alias `-1` for `--max-results=1`, see #561. (@SimplyDanny).
- Add new `--type socket` and `--type pipe` filters, see #511.
- Add new `--min-depth <depth>` and `--exact-depth <depth>` options in addition to the existing option
  to limit the maximum depth. See #404.
- Support additional ANSI font styles in `LS_COLORS`: faint, slow blink, rapid blink, dimmed, hidden and strikethrough.

## Bugfixes

- Preserve non-UTF8 filenames: invalid UTF-8 filenames are now properly passed to child-processes
  when using `--exec`, `--exec-batch` or `--list-details`. In `fd`'s output, we replace non-UTF-8
  sequences with the "�" character. However, if the output of `fd` goes to another process, we
  print the actual bytes of the filename. For more details, see #558 and #295.
- `LS_COLORS` entries with unsupported font styles are not completely ignored, see #552

## Changes

- Colored output will now be enabled by default on older Windows versions.
  This allows the use of colored output if the terminal supports it (e.g.
  MinTTY, Git Bash). On the other hand, this will be a regression for users
  on older Windows versions with terminals that do not support ANSI escape
  sequences. Affected users can use an alias `fd="fd --color=never"` to
  continue using `fd` without colors. There is no change of behavior for
  Windows 10. See #469.
- When using `--glob` in combination with `--full-path`, a `*` character does not match a path
  separation character (`/` or `\\`) anymore. You can use `**` for that. This allows things like
  `fd -p -g '/some/base/path/*/*/*.txt'` which would previously match to arbitrary depths (instead
  of exactly two folders below `/some/base/path`. See #404.
- "Legacy" support to use `fd -exec` (with a single dash) has been removed. Use `fd -x` or
  `fd --exec` instead.
- Overall improved error handling and error messages.


## Other

- Korean translation of the README, see: [한국어](https://github.com/spearkkk/fd-kor) (@spearkkk)


# v7.5.0

## Features

- Added `--one-file-system` (aliases: `--mount`, `--xdev`) to not cross file system boundaries on Unix and Windows, see #507 (@FallenWarrior2k).
- Added `--base-directory` to change the working directory in which `fd` is run, see #509 and #475 (@hajdamak).
- `fd` will not use colored output if the `NO_COLOR` environment variable is set, see #550 and #551 (@metadave).
- `fd --exec` will return exit code 1 if one of the executed commands fails, see #526 and #531 (@fusillicode and @Giuffre)

## Bug Fixes

- Fixed 'command not found' error when using zsh completion, see #487 (@barskern).
- `fd -L` should include broken symlinks, see #357 and #497 (@tommilligan, @neersighted and @sharkdp)
- Display directories even if we don't have permission to enter, see #437 (@sharkdp)

## Changes

- A flag can now be passed multiple times without producing an error, see #488 and #496 (@rootbid).
- Search results are sorted when using the `-X` option to match the behaviour of piping to `xargs`, see #441 and #524 (@Marcoleni @crash-g).


# v7.4.0

## Performance improvements

- Reduce number of `stat` syscalls, improving the performance for searches where file metadata is
  required (`--type`, `--size`, `--changed-within`, …), see #434 (@tavianator)
- Use jemalloc by default, improving the performance for almost all searches, see #481. Note that
  Windows and `*musl*` builds do not profit from this.

## Features

- Added a new `-g`/`--glob` option to switch to glob-based searches (instead of regular expression
  based searches). This is accompanied by a new `--regex` option that can be used to switch back,
  if users want to `alias fd="fd --glob"`. See #284
- Added a new `--path-separator <sep>` option which can be useful for Windows users who
  want/need `fd` to use `/` instead of `\`, see #428 and #153 (@mookid)
- Added support for hidden files on Windows, see #379