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