##// END OF EJS Templates
Test applying context diffs
Patrick Mezard -
r12825:61f48581 stable
parent child Browse files
Show More
@@ -0,0 +1,125 b''
1 Test applying context diffs
2
3 $ cat > writepatterns.py <<EOF
4 > import sys
5 >
6 > path = sys.argv[1]
7 > lasteol = sys.argv[2] == '1'
8 > patterns = sys.argv[3:]
9 >
10 > fp = file(path, 'wb')
11 > for i, pattern in enumerate(patterns):
12 > count = int(pattern[0:-1])
13 > char = pattern[-1] + '\n'
14 > if not lasteol and i == len(patterns) - 1:
15 > fp.write((char*count)[:-1])
16 > else:
17 > fp.write(char*count)
18 > fp.close()
19 > EOF
20 $ cat > cat.py <<EOF
21 > import sys
22 > sys.stdout.write(repr(file(sys.argv[1], 'rb').read()) + '\n')
23 > EOF
24
25 Initialize the test repository
26
27 $ hg init repo
28 $ cd repo
29 $ python ../writepatterns.py a 0 5A 1B 5C 1D
30 $ python ../writepatterns.py b 1 1A 1B
31 $ python ../writepatterns.py c 1 5A
32 $ python ../writepatterns.py d 1 5A 1B
33 $ hg add
34 adding a
35 adding b
36 adding c
37 adding d
38 $ hg ci -m addfiles
39
40 Add file, missing a last end of line
41
42 $ hg import --no-commit - <<EOF
43 > *** /dev/null 2010-10-16 18:05:49.000000000 +0200
44 > --- b/newnoeol 2010-10-16 18:23:26.000000000 +0200
45 > ***************
46 > *** 0 ****
47 > --- 1,2 ----
48 > + a
49 > + b
50 > \ No newline at end of file
51 > *** a/a Sat Oct 16 16:35:51 2010
52 > --- b/a Sat Oct 16 16:35:51 2010
53 > ***************
54 > *** 3,12 ****
55 > A
56 > A
57 > A
58 > ! B
59 > C
60 > C
61 > C
62 > C
63 > C
64 > ! D
65 > \ No newline at end of file
66 > --- 3,13 ----
67 > A
68 > A
69 > A
70 > ! E
71 > C
72 > C
73 > C
74 > C
75 > C
76 > ! F
77 > ! F
78 >
79 > *** a/b 2010-10-16 18:40:38.000000000 +0200
80 > --- /dev/null 2010-10-16 18:05:49.000000000 +0200
81 > ***************
82 > *** 1,2 ****
83 > - A
84 > - B
85 > --- 0 ----
86 > *** a/c Sat Oct 16 21:34:26 2010
87 > --- b/c Sat Oct 16 21:34:27 2010
88 > ***************
89 > *** 3,5 ****
90 > --- 3,7 ----
91 > A
92 > A
93 > A
94 > + B
95 > + B
96 > *** a/d Sat Oct 16 21:47:20 2010
97 > --- b/d Sat Oct 16 21:47:22 2010
98 > ***************
99 > *** 2,6 ****
100 > A
101 > A
102 > A
103 > - A
104 > - B
105 > --- 2,4 ----
106 > EOF
107 applying patch from stdin
108 $ hg st
109 M a
110 M c
111 M d
112 A newnoeol
113 R b
114
115 What's in a
116
117 $ python ../cat.py a
118 'A\nA\nA\nA\nA\nE\nC\nC\nC\nC\nC\nF\nF\n'
119 $ python ../cat.py newnoeol
120 'a\nb'
121 $ python ../cat.py c
122 'A\nA\nA\nA\nA\nB\nB\n'
123 $ python ../cat.py d
124 'A\nA\nA\nA\n'
125
@@ -686,6 +686,7 b' class hunk(object):'
686 for x in xrange(self.lena):
686 for x in xrange(self.lena):
687 l = lr.readline()
687 l = lr.readline()
688 if l.startswith('---'):
688 if l.startswith('---'):
689 # lines addition, old block is empty
689 lr.push(l)
690 lr.push(l)
690 break
691 break
691 s = l[2:]
692 s = l[2:]
@@ -719,11 +720,15 b' class hunk(object):'
719 for x in xrange(self.lenb):
720 for x in xrange(self.lenb):
720 l = lr.readline()
721 l = lr.readline()
721 if l.startswith('\ '):
722 if l.startswith('\ '):
723 # XXX: the only way to hit this is with an invalid line range.
724 # The no-eol marker is not counted in the line range, but I
725 # guess there are diff(1) out there which behave differently.
722 s = self.b[-1][:-1]
726 s = self.b[-1][:-1]
723 self.b[-1] = s
727 self.b[-1] = s
724 self.hunk[hunki - 1] = s
728 self.hunk[hunki - 1] = s
725 continue
729 continue
726 if not l:
730 if not l:
731 # line deletions, new block is empty and we hit EOF
727 lr.push(l)
732 lr.push(l)
728 break
733 break
729 s = l[2:]
734 s = l[2:]
@@ -732,7 +737,7 b' class hunk(object):'
732 elif l.startswith(' '):
737 elif l.startswith(' '):
733 u = ' ' + s
738 u = ' ' + s
734 elif len(self.b) == 0:
739 elif len(self.b) == 0:
735 # this can happen when the hunk does not add any lines
740 # line deletions, new block is empty
736 lr.push(l)
741 lr.push(l)
737 break
742 break
738 else:
743 else:
General Comments 0
You need to be logged in to leave comments. Login now