mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-08-04 06:02:00 -07:00
Compare commits
14 Commits
globset-0.
...
0.2.3
Author | SHA1 | Date | |
---|---|---|---|
|
d8712daf27 | ||
|
7cbbef019f | ||
|
4d29d886e5 | ||
|
247a9398f4 | ||
|
4c3025ab1c | ||
|
4981991a6e | ||
|
51440f59cd | ||
|
7b8a8d77d0 | ||
|
4737326ed3 | ||
|
a3537aa32a | ||
|
d3e118a786 | ||
|
4e52059ad6 | ||
|
60c016c243 | ||
|
4665128f25 |
54
CHANGELOG.md
54
CHANGELOG.md
@@ -1,3 +1,57 @@
|
|||||||
|
0.2.3
|
||||||
|
=====
|
||||||
|
Bug fixes:
|
||||||
|
|
||||||
|
* [BUG #164](https://github.com/BurntSushi/ripgrep/issues/164):
|
||||||
|
Fixes a segfault on macos builds.
|
||||||
|
* [BUG #167](https://github.com/BurntSushi/ripgrep/issues/167):
|
||||||
|
Clarify documentation for --threads.
|
||||||
|
|
||||||
|
|
||||||
|
0.2.2
|
||||||
|
=====
|
||||||
|
Packaging updates:
|
||||||
|
|
||||||
|
* `ripgrep` is now in homebrew-core. `brew install ripgrep` will do the trick
|
||||||
|
on a Mac.
|
||||||
|
* `ripgrep` is now in the Archlinux community repository.
|
||||||
|
`pacman -S ripgrep` will do the trick on Archlinux.
|
||||||
|
* Support has been discontinued for i686-darwin.
|
||||||
|
* Glob matching has been moved out into its own crate:
|
||||||
|
[`globset`](https://crates.io/crates/globset).
|
||||||
|
|
||||||
|
Feature enhancements:
|
||||||
|
|
||||||
|
* Added or improved file type filtering for CMake, config, Jinja, Markdown,
|
||||||
|
Spark.
|
||||||
|
* [FEATURE #109](https://github.com/BurntSushi/ripgrep/issues/109):
|
||||||
|
Add a --max-depth flag for directory traversal.
|
||||||
|
* [FEATURE #124](https://github.com/BurntSushi/ripgrep/issues/124):
|
||||||
|
Add -s/--case-sensitive flag. Overrides --smart-case.
|
||||||
|
* [FEATURE #139](https://github.com/BurntSushi/ripgrep/pull/139):
|
||||||
|
The `ripgrep` repo is now a Homebrew tap. This is useful for installing
|
||||||
|
SIMD accelerated binaries, which aren't available in homebrew-core.
|
||||||
|
|
||||||
|
Bug fixes:
|
||||||
|
|
||||||
|
* [BUG #87](https://github.com/BurntSushi/ripgrep/issues/87),
|
||||||
|
[BUG #127](https://github.com/BurntSushi/ripgrep/issues/127),
|
||||||
|
[BUG #131](https://github.com/BurntSushi/ripgrep/issues/131):
|
||||||
|
Various issues related to glob matching.
|
||||||
|
* [BUG #116](https://github.com/BurntSushi/ripgrep/issues/116):
|
||||||
|
--quiet should stop search after first match.
|
||||||
|
* [BUG #121](https://github.com/BurntSushi/ripgrep/pull/121):
|
||||||
|
--color always should show colors, even when --vimgrep is used.
|
||||||
|
* [BUG #122](https://github.com/BurntSushi/ripgrep/pull/122):
|
||||||
|
Colorize file path at beginning of line.
|
||||||
|
* [BUG #134](https://github.com/BurntSushi/ripgrep/issues/134):
|
||||||
|
Processing a large ignore file (thousands of globs) was very slow.
|
||||||
|
* [BUG #137](https://github.com/BurntSushi/ripgrep/issues/137):
|
||||||
|
Always follow symlinks when given as an explicit argument.
|
||||||
|
* [BUG #147](https://github.com/BurntSushi/ripgrep/issues/147):
|
||||||
|
Clarify documentation for --replace.
|
||||||
|
|
||||||
|
|
||||||
0.2.1
|
0.2.1
|
||||||
=====
|
=====
|
||||||
Feature enhancements:
|
Feature enhancements:
|
||||||
|
11
Cargo.lock
generated
11
Cargo.lock
generated
@@ -1,6 +1,6 @@
|
|||||||
[root]
|
[root]
|
||||||
name = "ripgrep"
|
name = "ripgrep"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)",
|
"docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@@ -17,6 +17,7 @@ dependencies = [
|
|||||||
"regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@@ -92,7 +93,7 @@ dependencies = [
|
|||||||
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"memmap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memmap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex-syntax 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -161,7 +162,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex-syntax 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"simd 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"simd 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@@ -169,7 +170,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.3.5"
|
version = "0.3.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -253,7 +254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum num_cpus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8890e6084723d57d0df8d2720b0d60c6ee67d6c93e7169630e4371e88765dcad"
|
"checksum num_cpus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8890e6084723d57d0df8d2720b0d60c6ee67d6c93e7169630e4371e88765dcad"
|
||||||
"checksum rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2791d88c6defac799c3f20d74f094ca33b9332612d9aef9078519c82e4fe04a5"
|
"checksum rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2791d88c6defac799c3f20d74f094ca33b9332612d9aef9078519c82e4fe04a5"
|
||||||
"checksum regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)" = "64b03446c466d35b42f2a8b203c8e03ed8b91c0f17b56e1f84f7210a257aa665"
|
"checksum regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)" = "64b03446c466d35b42f2a8b203c8e03ed8b91c0f17b56e1f84f7210a257aa665"
|
||||||
"checksum regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279401017ae31cf4e15344aa3f085d0e2e5c1e70067289ef906906fdbe92c8fd"
|
"checksum regex-syntax 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "48f0573bcee95a48da786f8823465b5f2a1fae288a55407aca991e5b3e0eae11"
|
||||||
"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
|
"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
|
||||||
"checksum simd 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "63b5847c2d766ca7ce7227672850955802fabd779ba616aeabead4c2c3877023"
|
"checksum simd 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "63b5847c2d766ca7ce7227672850955802fabd779ba616aeabead4c2c3877023"
|
||||||
"checksum strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50c069df92e4b01425a8bf3576d5d417943a6a7272fbabaf5bd80b1aaa76442e"
|
"checksum strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50c069df92e4b01425a8bf3576d5d417943a6a7272fbabaf5bd80b1aaa76442e"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ripgrep"
|
name = "ripgrep"
|
||||||
version = "0.2.1" #:version
|
version = "0.2.3" #:version
|
||||||
authors = ["Andrew Gallant <jamslam@gmail.com>"]
|
authors = ["Andrew Gallant <jamslam@gmail.com>"]
|
||||||
description = """
|
description = """
|
||||||
Line oriented search tool using Rust's regex library. Combines the raw
|
Line oriented search tool using Rust's regex library. Combines the raw
|
||||||
@@ -12,6 +12,7 @@ repository = "https://github.com/BurntSushi/ripgrep"
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["regex", "grep", "egrep", "search", "pattern"]
|
keywords = ["regex", "grep", "egrep", "search", "pattern"]
|
||||||
license = "Unlicense/MIT"
|
license = "Unlicense/MIT"
|
||||||
|
exclude = ["HomebrewFormula"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
bench = false
|
bench = false
|
||||||
@@ -37,6 +38,7 @@ num_cpus = "1"
|
|||||||
regex = "0.1.77"
|
regex = "0.1.77"
|
||||||
rustc-serialize = "0.3"
|
rustc-serialize = "0.3"
|
||||||
term = "0.4"
|
term = "0.4"
|
||||||
|
thread_local = "0.2.7"
|
||||||
walkdir = "0.1"
|
walkdir = "0.1"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
|
23
doc/rg.1
23
doc/rg.1
@@ -91,12 +91,6 @@ If a match is found in a file, stop searching that file.
|
|||||||
.RS
|
.RS
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
.B \-r, \-\-replace \f[I]ARG\f[]
|
|
||||||
Replace every match with the string given.
|
|
||||||
Capture group indices (e.g., $5) and names (e.g., $foo) are supported.
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-t, \-\-type \f[I]TYPE\f[] ...
|
.B \-t, \-\-type \f[I]TYPE\f[] ...
|
||||||
Only search files matching TYPE.
|
Only search files matching TYPE.
|
||||||
Multiple type flags may be provided.
|
Multiple type flags may be provided.
|
||||||
@@ -259,6 +253,15 @@ Alias for \-\-color=always \-\-heading \-n.
|
|||||||
.RS
|
.RS
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
|
.B \-r, \-\-replace \f[I]ARG\f[]
|
||||||
|
Replace every match with the string given when printing search results.
|
||||||
|
Neither this flag nor any other flag will modify your files.
|
||||||
|
.RS
|
||||||
|
.PP
|
||||||
|
Capture group indices (e.g., $5) and names (e.g., $foo) are supported in
|
||||||
|
the replacement string.
|
||||||
|
.RE
|
||||||
|
.TP
|
||||||
.B \-s, \-\-case\-sensitive
|
.B \-s, \-\-case\-sensitive
|
||||||
Search case sensitively.
|
Search case sensitively.
|
||||||
This overrides \-\-ignore\-case and \-\-smart\-case.
|
This overrides \-\-ignore\-case and \-\-smart\-case.
|
||||||
@@ -274,7 +277,7 @@ This is overridden by either \-\-case\-sensitive or \-\-ignore\-case.
|
|||||||
.TP
|
.TP
|
||||||
.B \-j, \-\-threads \f[I]ARG\f[]
|
.B \-j, \-\-threads \f[I]ARG\f[]
|
||||||
The number of threads to use.
|
The number of threads to use.
|
||||||
Defaults to the number of logical CPUs (capped at 6).
|
0 means use the number of logical CPUs (capped at 6).
|
||||||
[default: 0]
|
[default: 0]
|
||||||
.RS
|
.RS
|
||||||
.RE
|
.RE
|
||||||
@@ -305,10 +308,12 @@ Multiple \-\-type\-add flags can be provided.
|
|||||||
Unless \-\-type\-clear is used, globs are added to any existing globs
|
Unless \-\-type\-clear is used, globs are added to any existing globs
|
||||||
inside of ripgrep.
|
inside of ripgrep.
|
||||||
Note that this must be passed to every invocation of rg.
|
Note that this must be passed to every invocation of rg.
|
||||||
|
Type settings are NOT persisted.
|
||||||
.RS
|
.RS
|
||||||
.RE
|
|
||||||
.PP
|
.PP
|
||||||
Example: \f[C]\-\-type\-add\ html:*.html\f[]
|
Example:
|
||||||
|
\f[C]rg\ \-\-type\-add\ \[aq]foo:*.foo\[aq]\ \-tfoo\ PATTERN\f[]
|
||||||
|
.RE
|
||||||
.TP
|
.TP
|
||||||
.B \-\-type\-clear \f[I]TYPE\f[] ...
|
.B \-\-type\-clear \f[I]TYPE\f[] ...
|
||||||
Clear the file type globs previously defined for TYPE.
|
Clear the file type globs previously defined for TYPE.
|
||||||
|
18
doc/rg.1.md
18
doc/rg.1.md
@@ -61,10 +61,6 @@ the raw speed of grep.
|
|||||||
: Do not print anything to stdout. If a match is found in a file, stop
|
: Do not print anything to stdout. If a match is found in a file, stop
|
||||||
searching that file.
|
searching that file.
|
||||||
|
|
||||||
-r, --replace *ARG*
|
|
||||||
: Replace every match with the string given. Capture group indices (e.g., $5)
|
|
||||||
and names (e.g., $foo) are supported.
|
|
||||||
|
|
||||||
-t, --type *TYPE* ...
|
-t, --type *TYPE* ...
|
||||||
: Only search files matching TYPE. Multiple type flags may be provided. Use the
|
: Only search files matching TYPE. Multiple type flags may be provided. Use the
|
||||||
--type-list flag to list all available types.
|
--type-list flag to list all available types.
|
||||||
@@ -168,6 +164,13 @@ the raw speed of grep.
|
|||||||
-p, --pretty
|
-p, --pretty
|
||||||
: Alias for --color=always --heading -n.
|
: Alias for --color=always --heading -n.
|
||||||
|
|
||||||
|
-r, --replace *ARG*
|
||||||
|
: Replace every match with the string given when printing search results.
|
||||||
|
Neither this flag nor any other flag will modify your files.
|
||||||
|
|
||||||
|
Capture group indices (e.g., $5) and names (e.g., $foo) are supported
|
||||||
|
in the replacement string.
|
||||||
|
|
||||||
-s, --case-sensitive
|
-s, --case-sensitive
|
||||||
: Search case sensitively. This overrides --ignore-case and --smart-case.
|
: Search case sensitively. This overrides --ignore-case and --smart-case.
|
||||||
|
|
||||||
@@ -177,7 +180,7 @@ the raw speed of grep.
|
|||||||
--case-sensitive or --ignore-case.
|
--case-sensitive or --ignore-case.
|
||||||
|
|
||||||
-j, --threads *ARG*
|
-j, --threads *ARG*
|
||||||
: The number of threads to use. Defaults to the number of logical CPUs
|
: The number of threads to use. 0 means use the number of logical CPUs
|
||||||
(capped at 6). [default: 0]
|
(capped at 6). [default: 0]
|
||||||
|
|
||||||
--version
|
--version
|
||||||
@@ -197,9 +200,10 @@ the raw speed of grep.
|
|||||||
: Add a new glob for a particular file type. Only one glob can be added
|
: Add a new glob for a particular file type. Only one glob can be added
|
||||||
at a time. Multiple --type-add flags can be provided. Unless --type-clear
|
at a time. Multiple --type-add flags can be provided. Unless --type-clear
|
||||||
is used, globs are added to any existing globs inside of ripgrep. Note that
|
is used, globs are added to any existing globs inside of ripgrep. Note that
|
||||||
this must be passed to every invocation of rg.
|
this must be passed to every invocation of rg. Type settings are NOT
|
||||||
|
persisted.
|
||||||
|
|
||||||
Example: `--type-add html:*.html`
|
Example: `rg --type-add 'foo:*.foo' -tfoo PATTERN`
|
||||||
|
|
||||||
--type-clear *TYPE* ...
|
--type-clear *TYPE* ...
|
||||||
: Clear the file type globs previously defined for TYPE. This only clears
|
: Clear the file type globs previously defined for TYPE. This only clears
|
||||||
|
@@ -184,8 +184,9 @@ impl GrepBuilder {
|
|||||||
.unicode(true)
|
.unicode(true)
|
||||||
.case_insensitive(self.opts.case_insensitive)
|
.case_insensitive(self.opts.case_insensitive)
|
||||||
.parse(&self.pattern));
|
.parse(&self.pattern));
|
||||||
|
let expr = try!(nonl::remove(expr, self.opts.line_terminator));
|
||||||
debug!("regex ast:\n{:#?}", expr);
|
debug!("regex ast:\n{:#?}", expr);
|
||||||
Ok(try!(nonl::remove(expr, self.opts.line_terminator)))
|
Ok(expr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
25
src/args.rs
25
src/args.rs
@@ -68,9 +68,6 @@ Common options:
|
|||||||
-N, --no-line-number Suppress line numbers.
|
-N, --no-line-number Suppress line numbers.
|
||||||
-q, --quiet Do not print anything to stdout. If a match is
|
-q, --quiet Do not print anything to stdout. If a match is
|
||||||
found in a file, stop searching that file.
|
found in a file, stop searching that file.
|
||||||
-r, --replace ARG Replace every match with the string given.
|
|
||||||
Capture group indices (e.g., $5) and names
|
|
||||||
(e.g., $foo) are supported.
|
|
||||||
-t, --type TYPE ... Only search files matching TYPE. Multiple type
|
-t, --type TYPE ... Only search files matching TYPE. Multiple type
|
||||||
flags may be provided. Use the --type-list flag
|
flags may be provided. Use the --type-list flag
|
||||||
to list all available types.
|
to list all available types.
|
||||||
@@ -169,6 +166,13 @@ Less common options:
|
|||||||
-p, --pretty
|
-p, --pretty
|
||||||
Alias for --color=always --heading -n.
|
Alias for --color=always --heading -n.
|
||||||
|
|
||||||
|
-r, --replace ARG
|
||||||
|
Replace every match with the string given when printing search results.
|
||||||
|
Neither this flag nor any other flag will modify your files.
|
||||||
|
|
||||||
|
Capture group indices (e.g., $5) and names (e.g., $foo) are supported
|
||||||
|
in the replacement string.
|
||||||
|
|
||||||
-s, --case-sensitive
|
-s, --case-sensitive
|
||||||
Search case sensitively. This overrides --ignore-case and --smart-case.
|
Search case sensitively. This overrides --ignore-case and --smart-case.
|
||||||
|
|
||||||
@@ -178,7 +182,7 @@ Less common options:
|
|||||||
either --case-sensitive or --ignore-case.
|
either --case-sensitive or --ignore-case.
|
||||||
|
|
||||||
-j, --threads ARG
|
-j, --threads ARG
|
||||||
The number of threads to use. Defaults to the number of logical CPUs
|
The number of threads to use. 0 means use the number of logical CPUs
|
||||||
(capped at 6). [default: 0]
|
(capped at 6). [default: 0]
|
||||||
|
|
||||||
--version
|
--version
|
||||||
@@ -194,12 +198,13 @@ File type management options:
|
|||||||
Show all supported file types and their associated globs.
|
Show all supported file types and their associated globs.
|
||||||
|
|
||||||
--type-add ARG ...
|
--type-add ARG ...
|
||||||
Add a new glob for a particular file type. Only one glob can be added
|
Add a new glob for a particular file type. Only one glob can be
|
||||||
at a time. Multiple type-add flags can be provided. Unless type-clear
|
added at a time. Multiple --type-add flags can be provided.
|
||||||
is used, globs are added to any existing globs inside of ripgrep. Note
|
Unless --type-clear is used, globs are added to any existing globs
|
||||||
that this must be passed to every invocation of rg.
|
inside of ripgrep. Note that this must be passed to every invocation of
|
||||||
|
rg. Type settings are NOT persisted.
|
||||||
|
|
||||||
Example: `--type-add html:*.html`
|
Example: `rg --type-add 'foo:*.foo' -tfoo PATTERN`
|
||||||
|
|
||||||
--type-clear TYPE ...
|
--type-clear TYPE ...
|
||||||
Clear the file type globs previously defined for TYPE. This only clears
|
Clear the file type globs previously defined for TYPE. This only clears
|
||||||
@@ -329,7 +334,7 @@ impl RawArgs {
|
|||||||
} else if cfg!(windows) {
|
} else if cfg!(windows) {
|
||||||
// On Windows, memory maps appear faster than read calls. Neat.
|
// On Windows, memory maps appear faster than read calls. Neat.
|
||||||
true
|
true
|
||||||
} else if cfg!(darwin) {
|
} else if cfg!(target_os = "macos") {
|
||||||
// On Mac, memory maps appear to suck. Neat.
|
// On Mac, memory maps appear to suck. Neat.
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
|
@@ -27,9 +27,11 @@ use std::fmt;
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{self, BufRead};
|
use std::io::{self, BufRead};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use globset::{self, Candidate, GlobBuilder, GlobSet, GlobSetBuilder};
|
use globset::{self, Candidate, GlobBuilder, GlobSet, GlobSetBuilder};
|
||||||
use regex;
|
use regex;
|
||||||
|
use thread_local::ThreadLocal;
|
||||||
|
|
||||||
use pathutil::{is_file_name, strip_prefix};
|
use pathutil::{is_file_name, strip_prefix};
|
||||||
|
|
||||||
@@ -87,6 +89,7 @@ pub struct Gitignore {
|
|||||||
patterns: Vec<Pattern>,
|
patterns: Vec<Pattern>,
|
||||||
num_ignores: u64,
|
num_ignores: u64,
|
||||||
num_whitelist: u64,
|
num_whitelist: u64,
|
||||||
|
matches: Arc<ThreadLocal<RefCell<Vec<usize>>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Gitignore {
|
impl Gitignore {
|
||||||
@@ -133,13 +136,8 @@ impl Gitignore {
|
|||||||
|
|
||||||
/// Like matched, but takes a path that has already been stripped.
|
/// Like matched, but takes a path that has already been stripped.
|
||||||
pub fn matched_stripped(&self, path: &Path, is_dir: bool) -> Match {
|
pub fn matched_stripped(&self, path: &Path, is_dir: bool) -> Match {
|
||||||
thread_local! {
|
let _matches = self.matches.get_default();
|
||||||
static MATCHES: RefCell<Vec<usize>> = {
|
let mut matches = _matches.borrow_mut();
|
||||||
RefCell::new(vec![])
|
|
||||||
}
|
|
||||||
};
|
|
||||||
MATCHES.with(|matches| {
|
|
||||||
let mut matches = matches.borrow_mut();
|
|
||||||
let candidate = Candidate::new(path);
|
let candidate = Candidate::new(path);
|
||||||
self.set.matches_candidate_into(&candidate, &mut *matches);
|
self.set.matches_candidate_into(&candidate, &mut *matches);
|
||||||
for &i in matches.iter().rev() {
|
for &i in matches.iter().rev() {
|
||||||
@@ -153,7 +151,6 @@ impl Gitignore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Match::None
|
Match::None
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the total number of ignore patterns.
|
/// Returns the total number of ignore patterns.
|
||||||
@@ -256,6 +253,7 @@ impl GitignoreBuilder {
|
|||||||
patterns: self.patterns,
|
patterns: self.patterns,
|
||||||
num_ignores: nignores as u64,
|
num_ignores: nignores as u64,
|
||||||
num_whitelist: nwhitelist as u64,
|
num_whitelist: nwhitelist as u64,
|
||||||
|
matches: Arc::new(ThreadLocal::default()),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,6 +16,7 @@ extern crate num_cpus;
|
|||||||
extern crate regex;
|
extern crate regex;
|
||||||
extern crate rustc_serialize;
|
extern crate rustc_serialize;
|
||||||
extern crate term;
|
extern crate term;
|
||||||
|
extern crate thread_local;
|
||||||
extern crate walkdir;
|
extern crate walkdir;
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
extern crate winapi;
|
extern crate winapi;
|
||||||
|
@@ -776,6 +776,9 @@ clean!(regression_127, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// See: https://github.com/BurntSushi/ripgrep/issues/131
|
// See: https://github.com/BurntSushi/ripgrep/issues/131
|
||||||
|
//
|
||||||
|
// TODO(burntsushi): Darwin doesn't like this test for some reason.
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
clean!(regression_131, "test", ".", |wd: WorkDir, mut cmd: Command| {
|
clean!(regression_131, "test", ".", |wd: WorkDir, mut cmd: Command| {
|
||||||
wd.create(".gitignore", "TopÑapa");
|
wd.create(".gitignore", "TopÑapa");
|
||||||
wd.create("TopÑapa", "test");
|
wd.create("TopÑapa", "test");
|
||||||
@@ -806,6 +809,34 @@ sym2:be, to a very large extent, the result of luck. Sherlock Holmes
|
|||||||
assert_eq!(lines, path(expected));
|
assert_eq!(lines, path(expected));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// See: https://github.com/BurntSushi/ripgrep/issues/156
|
||||||
|
clean!(
|
||||||
|
regression_156,
|
||||||
|
r#"#(?:parse|include)\s*\(\s*(?:"|')[./A-Za-z_-]+(?:"|')"#,
|
||||||
|
"testcase.txt",
|
||||||
|
|wd: WorkDir, mut cmd: Command| {
|
||||||
|
const TESTCASE: &'static str = r#"#parse('widgets/foo_bar_macros.vm')
|
||||||
|
#parse ( 'widgets/mobile/foo_bar_macros.vm' )
|
||||||
|
#parse ("widgets/foobarhiddenformfields.vm")
|
||||||
|
#parse ( "widgets/foo_bar_legal.vm" )
|
||||||
|
#include( 'widgets/foo_bar_tips.vm' )
|
||||||
|
#include('widgets/mobile/foo_bar_macros.vm')
|
||||||
|
#include ("widgets/mobile/foo_bar_resetpw.vm")
|
||||||
|
#parse('widgets/foo-bar-macros.vm')
|
||||||
|
#parse ( 'widgets/mobile/foo-bar-macros.vm' )
|
||||||
|
#parse ("widgets/foo-bar-hiddenformfields.vm")
|
||||||
|
#parse ( "widgets/foo-bar-legal.vm" )
|
||||||
|
#include( 'widgets/foo-bar-tips.vm' )
|
||||||
|
#include('widgets/mobile/foo-bar-macros.vm')
|
||||||
|
#include ("widgets/mobile/foo-bar-resetpw.vm")
|
||||||
|
"#;
|
||||||
|
wd.create("testcase.txt", TESTCASE);
|
||||||
|
cmd.arg("-N");
|
||||||
|
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
assert_eq!(lines, TESTCASE);
|
||||||
|
});
|
||||||
|
|
||||||
// See: https://github.com/BurntSushi/ripgrep/issues/20
|
// See: https://github.com/BurntSushi/ripgrep/issues/20
|
||||||
sherlock!(feature_20_no_filename, "Sherlock", ".",
|
sherlock!(feature_20_no_filename, "Sherlock", ".",
|
||||||
|wd: WorkDir, mut cmd: Command| {
|
|wd: WorkDir, mut cmd: Command| {
|
||||||
|
Reference in New Issue
Block a user