diff options
author | Andreas Gruenbacher <agruen@linbit.com> | 2012-09-18 12:51:17 +0200 |
---|---|---|
committer | Andreas Gruenbacher <agruen@linbit.com> | 2012-09-18 12:53:38 +0200 |
commit | 99f2638763845d8173a0c9f9209ac2b4be947165 (patch) | |
tree | d960c30091e71dede92b64296d1e7c0f87186c60 | |
parent | 0f22a35cecdaf83b8fca3cdfb5c45feb6f5e292c (diff) | |
download | patch-99f2638763845d8173a0c9f9209ac2b4be947165.tar.gz |
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.
-rw-r--r-- | src/patch.c | 6 | ||||
-rw-r--r-- | tests/concat-git-diff | 41 |
2 files changed, 41 insertions, 6 deletions
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 |