summaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2020-03-15 11:04:47 -0400
committerAndrew Gallant <jamslam@gmail.com>2020-03-15 13:19:14 -0400
commitc4c43c733ee9a44d3a48aa7f22284a6db6f0f9c6 (patch)
treeca7d8656f03c8f1d2e32d89c23855a526c3120f4 /crates
parent447506ebe02f1475734b66137feb02ae0fd9decf (diff)
cli: add --no-ignore-files flag
The purpose of this flag is to force ripgrep to ignore all --ignore-file flags (whether they come before or after --no-ignore-files). This flag can be overridden with --ignore-files. Fixes #1466
Diffstat (limited to 'crates')
-rw-r--r--crates/core/app.rs28
-rw-r--r--crates/core/args.rs16
2 files changed, 40 insertions, 4 deletions
diff --git a/crates/core/app.rs b/crates/core/app.rs
index 410cb0c1..1c1db3f1 100644
--- a/crates/core/app.rs
+++ b/crates/core/app.rs
@@ -614,6 +614,7 @@ pub fn all_args_and_flags() -> Vec<RGArg> {
flag_no_ignore(&mut args);
flag_no_ignore_dot(&mut args);
flag_no_ignore_exclude(&mut args);
+ flag_no_ignore_files(&mut args);
flag_no_ignore_global(&mut args);
flag_no_ignore_messages(&mut args);
flag_no_ignore_parent(&mut args);
@@ -1955,7 +1956,11 @@ fn flag_no_ignore(args: &mut Vec<RGArg>) {
const LONG: &str = long!(
"\
Don't respect ignore files (.gitignore, .ignore, etc.). This implies
---no-ignore-parent, --no-ignore-dot and --no-ignore-vcs.
+--no-ignore-dot, --no-ignore-exclude, --no-ignore-global, no-ignore-parent and
+--no-ignore-vcs.
+
+This does *not* imply --no-ignore-files, since --ignore-file is specified
+explicitly as a command line argument.
This flag can be disabled with the --ignore flag.
"
@@ -2011,6 +2016,27 @@ This flag can be disabled with the --ignore-exclude flag.
args.push(arg);
}
+fn flag_no_ignore_files(args: &mut Vec<RGArg>) {
+ const SHORT: &str = "Don't respect --ignore-file arguments.";
+ const LONG: &str = long!(
+ "\
+When set, any --ignore-file flags, even ones that come after this flag, are
+ignored.
+
+This flag can be disabled with the --ignore-files flag.
+"
+ );
+ let arg = RGArg::switch("no-ignore-files")
+ .help(SHORT)
+ .long_help(LONG)
+ .overrides("ignore-files");
+ args.push(arg);
+
+ let arg =
+ RGArg::switch("ignore-files").hidden().overrides("no-ignore-files");
+ args.push(arg);
+}
+
fn flag_no_ignore_global(args: &mut Vec<RGArg>) {
const SHORT: &str = "Don't respect global ignore files.";
const LONG: &str = long!(
diff --git a/crates/core/args.rs b/crates/core/args.rs
index a31d28a4..9baf079b 100644
--- a/crates/core/args.rs
+++ b/crates/core/args.rs
@@ -862,9 +862,11 @@ impl ArgMatches {
for path in &paths[1..] {
builder.add(path);
}
- for path in self.ignore_paths() {
- if let Some(err) = builder.add_ignore(path) {
- ignore_message!("{}", err);
+ if !self.no_ignore_files() {
+ for path in self.ignore_paths() {
+ if let Some(err) = builder.add_ignore(path) {
+ ignore_message!("{}", err);
+ }
}
}
builder
@@ -1228,6 +1230,14 @@ impl ArgMatches {
self.is_present("no-ignore-exclude") || self.no_ignore()
}
+ /// Returns true if explicitly given ignore files should be ignored.
+ fn no_ignore_files(&self) -> bool {
+ // We don't look at no-ignore here because --no-ignore is explicitly
+ // documented to not override --ignore-file. We could change this, but
+ // it would be a fairly severe breaking change.
+ self.is_present("no-ignore-files")
+ }
+
/// Returns true if global ignore files should be ignored.
fn no_ignore_global(&self) -> bool {
self.is_present("no-ignore-global") || self.no_ignore()