Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 5371:17ed9b9a0d03
merge: add debug diagnostics for findcopies
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 04 Oct 2007 19:44:37 -0500 |
parents | 90d9ec0dc69d |
children | 36c46e20976a |
comparison
equal
deleted
inserted
replaced
5368:61462e7d62ed | 5371:17ed9b9a0d03 |
---|---|
186 | 186 |
187 # avoid silly behavior for update from empty dir | 187 # avoid silly behavior for update from empty dir |
188 if not m1 or not m2 or not ma: | 188 if not m1 or not m2 or not ma: |
189 return {}, {} | 189 return {}, {} |
190 | 190 |
191 repo.ui.debug(_(" searching for copies back to rev %d\n") % limit) | |
192 | |
191 u1 = nonoverlap(m1, m2, ma) | 193 u1 = nonoverlap(m1, m2, ma) |
192 u2 = nonoverlap(m2, m1, ma) | 194 u2 = nonoverlap(m2, m1, ma) |
195 | |
196 if u1: | |
197 repo.ui.debug(_(" unmatched files in local:\n %s\n") | |
198 % "\n ".join(u1)) | |
199 if u2: | |
200 repo.ui.debug(_(" unmatched files in other:\n %s\n") | |
201 % "\n ".join(u2)) | |
193 | 202 |
194 for f in u1: | 203 for f in u1: |
195 checkcopies(ctx(f, m1[f]), m2, ma) | 204 checkcopies(ctx(f, m1[f]), m2, ma) |
196 | 205 |
197 for f in u2: | 206 for f in u2: |
202 for f in fl: | 211 for f in fl: |
203 fo = list(fl) | 212 fo = list(fl) |
204 fo.remove(f) | 213 fo.remove(f) |
205 d2[f] = (of, fo) | 214 d2[f] = (of, fo) |
206 | 215 |
216 if fullcopy: | |
217 repo.ui.debug(_(" all copies found (* = to merge, ! = divergent):\n")) | |
218 for f in fullcopy: | |
219 note = "" | |
220 if f in copy: note += "*" | |
221 if f in diverge: note += "!" | |
222 repo.ui.debug(_(" %s -> %s %s\n") % (f, fullcopy[f], note)) | |
223 | |
207 if not fullcopy or not repo.ui.configbool("merge", "followdirs", True): | 224 if not fullcopy or not repo.ui.configbool("merge", "followdirs", True): |
208 return copy, diverge | 225 return copy, diverge |
226 | |
227 repo.ui.debug(_(" checking for directory renames\n")) | |
209 | 228 |
210 # generate a directory move map | 229 # generate a directory move map |
211 d1, d2 = dirs(m1), dirs(m2) | 230 d1, d2 = dirs(m1), dirs(m2) |
212 invalid = {} | 231 invalid = {} |
213 dirmove = {} | 232 dirmove = {} |
239 del d1, d2, invalid | 258 del d1, d2, invalid |
240 | 259 |
241 if not dirmove: | 260 if not dirmove: |
242 return copy, diverge | 261 return copy, diverge |
243 | 262 |
263 for d in dirmove: | |
264 repo.ui.debug(_(" dir %s -> %s\n") % (d, dirmove[d])) | |
265 | |
244 # check unaccounted nonoverlapping files against directory moves | 266 # check unaccounted nonoverlapping files against directory moves |
245 for f in u1 + u2: | 267 for f in u1 + u2: |
246 if f not in fullcopy: | 268 if f not in fullcopy: |
247 for d in dirmove: | 269 for d in dirmove: |
248 if f.startswith(d): | 270 if f.startswith(d): |
249 # new file added in a directory that was moved, move it | 271 # new file added in a directory that was moved, move it |
250 copy[f] = dirmove[d] + f[len(d):] | 272 copy[f] = dirmove[d] + f[len(d):] |
273 repo.ui.debug(_(" file %s -> %s\n") % (f, copy[f])) | |
251 break | 274 break |
252 | 275 |
253 return copy, diverge | 276 return copy, diverge |
254 | 277 |
255 def symmetricdifference(repo, rev1, rev2): | 278 def symmetricdifference(repo, rev1, rev2): |