forked from pool/quilt
3a7d64b475
* Fix bash completion of patch names * Fix refresh error message * Fix quilt diff -z on file names including spaces * Fix quilt files output when there are no files * Fix patches heuristic for unapplied patches with timestamps * Re-enable testing of patch-wrapper * Fix performance regression in quilt patches * Performance boost for series, applies and unapplied commands OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm/quilt?expand=0&rev=78
60 lines
1.6 KiB
Diff
60 lines
1.6 KiB
Diff
From: Jean Delvare <jdelvare@suse.de>
|
|
Date: Sat, 15 Feb 2014 18:43:41 +0100
|
|
Subject: patches: Optimize processing of unapplied patches
|
|
Patch-mainline: yes
|
|
Git-commit: 1b95644e3a00f07a6711c881d2dcdac14206a57e
|
|
References: bnc#872719
|
|
|
|
* Don't check for $strip = ab twice, once is enough.
|
|
* Quote the file names to be suitable in regular expressions only
|
|
once, instead of doing it again for every patch. This fixes a
|
|
performance regression introduced in 8ebb056d ("patches: Add
|
|
support for multiple files"), sorry about that.
|
|
|
|
These two simple changes bring a huge performance boost on unapplied
|
|
patches, of about 50% in the single file case and growing as you add
|
|
files.
|
|
|
|
diff --git a/quilt/patches.in b/quilt/patches.in
|
|
index 3f3caed..6ec5e01 100644
|
|
--- a/quilt/patches.in
|
|
+++ b/quilt/patches.in
|
|
@@ -70,7 +70,6 @@ scan_applied()
|
|
touched_by_patch()
|
|
{
|
|
local strip=$1 patch=$2
|
|
- [ $strip = ab ] && strip=1
|
|
cat_file $(patch_file_name $patch) \
|
|
| awk '
|
|
/^(\+\+\+|---)[ \t]/ {
|
|
@@ -89,7 +88,14 @@ scan_unapplied()
|
|
{
|
|
local color=$1 prefix=$2 strip
|
|
shift 2
|
|
- local patch file file_bre match
|
|
+ local patch file match
|
|
+ local -a files_bre
|
|
+
|
|
+ # Quote each file name only once
|
|
+ for file in "${opt_files[@]}"
|
|
+ do
|
|
+ files_bre[${#files_bre[@]}]=$(quote_bre "$file")
|
|
+ done
|
|
|
|
for patch in "$@"
|
|
do
|
|
@@ -97,11 +103,10 @@ scan_unapplied()
|
|
[ "$strip" = ab ] && strip=1
|
|
|
|
match=
|
|
- for file in "${opt_files[@]}"
|
|
+ for file in "${files_bre[@]}"
|
|
do
|
|
- file_bre="$(quote_bre "$file")"
|
|
if touched_by_patch $strip $patch \
|
|
- | grep -q "^$file_bre\$"
|
|
+ | grep -q "^$file\$"
|
|
then
|
|
match=1
|
|
break
|