summaryrefslogtreecommitdiff
path: root/user/the_silver_searcher/pattern-fix.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2024-05-30 20:20:51 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2024-06-11 14:04:15 -0500
commitaec710615370bc7aa7d38649077e1def579f1945 (patch)
tree4ba3ff60df85c647f8b5c0f463003d345512b341 /user/the_silver_searcher/pattern-fix.patch
parentea7f46fac19be357e63955cc7c221981dad2d1eb (diff)
downloadpackages-aec710615370bc7aa7d38649077e1def579f1945.tar.gz
packages-aec710615370bc7aa7d38649077e1def579f1945.tar.bz2
packages-aec710615370bc7aa7d38649077e1def579f1945.tar.xz
packages-aec710615370bc7aa7d38649077e1def579f1945.zip
user/the_silver_searcher: Patches
* Fix when reading symlinks to pipes. * Fix build with newer GCC.
Diffstat (limited to 'user/the_silver_searcher/pattern-fix.patch')
-rw-r--r--user/the_silver_searcher/pattern-fix.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/user/the_silver_searcher/pattern-fix.patch b/user/the_silver_searcher/pattern-fix.patch
new file mode 100644
index 000000000..6489e2c7c
--- /dev/null
+++ b/user/the_silver_searcher/pattern-fix.patch
@@ -0,0 +1,78 @@
+From 755c6e5c06fc38903fa0d66be68a9c8ffa525c1b Mon Sep 17 00:00:00 2001
+From: Evan Moses <evan@emoses.org>
+Date: Thu, 9 Jan 2020 17:34:44 -0800
+Subject: [PATCH] Fix ignore patterns in subdirectories with leading slashes
+
+Currenetly if you have an ignore file in a subdirectory "sub" with a pattern
+like
+ /ignorethis
+The directory sub/ignorethis will be ignored if you run ag from
+within sub, but it won't be ignored if you run it from sub's parent.
+that is
+
+ $ ag needle
+
+will search files in sub/ignorethis, but
+
+ $ cd sub
+ $ ag needle
+
+Will not. This is a bug
+---
+ src/ignore.c | 8 ++++++--
+ tests/ignore_slash_in_subdir.t | 19 +++++++++++++++++++
+ 2 files changed, 25 insertions(+), 2 deletions(-)
+ create mode 100644 tests/ignore_slash_in_subdir.t
+
+diff --git a/src/ignore.c b/src/ignore.c
+index fa4188919..1d1c07b13 100644
+--- a/src/ignore.c
++++ b/src/ignore.c
+@@ -206,6 +206,7 @@ static int ackmate_dir_match(const char *dir_name) {
+ /* This is the hottest code in Ag. 10-15% of all execution time is spent here */
+ static int path_ignore_search(const ignores *ig, const char *path, const char *filename) {
+ char *temp;
++ int temp_start_pos;
+ size_t i;
+ int match_pos;
+
+@@ -216,9 +217,12 @@ static int path_ignore_search(const ignores *ig, const char *path, const char *f
+ }
+
+ ag_asprintf(&temp, "%s/%s", path[0] == '.' ? path + 1 : path, filename);
++ //ig->abs_path has its leading slash stripped, so we have to strip the leading slash
++ //of temp as well
++ temp_start_pos = (temp[0] == '/') ? 1 : 0;
+
+- if (strncmp(temp, ig->abs_path, ig->abs_path_len) == 0) {
+- char *slash_filename = temp + ig->abs_path_len;
++ if (strncmp(temp+temp_start_pos, ig->abs_path, ig->abs_path_len) == 0) {
++ char *slash_filename = temp + temp_start_pos + ig->abs_path_len;
+ if (slash_filename[0] == '/') {
+ slash_filename++;
+ }
+diff --git a/tests/ignore_slash_in_subdir.t b/tests/ignore_slash_in_subdir.t
+new file mode 100644
+index 000000000..167d6ffb4
+--- /dev/null
++++ b/tests/ignore_slash_in_subdir.t
+@@ -0,0 +1,19 @@
++Setup:
++
++ $ . $TESTDIR/setup.sh
++ $ mkdir -p subdir/ignoredir
++ $ mkdir ignoredir
++ $ printf 'match1\n' > subdir/ignoredir/file1.txt
++ $ printf 'match1\n' > ignoredir/file1.txt
++ $ printf '/ignoredir\n' > subdir/.ignore
++
++Ignore file in subdir/ignoredir, but not in ignoredir:
++
++ $ ag match
++ ignoredir/file1.txt:1:match1
++
++From subdir, ignore file in subdir/ignoredir:
++
++ $ cd subdir
++ $ ag match
++ [1]