diff options
-rw-r--r-- | quilt/push.in | 24 | ||||
-rw-r--r-- | test/duplicate-patch-in-series.test | 37 |
2 files changed, 61 insertions, 0 deletions
diff --git a/quilt/push.in b/quilt/push.in index fde9472..e00573d 100644 --- a/quilt/push.in +++ b/quilt/push.in @@ -276,6 +276,24 @@ list_patches() fi } +check_duplicate_patches() +{ + local IFS=$'\n' + local -a duplicates + local patch + + duplicates=($((applied_patches ; printf $'%s\n' "${patches[@]}") \ + | awk '{ if (lines[$0]++ == 1) print }')) + [ ${#duplicates[@]} -ge 1 ] || return 0 + + for patch in "${duplicates[@]}" + do + printf $"Patch %s is already applied; check your series file\n" \ + "$(print_patch "$patch")" + done + return 1 +} + options=`getopt -o fqvam::h --long fuzz:,merge::,leave-rejects,color:: -- "$@"` if [ $? -ne 0 ] @@ -381,6 +399,12 @@ then fi patches=$(list_patches) + +# In theory, these patches can't be already applied. However in the case +# of a generated or manually tweaked series file, this could happen and +# cause havoc, so play it safe and check. +check_duplicate_patches || exit 1 + create_db for patch in $patches do diff --git a/test/duplicate-patch-in-series.test b/test/duplicate-patch-in-series.test new file mode 100644 index 0000000..98591b2 --- /dev/null +++ b/test/duplicate-patch-in-series.test @@ -0,0 +1,37 @@ +# Check that duplicate patches in generated series files won't cause havoc +# See bug #20628 at https://savannah.nongnu.org/bugs/?20628 + +$ mkdir patches +$ echo "old line" > file.txt + +$ cat > patches/first.patch +< --- file.txt +< +++ file.txt +< @@ -1 +1 @@ +< -old line +< +new line + +$ cat > patches/series +< first.patch -p0 +< first.patch -p0 + +$ quilt push +> Applying patch %{P}first.patch +> patching file file.txt +> +> Now at patch %{P}first.patch + +$ quilt push +> Patch %{P}first.patch is already applied; check your series file + +$ quilt pop +> Removing patch %{P}first.patch +> Restoring file.txt +> +> No patches applied + +$ quilt push -qa +> Patch %{P}first.patch is already applied; check your series file + +$ quilt pop -q +> No patch removed |