mirror of
https://github.com/sharkdp/fd
synced 2024-10-02 22:13:31 +00:00
Merge pull request #817 from will459/add_no_ignore_parent
Add --no-ignore-parent flag
This commit is contained in:
commit
476d404938
|
@ -5,6 +5,8 @@
|
|||
|
||||
- Add new `-q, --quiet` flag, see #303 (@Asha20)
|
||||
|
||||
- Add new `--no-ignore-parent` flag, see #787 (@will459)
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Set default path separator to `/` in MSYS, see #537 and #730 (@aswild)
|
||||
|
|
10
src/app.rs
10
src/app.rs
|
@ -49,6 +49,16 @@ pub fn build_app() -> App<'static, 'static> {
|
|||
ignored by '.gitignore' files.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("no-ignore-parent")
|
||||
.long("no-ignore-parent")
|
||||
.overrides_with("no-ignore-parent")
|
||||
.hidden_short_help(true)
|
||||
.long_help(
|
||||
"Show search results from files and directories that would otherwise be \
|
||||
ignored by '.gitignore', '.ignore', or '.fdignore' files in parent directories.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("no-global-ignore-file")
|
||||
.long("no-global-ignore-file")
|
||||
|
|
|
@ -340,6 +340,10 @@ fn run() -> Result<ExitCode> {
|
|||
read_vcsignore: !(matches.is_present("no-ignore")
|
||||
|| matches.is_present("rg-alias-hidden-ignore")
|
||||
|| matches.is_present("no-ignore-vcs")),
|
||||
read_parent_ignore: !(matches.is_present("no-ignore")
|
||||
|| matches.is_present("rg-alias-hidden-ignore")
|
||||
|| matches.is_present("no-ignore-vcs")
|
||||
|| matches.is_present("no-ignore-parent")),
|
||||
read_global_ignore: !(matches.is_present("no-ignore")
|
||||
|| matches.is_present("rg-alias-hidden-ignore")
|
||||
|| matches.is_present("no-global-ignore-file")),
|
||||
|
|
|
@ -24,6 +24,9 @@ pub struct Options {
|
|||
/// Whether to respect `.fdignore` files or not.
|
||||
pub read_fdignore: bool,
|
||||
|
||||
/// Whether to respect ignore files in parent directories or not.
|
||||
pub read_parent_ignore: bool,
|
||||
|
||||
/// Whether to respect VCS ignore files (`.gitignore`, ..) or not.
|
||||
pub read_vcsignore: bool,
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ pub fn scan(path_vec: &[PathBuf], pattern: Arc<Regex>, config: Arc<Options>) ->
|
|||
walker
|
||||
.hidden(config.ignore_hidden)
|
||||
.ignore(config.read_fdignore)
|
||||
.parents(config.read_fdignore || config.read_vcsignore)
|
||||
.parents(config.read_parent_ignore)
|
||||
.git_ignore(config.read_vcsignore)
|
||||
.git_global(config.read_vcsignore)
|
||||
.git_exclude(config.read_vcsignore)
|
||||
|
|
|
@ -498,6 +498,78 @@ fn test_gitignore_and_fdignore() {
|
|||
);
|
||||
}
|
||||
|
||||
/// Ignore parent ignore files (--no-ignore-parent)
|
||||
#[test]
|
||||
fn test_no_ignore_parent() {
|
||||
let dirs = &["inner"];
|
||||
let files = &[
|
||||
"inner/parent-ignored",
|
||||
"inner/child-ignored",
|
||||
"inner/not-ignored",
|
||||
];
|
||||
let te = TestEnv::new(dirs, files);
|
||||
|
||||
// Ignore 'parent-ignored' in root
|
||||
fs::File::create(te.test_root().join(".gitignore"))
|
||||
.unwrap()
|
||||
.write_all(b"parent-ignored")
|
||||
.unwrap();
|
||||
// Ignore 'child-ignored' in inner
|
||||
fs::File::create(te.test_root().join("inner/.gitignore"))
|
||||
.unwrap()
|
||||
.write_all(b"child-ignored")
|
||||
.unwrap();
|
||||
|
||||
te.assert_output_subdirectory("inner", &[], "not-ignored");
|
||||
|
||||
te.assert_output_subdirectory(
|
||||
"inner",
|
||||
&["--no-ignore-parent"],
|
||||
"parent-ignored
|
||||
not-ignored",
|
||||
);
|
||||
}
|
||||
|
||||
/// Ignore parent ignore files (--no-ignore-parent) with an inner git repo
|
||||
#[test]
|
||||
fn test_no_ignore_parent_inner_git() {
|
||||
let dirs = &["inner"];
|
||||
let files = &[
|
||||
"inner/parent-ignored",
|
||||
"inner/child-ignored",
|
||||
"inner/not-ignored",
|
||||
];
|
||||
let te = TestEnv::new(dirs, files);
|
||||
|
||||
// Make the inner folder also appear as a git repo
|
||||
fs::create_dir_all(te.test_root().join("inner/.git")).unwrap();
|
||||
|
||||
// Ignore 'parent-ignored' in root
|
||||
fs::File::create(te.test_root().join(".gitignore"))
|
||||
.unwrap()
|
||||
.write_all(b"parent-ignored")
|
||||
.unwrap();
|
||||
// Ignore 'child-ignored' in inner
|
||||
fs::File::create(te.test_root().join("inner/.gitignore"))
|
||||
.unwrap()
|
||||
.write_all(b"child-ignored")
|
||||
.unwrap();
|
||||
|
||||
te.assert_output_subdirectory(
|
||||
"inner",
|
||||
&[],
|
||||
"not-ignored
|
||||
parent-ignored",
|
||||
);
|
||||
|
||||
te.assert_output_subdirectory(
|
||||
"inner",
|
||||
&["--no-ignore-parent"],
|
||||
"not-ignored
|
||||
parent-ignored",
|
||||
);
|
||||
}
|
||||
|
||||
/// Precedence of .fdignore files
|
||||
#[test]
|
||||
fn test_custom_ignore_precedence() {
|
||||
|
|
Loading…
Reference in a new issue