Description
What version of ripgrep are you using?
ripgrep 0.8.1
-SIMD -AVX
What operating system are you using ripgrep on?
Archlinux (4.15.3-2-ARCH), also Ubuntu 16.04
Describe your question, feature request, or bug.
If I am in a git repository and run rg
with a directory as a PATH argument, then all files under that directory are searched, even if they would normally be ignored because of .gitignore rule. If I cd
into the directory and run rg
without a PATH argument, the files are excluded as I expect. changing into a subdirectory is a workaround but is sometimes less convenient than using a path argument.
The man page does say
Paths specified expicitly on the command line override glob and ignore rules.
Which could be interpreted to mean that the if such an argument is specified, the ignore rules are ignored altogether. But that behaviour is unexpected to me, and the wording of the documentation isn't entirely clear on whether it overrides all rules, or only rules that specifically ignore the specified path (but not children of that path).
If overriding all ignore rules is the intended behaviour there should at least be a way to turn the ignore rules back on, but --ignore-vcs
does nothing when supplied with a PATH argument.
Interestingly, if I specify a glob such as -g "*.c"
, that is respected for files under the path.
Steps to reproduce:
.gitignore:
/a/b/
a/b/test.txt:
Sample text
In root of repository:
rg Sample
produces no output
$ rg Sample a
a/b/test.txt
1:Sample text
Adding --ignore-vcs
produces the same output.
In a
directory rg Sample
also produces no output.
If this is a bug, what is the actual behavior?
rg --debug Sample a
DEBUG/grep::search/grep/src/search.rs:195: regex ast:
Literal {
chars: [
'S',
'a',
'm',
'p',
'l',
'e'
],
casei: false
}
DEBUG/grep::literals/grep/src/literals.rs:38: literal prefixes detected: Literals { lits: [Complete(Sample)], limit_size: 250, limit_class: 10 }
DEBUG/globset/globset/src/lib.rs:396: glob converted to regex: Glob { glob: "**/.*~", re: "(?-u)^(?:/?|.*/)\\..*\\~$", opts: GlobOptions { case_insensitive: false, literal_separator: false }, tokens: Tokens([RecursivePrefix, Literal('.'), ZeroOrMore, Literal('~')]) }
DEBUG/globset/globset/src/lib.rs:401: built glob set; 0 literals, 0 basenames, 1 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 1 regexes
DEBUG/globset/globset/src/lib.rs:401: built glob set; 1 literals, 0 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
a/b/test.txt
1:Sample text
If this is a bug, what is the expected behavior?
Produced no output, since a/b/test.txt is ignored by the .gitignore file.