aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/quilt-grep-compat.patch
blob: 25fef506d14447aa44f62d75857f0b53f380c608 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
From upstream
https://git.savannah.nongnu.org/cgit/quilt.git/patch/?id=f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f

From f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f Mon Sep 17 00:00:00 2001
From: Jean Delvare <jdelvare@suse.de>
Date: Fri, 9 Sep 2022 10:10:37 +0200
Subject: Avoid warnings with grep 3.8

GNU grep version 3.8 became more strict about needless quoting in
patterns. We have one occurrence of that in quilt, where "/"
characters are being quoted by default. There are cases where they
indeed need to be quoted (typically when used in a sed s/// command)
but most of the time they do not, and this results in the following
warning:

grep: warning: stray \ before /

So rename quote_bre() to quote_sed_re(), and introduce
quote_grep_re() which does not quote "/".

Signed-off-by: Jean Delvare <jdelvare@suse.de>
---
 quilt/diff.in             |  2 +-
 quilt/patches.in          |  2 +-
 quilt/scripts/patchfns.in | 20 +++++++++++++-------
 quilt/upgrade.in          |  4 ++--
 4 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/quilt/diff.in b/quilt/diff.in
index e90dc33..07788ff 100644
--- a/quilt/diff.in
+++ b/quilt/diff.in
@@ -255,7 +255,7 @@ then
 	# Add all files in the snapshot into the file list (they may all
 	# have changed).
 	files=( $(find $QUILT_PC/$snap_subdir -type f \
-		  | sed -e "s/^$(quote_bre $QUILT_PC/$snap_subdir/)//" \
+		  | sed -e "s/^$(quote_sed_re $QUILT_PC/$snap_subdir/)//" \
 		  | sort) )
 	printf "%s\n" "${files[@]}" >&4
 	unset files
diff --git a/quilt/patches.in b/quilt/patches.in
index bb17a46..eac45a9 100644
--- a/quilt/patches.in
+++ b/quilt/patches.in
@@ -60,7 +60,7 @@ scan_unapplied()
 	# Quote each file name only once
 	for file in "${opt_files[@]}"
 	do
-		files_bre[${#files_bre[@]}]=$(quote_bre "$file")
+		files_bre[${#files_bre[@]}]=$(quote_grep_re "$file")
 	done
 
 	# "Or" all files in a single pattern
diff --git a/quilt/scripts/patchfns.in b/quilt/scripts/patchfns.in
index c2d5f9d..1bd7233 100644
--- a/quilt/scripts/patchfns.in
+++ b/quilt/scripts/patchfns.in
@@ -78,8 +78,14 @@ array_join()
 	done
 }
 
-# Quote a string for use in a basic regular expression.
-quote_bre()
+# Quote a string for use in a regular expression for a grep pattern.
+quote_grep_re()
+{
+	echo "$1" | sed -e 's:\([][^$.*\\]\):\\\1:g'
+}
+
+# Quote a string for use in a regular expression for a sed s/// command.
+quote_sed_re()
 {
 	echo "$1" | sed -e 's:\([][^$/.*\\]\):\\\1:g'
 }
@@ -215,7 +221,7 @@ patch_in_series()
 
 	if [ -e "$SERIES" ]
 	then
-		grep -q "^$(quote_bre $patch)\([ \t]\|$\)" "$SERIES"
+		grep -q "^$(quote_grep_re $patch)\([ \t]\|$\)" "$SERIES"
 	else
 		return 1
 	fi
@@ -365,7 +371,7 @@ is_applied()
 {
 	local patch=$1
 	[ -e $DB ] || return 1
-	grep -q "^$(quote_bre $patch)\$" $DB
+	grep -q "^$(quote_grep_re $patch)\$" $DB
 }
 
 applied_patches()
@@ -465,7 +471,7 @@ remove_from_db()
 	local tmpfile
 	if tmpfile=$(gen_tempfile)
 	then
-		grep -v "^$(quote_bre $patch)\$" $DB > $tmpfile
+		grep -v "^$(quote_grep_re $patch)\$" $DB > $tmpfile
 		cat $tmpfile > $DB
 		rm -f $tmpfile
 		[ -s $DB ] || rm -f $DB
@@ -520,7 +526,7 @@ find_patch()
 		fi
 
 		local patch=${1#$SUBDIR_DOWN$QUILT_PATCHES/}
-		local bre=$(quote_bre "$patch")
+		local bre=$(quote_sed_re "$patch")
 		set -- $(sed -e "/^$bre\(\|\.patch\|\.diff\?\)\(\|\.gz\|\.bz2\|\.xz\|\.lzma\|\.lz\)\([ "$'\t'"]\|$\)/!d" \
 			       -e 's/[ '$'\t''].*//' "$SERIES")
 		if [ $# -eq 1 ]
@@ -631,7 +637,7 @@ files_in_patch()
 	then
 		find "$path" -type f \
 			       -a ! -path "$(quote_glob "$path")/.timestamp" |
-		sed -e "s/$(quote_bre "$path")\///"
+		sed -e "s/$(quote_sed_re "$path")\///"
 	fi
 }
 
diff --git a/quilt/upgrade.in b/quilt/upgrade.in
index dbf7d05..866aa33 100644
--- a/quilt/upgrade.in
+++ b/quilt/upgrade.in
@@ -74,7 +74,7 @@ printf $"Converting meta-data to version %s\n" "$DB_VERSION"
 
 for patch in $(applied_patches)
 do
-	proper_name="$(grep "^$(quote_bre $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
+	proper_name="$(grep "^$(quote_grep_re $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
 	proper_name=${proper_name#$QUILT_PATCHES/}
 	proper_name=${proper_name%% *}
 	if [ -z "$proper_name" ]
@@ -84,7 +84,7 @@ do
 	fi
 
 	if [ "$patch" != "$proper_name" -a -d $QUILT_PC/$patch ] \
-	   && grep -q "^$(quote_bre $patch)\$" \
+	   && grep -q "^$(quote_grep_re $patch)\$" \
 		   $QUILT_PC/applied-patches
 	then
 		mv $QUILT_PC/$patch $QUILT_PC/$proper_name \
-- 
cgit v1.1