summaryrefslogtreecommitdiffstats
path: root/source/a/patch/patch.99f2638763845d8173a0c9f9209ac2b4be947165.diff
blob: 14c342a51d2f1cafbd82fe1001225b522bdeca9b (plain) (blame)
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
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