Show More
@@ -1161,9 +1161,10 b' def diff(repo, node1=None, node2=None, f' | |||||
1161 | # returns False if there was no rename between ctx1 and ctx2 |
|
1161 | # returns False if there was no rename between ctx1 and ctx2 | |
1162 | # returns None if the file was created between ctx1 and ctx2 |
|
1162 | # returns None if the file was created between ctx1 and ctx2 | |
1163 | # returns the (file, node) present in ctx1 that was renamed to f in ctx2 |
|
1163 | # returns the (file, node) present in ctx1 that was renamed to f in ctx2 | |
1164 | def renamed(f): |
|
1164 | # This will only really work if c1 is the Nth 1st parent of c2. | |
1165 | startrev = ctx1.rev() |
|
1165 | def renamed(c1, c2, man, f): | |
1166 | c = ctx2 |
|
1166 | startrev = c1.rev() | |
|
1167 | c = c2 | |||
1167 | crev = c.rev() |
|
1168 | crev = c.rev() | |
1168 | if crev is None: |
|
1169 | if crev is None: | |
1169 | crev = repo.changelog.count() |
|
1170 | crev = repo.changelog.count() | |
@@ -1179,7 +1180,7 b' def diff(repo, node1=None, node2=None, f' | |||||
1179 | crev = c.parents()[0].rev() |
|
1180 | crev = c.parents()[0].rev() | |
1180 | # try to reuse |
|
1181 | # try to reuse | |
1181 | c = getctx(crev) |
|
1182 | c = getctx(crev) | |
1182 |
if f not in man |
|
1183 | if f not in man: | |
1183 | return None |
|
1184 | return None | |
1184 | if f == orig: |
|
1185 | if f == orig: | |
1185 | return False |
|
1186 | return False | |
@@ -1193,11 +1194,27 b' def diff(repo, node1=None, node2=None, f' | |||||
1193 |
|
1194 | |||
1194 | if opts.git: |
|
1195 | if opts.git: | |
1195 | copied = {} |
|
1196 | copied = {} | |
1196 | for f in added: |
|
1197 | c1, c2 = ctx1, ctx2 | |
1197 |
|
|
1198 | files = added | |
|
1199 | man = man1 | |||
|
1200 | if node2 and ctx1.rev() >= ctx2.rev(): | |||
|
1201 | # renamed() starts at c2 and walks back in history until c1. | |||
|
1202 | # Since ctx1.rev() >= ctx2.rev(), invert ctx2 and ctx1 to | |||
|
1203 | # detect (inverted) copies. | |||
|
1204 | c1, c2 = ctx2, ctx1 | |||
|
1205 | files = removed | |||
|
1206 | man = ctx2.manifest() | |||
|
1207 | for f in files: | |||
|
1208 | src = renamed(c1, c2, man, f) | |||
1198 | if src: |
|
1209 | if src: | |
1199 | copied[f] = src |
|
1210 | copied[f] = src | |
1200 | srcs = [x[1] for x in copied.items()] |
|
1211 | if ctx1 == c2: | |
|
1212 | # invert the copied dict | |||
|
1213 | copied = dict([(v, k) for (k, v) in copied.iteritems()]) | |||
|
1214 | # If we've renamed file foo to bar (copied['bar'] = 'foo'), | |||
|
1215 | # avoid showing a diff for foo if we're going to show | |||
|
1216 | # the rename to bar. | |||
|
1217 | srcs = [x[1] for x in copied.iteritems() if x[0] in added] | |||
1201 |
|
1218 | |||
1202 | all = modified + added + removed |
|
1219 | all = modified + added + removed | |
1203 | all.sort() |
|
1220 | all.sort() |
@@ -78,6 +78,8 b' hg mv dst2 dst3' | |||||
78 | hg ci -m 'mv dst2 dst3; revert start' -d '0 0' |
|
78 | hg ci -m 'mv dst2 dst3; revert start' -d '0 0' | |
79 |
|
79 | |||
80 | hg diff --git -r 9:11 |
|
80 | hg diff --git -r 9:11 | |
|
81 | echo '% reversed' | |||
|
82 | hg diff --git -r 11:9 | |||
81 |
|
83 | |||
82 | echo a >> foo |
|
84 | echo a >> foo | |
83 | hg add foo |
|
85 | hg add foo | |
@@ -92,12 +94,18 b" hg ci -m 'change bar'" | |||||
92 | echo |
|
94 | echo | |
93 | echo '% file created before r1 and renamed before r2' |
|
95 | echo '% file created before r1 and renamed before r2' | |
94 | hg diff --git -r -3:-1 |
|
96 | hg diff --git -r -3:-1 | |
|
97 | echo '% reversed' | |||
|
98 | hg diff --git -r -1:-3 | |||
95 | echo |
|
99 | echo | |
96 | echo '% file created in r1 and renamed before r2' |
|
100 | echo '% file created in r1 and renamed before r2' | |
97 | hg diff --git -r -4:-1 |
|
101 | hg diff --git -r -4:-1 | |
|
102 | echo '% reversed' | |||
|
103 | hg diff --git -r -1:-4 | |||
98 | echo |
|
104 | echo | |
99 | echo '% file created after r1 and renamed before r2' |
|
105 | echo '% file created after r1 and renamed before r2' | |
100 | hg diff --git -r -5:-1 |
|
106 | hg diff --git -r -5:-1 | |
|
107 | echo '% reversed' | |||
|
108 | hg diff --git -r -1:-5 | |||
101 |
|
109 | |||
102 | echo |
|
110 | echo | |
103 | echo '% comparing with the working dir' |
|
111 | echo '% comparing with the working dir' | |
@@ -139,6 +147,8 b' hg cp brand-new2 brand-new3' | |||||
139 | hg mv brand-new2 brand-new3-2 |
|
147 | hg mv brand-new2 brand-new3-2 | |
140 | hg ci -m 'multiple renames/copies' |
|
148 | hg ci -m 'multiple renames/copies' | |
141 | hg diff --git -r -2 -r -1 |
|
149 | hg diff --git -r -2 -r -1 | |
|
150 | echo '% reversed' | |||
|
151 | hg diff --git -r -1 -r -2 | |||
142 |
|
152 | |||
143 | echo '% there should be a trailing TAB if there are spaces in the file name' |
|
153 | echo '% there should be a trailing TAB if there are spaces in the file name' | |
144 | echo foo > 'with spaces' |
|
154 | echo foo > 'with spaces' |
@@ -75,6 +75,10 b' rename to renamed.bin' | |||||
75 | diff --git a/dst2 b/dst3 |
|
75 | diff --git a/dst2 b/dst3 | |
76 | rename from dst2 |
|
76 | rename from dst2 | |
77 | rename to dst3 |
|
77 | rename to dst3 | |
|
78 | % reversed | |||
|
79 | diff --git a/dst3 b/dst2 | |||
|
80 | rename from dst3 | |||
|
81 | rename to dst2 | |||
78 |
|
82 | |||
79 | % file created before r1 and renamed before r2 |
|
83 | % file created before r1 and renamed before r2 | |
80 | diff --git a/foo b/bar |
|
84 | diff --git a/foo b/bar | |
@@ -86,6 +90,16 b' rename to bar' | |||||
86 | a |
|
90 | a | |
87 | b |
|
91 | b | |
88 | +c |
|
92 | +c | |
|
93 | % reversed | |||
|
94 | diff --git a/bar b/foo | |||
|
95 | rename from bar | |||
|
96 | rename to foo | |||
|
97 | --- a/foo | |||
|
98 | +++ b/foo | |||
|
99 | @@ -1,3 +1,2 @@ a | |||
|
100 | a | |||
|
101 | b | |||
|
102 | -c | |||
89 |
|
103 | |||
90 | % file created in r1 and renamed before r2 |
|
104 | % file created in r1 and renamed before r2 | |
91 | diff --git a/foo b/bar |
|
105 | diff --git a/foo b/bar | |
@@ -97,6 +111,16 b' rename to bar' | |||||
97 | a |
|
111 | a | |
98 | +b |
|
112 | +b | |
99 | +c |
|
113 | +c | |
|
114 | % reversed | |||
|
115 | diff --git a/bar b/foo | |||
|
116 | rename from bar | |||
|
117 | rename to foo | |||
|
118 | --- a/foo | |||
|
119 | +++ b/foo | |||
|
120 | @@ -1,3 +1,1 @@ a | |||
|
121 | a | |||
|
122 | -b | |||
|
123 | -c | |||
100 |
|
124 | |||
101 | % file created after r1 and renamed before r2 |
|
125 | % file created after r1 and renamed before r2 | |
102 | diff --git a/bar b/bar |
|
126 | diff --git a/bar b/bar | |
@@ -107,6 +131,15 b' new file mode 100644' | |||||
107 | +a |
|
131 | +a | |
108 | +b |
|
132 | +b | |
109 | +c |
|
133 | +c | |
|
134 | % reversed | |||
|
135 | diff --git a/bar b/bar | |||
|
136 | deleted file mode 100644 | |||
|
137 | --- a/bar | |||
|
138 | +++ /dev/null | |||
|
139 | @@ -1,3 +0,0 @@ | |||
|
140 | -a | |||
|
141 | -b | |||
|
142 | -c | |||
110 |
|
143 | |||
111 | % comparing with the working dir |
|
144 | % comparing with the working dir | |
112 | % there's a copy in the working dir... |
|
145 | % there's a copy in the working dir... | |
@@ -145,6 +178,16 b' rename to brand-new3' | |||||
145 | diff --git a/brand-new2 b/brand-new3-2 |
|
178 | diff --git a/brand-new2 b/brand-new3-2 | |
146 | copy from brand-new2 |
|
179 | copy from brand-new2 | |
147 | copy to brand-new3-2 |
|
180 | copy to brand-new3-2 | |
|
181 | % reversed | |||
|
182 | diff --git a/brand-new3 b/brand-new2 | |||
|
183 | rename from brand-new3 | |||
|
184 | rename to brand-new2 | |||
|
185 | diff --git a/brand-new3-2 b/brand-new3-2 | |||
|
186 | deleted file mode 100644 | |||
|
187 | --- a/brand-new3-2 | |||
|
188 | +++ /dev/null | |||
|
189 | @@ -1,1 +0,0 @@ | |||
|
190 | - | |||
148 | % there should be a trailing TAB if there are spaces in the file name |
|
191 | % there should be a trailing TAB if there are spaces in the file name | |
149 | diff --git a/with spaces b/with spaces |
|
192 | diff --git a/with spaces b/with spaces | |
150 | new file mode 100644 |
|
193 | new file mode 100644 |
General Comments 0
You need to be logged in to leave comments.
Login now