Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/patch.py @ 3696:562a65635bcb
diff: better detection of renames when comparing with the working dir.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Mon, 20 Nov 2006 19:32:38 -0200 |
parents | 3a2fc90d27d6 |
children | 05c8704a3743 |
comparison
equal
deleted
inserted
replaced
3695:3a2fc90d27d6 | 3696:562a65635bcb |
---|---|
465 modified, added, removed = map(filterfiles, (modified, added, removed)) | 465 modified, added, removed = map(filterfiles, (modified, added, removed)) |
466 | 466 |
467 if not modified and not added and not removed: | 467 if not modified and not added and not removed: |
468 return | 468 return |
469 | 469 |
470 # returns False if there was no rename between n1 and n2 | |
471 # returns None if the file was created between n1 and n2 | |
472 # returns the (file, node) present in n1 that was renamed to f in n2 | |
470 def renamedbetween(f, n1, n2): | 473 def renamedbetween(f, n1, n2): |
471 r1, r2 = map(repo.changelog.rev, (n1, n2)) | 474 r1, r2 = map(repo.changelog.rev, (n1, n2)) |
472 orig = f | 475 orig = f |
473 src = None | 476 src = None |
474 while r2 > r1: | 477 while r2 > r1: |
481 return None | 484 return None |
482 if src: | 485 if src: |
483 f = src[0] | 486 f = src[0] |
484 n2 = repo.changelog.parents(n2)[0] | 487 n2 = repo.changelog.parents(n2)[0] |
485 r2 = repo.changelog.rev(n2) | 488 r2 = repo.changelog.rev(n2) |
486 if orig == f: | |
487 return None | |
488 cl = getchangelog(n1) | 489 cl = getchangelog(n1) |
489 m = getmanifest(cl[0]) | 490 m = getmanifest(cl[0]) |
490 if f not in m: | 491 if f not in m: |
491 return None | 492 return None |
493 if f == orig: | |
494 return False | |
492 return f, m[f] | 495 return f, m[f] |
493 | 496 |
494 if node2: | 497 if node2: |
495 change = getchangelog(node2) | 498 change = getchangelog(node2) |
496 mmap2 = getmanifest(change[0]) | 499 mmap2 = getmanifest(change[0]) |
516 src = repo.dirstate.copied(f) | 519 src = repo.dirstate.copied(f) |
517 parent = repo.dirstate.parents()[0] | 520 parent = repo.dirstate.parents()[0] |
518 if src: | 521 if src: |
519 f = src | 522 f = src |
520 of = renamedbetween(f, node1, parent) | 523 of = renamedbetween(f, node1, parent) |
521 if of: | 524 if of or of is None: |
522 return of | 525 return of |
523 elif src: | 526 elif src: |
524 cl = getchangelog(parent)[0] | 527 cl = getchangelog(parent)[0] |
525 return (src, getmanifest(cl)[src]) | 528 return (src, getmanifest(cl)[src]) |
526 else: | 529 else: |