sharkdp / fd

A simple, fast and user-friendly alternative to 'find'
Apache License 2.0
33.88k stars 809 forks source link

[BUG] fd showing hidden folder contents ignored by parent .gitignore. #1591

Open smartinellimarco opened 3 months ago

smartinellimarco commented 3 months ago

Checks

Describe the bug you encountered:

Given this directory:

.
├── .git
├── .gitignore
└── myfolder <-- Current directory
    ├── .pulumi
    ├── __pycache__
    ├── data
    └── venv

and the following .gitignore:

**/.pulumi/backups/
**/.pulumi/history/

When calling 'fd --hidden' from inside 'myfolder', I get all the files in the ignored folders listed.

It behaves correctly if the cwd is:

. <-- Current directory
├── .git
├── .gitignore
└── myfolder
    ├── .pulumi
    ├── __pycache__
    ├── data
    └── venv

Describe what you expected to happen:

'fd' respecting the parent .gitignore

What version of fd are you using?

fd 10.1.0

Which operating system / distribution are you on?

Darwin 23.3.0 arm64
tmccombs commented 2 months ago

This behavior is also exhibited by rigprep (with rg --files --hidden), so this is probably a bug in the upstream ignore project. You should probably file it on the ripgrep project.

From some experimentation, I've found that this seems to only happen when you have a pattern with path components.

Here is a minimal reproduction:

$ cat .ignore
**/test/dir/
$ tree
.
└── myfolder
    ├── dat
    └── test
        └── dir
            └── a

4 directories, 2 files
$ fd
myfolder/
myfolder/dat
myfolder/test/
$ cd myfolder
$ fd
dat
test/
test/dir/
test/dir/a
$ rg --files
dat
test/dir/a
tmccombs commented 2 months ago

I think this might be the same as https://github.com/BurntSushi/ripgrep/issues/2836