diff options
Diffstat (limited to 'source/a/patch')
3 files changed, 174 insertions, 4 deletions
diff --git a/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff b/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff new file mode 100644 index 00000000..b882b725 --- /dev/null +++ b/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff @@ -0,0 +1,78 @@ +From 281537bcd92515ae3b9f154acd579ce97260f99b Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher <agruen@linbit.com> +Date: Thu, 13 Sep 2012 14:13:08 +0000 +Subject: In a git-style diff, make sure not to unlink the original by accident + +* src/patch.c (main): Fail if a file is not empty as expected. +(output_files): In a git-style diff, make sure not to unlink the original when +making a backup of an unmodified file. +* tests/create-delete: Fix failed-file-deletion test and add +successful-file-deletion test. +--- +diff --git a/src/patch.c b/src/patch.c +index 1c6fb4b..ce81bbe 100644 +--- a/src/patch.c ++++ b/src/patch.c +@@ -508,6 +508,7 @@ main (int argc, char **argv) + && ! (merge && somefailed)) + { + mismatch = true; ++ somefailed = true; + if (verbosity != SILENT) + say ("File %s is not empty after patch, as expected\n", + quotearg (outname)); +@@ -1865,7 +1866,7 @@ output_files (struct stat const *st) + output_file_now (file_to_output->from, &from_needs_removal, + from_st, file_to_output->to, + file_to_output->mode, file_to_output->backup); +- if (from_needs_removal) ++ if (file_to_output->to && from_needs_removal) + unlink (file_to_output->from); + + if (st && st->st_dev == from_st->st_dev && st->st_ino == from_st->st_ino) +diff --git a/tests/create-delete b/tests/create-delete +index 9a6e1bb..7eed11f 100644 +--- a/tests/create-delete ++++ b/tests/create-delete +@@ -176,12 +176,37 @@ EOF + echo data > target + cat > p.diff <<EOF + diff --git a/target b/target +-index 1..0 ++deleted file mode 100644 ++index 1269488..0000000 + EOF + + check 'patch -p1 -b < p.diff || echo status: $?' <<EOF + patching file target + File target is not empty after patch, as expected ++status: 1 ++EOF ++ ++check 'cat target' <<EOF ++data ++EOF ++ ++# Patch creates a backup file even when the original file remains unchanged: ++check 'cat target.orig' <<EOF ++data ++EOF ++ ++cat > p.diff <<EOF ++diff --git a/target b/target ++deleted file mode 100644 ++index 1269488..0000000 ++--- a/target +++++ /dev/null ++@@ -1 +0,0 @@ ++-data ++EOF ++ ++check 'patch -p1 -b -f < p.diff || echo status: $?' <<EOF ++patching file target + EOF + + ncheck 'test ! -e target' +-- +cgit v0.9.0.2 + diff --git a/source/a/patch/patch.99f2638763845d8173a0c9f9209ac2b4be947165.diff b/source/a/patch/patch.99f2638763845d8173a0c9f9209ac2b4be947165.diff new file mode 100644 index 00000000..14c342a5 --- /dev/null +++ b/source/a/patch/patch.99f2638763845d8173a0c9f9209ac2b4be947165.diff @@ -0,0 +1,88 @@ +From 99f2638763845d8173a0c9f9209ac2b4be947165 Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher <agruen@linbit.com> +Date: Tue, 18 Sep 2012 10:51:17 +0000 +Subject: Fix file truncation when switching from git diff to non-git diff + +* src/patch.c (main): Output queued output files only when switching from a git +diff to a non-git diff. This can modify the input file, so make sure to +stat() it again. +* tests/concat-git-diff: Add test case growing a file with a git diff and then +with a non-git diff; without this fix; the result would be truncated. +--- +diff --git a/src/patch.c b/src/patch.c +index 0bce8fb..0b0fdd4 100644 +--- a/src/patch.c ++++ b/src/patch.c +@@ -196,8 +196,12 @@ main (int argc, char **argv) + + if (have_git_diff != pch_git_diff ()) + { ++ if (have_git_diff) ++ { ++ output_files (NULL); ++ inerrno = -1; ++ } + have_git_diff = ! have_git_diff; +- output_files (NULL); + } + + if (TMPREJNAME_needs_removal) +diff --git a/tests/concat-git-diff b/tests/concat-git-diff +index 927eb5a..c78da53 100644 +--- a/tests/concat-git-diff ++++ b/tests/concat-git-diff +@@ -56,11 +56,7 @@ check 'cat f' <<EOF + three + EOF + +-cat > f <<EOF +-1 +-2 +-3 +-EOF ++seq 3 > f + + cat > concat2.diff <<EOF + diff --git a/f b/f +@@ -95,3 +91,38 @@ a + 3 + b + EOF ++ ++seq 3 > f ++ ++cat > concat3.diff <<EOF ++diff --git a/f b/f ++index 01e79c3..0d0b976 100644 ++--- a/f +++++ b/f ++@@ -1,3 +1,4 @@ ++ 1 ++ 2 ++ 3 +++b ++diff a/f b/f ++--- a/f +++++ b/f ++@@ -1,3 +1,4 @@ +++a ++ 1 ++ 2 ++ 3 ++EOF ++ ++check 'patch -p1 < concat3.diff || echo "Status: $?"' <<EOF ++patching file f ++patching file f ++EOF ++ ++check 'cat f' <<EOF ++a ++1 ++2 ++3 ++b ++EOF +-- +cgit v0.9.0.2 + diff --git a/source/a/patch/patch.SlackBuild b/source/a/patch/patch.SlackBuild index 1175620b..1607b405 100755 --- a/source/a/patch/patch.SlackBuild +++ b/source/a/patch/patch.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2009, 2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2005-2009, 2010, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,8 +20,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=2.6.1 -BUILD=${BUILD:-1} +VERSION=2.7 +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -53,7 +53,11 @@ fi cd $TMP rm -rf patch-${VERSION} tar xvf $CWD/patch-${VERSION}.tar.xz || exit 1 -cd patch-${VERSION} +cd patch-${VERSION} || exit 1 + +zcat $CWD/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/patch.99f2638763845d8173a0c9f9209ac2b4be947165.diff.gz | patch -p1 --verbose || exit 1 + chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ |