Show More
@@ -454,6 +454,40 b' def mergecopies(repo, c1, c2, ca):' | |||
|
454 | 454 | |
|
455 | 455 | return copy, movewithdir, diverge, renamedelete |
|
456 | 456 | |
|
457 | def _related(f1, f2, limit): | |
|
458 | """return True if f1 and f2 filectx have a common ancestor | |
|
459 | ||
|
460 | Walk back to common ancestor to see if the two files originate | |
|
461 | from the same file. Since workingfilectx's rev() is None it messes | |
|
462 | up the integer comparison logic, hence the pre-step check for | |
|
463 | None (f1 and f2 can only be workingfilectx's initially). | |
|
464 | """ | |
|
465 | ||
|
466 | if f1 == f2: | |
|
467 | return f1 # a match | |
|
468 | ||
|
469 | g1, g2 = f1.ancestors(), f2.ancestors() | |
|
470 | try: | |
|
471 | f1r, f2r = f1.linkrev(), f2.linkrev() | |
|
472 | ||
|
473 | if f1r is None: | |
|
474 | f1 = next(g1) | |
|
475 | if f2r is None: | |
|
476 | f2 = next(g2) | |
|
477 | ||
|
478 | while True: | |
|
479 | f1r, f2r = f1.linkrev(), f2.linkrev() | |
|
480 | if f1r > f2r: | |
|
481 | f1 = next(g1) | |
|
482 | elif f2r > f1r: | |
|
483 | f2 = next(g2) | |
|
484 | elif f1 == f2: | |
|
485 | return f1 # a match | |
|
486 | elif f1r == f2r or f1r < limit or f2r < limit: | |
|
487 | return False # copy no longer relevant | |
|
488 | except StopIteration: | |
|
489 | return False | |
|
490 | ||
|
457 | 491 | def _checkcopies(ctx, f, m1, m2, base, limit, diverge, copy, fullcopy): |
|
458 | 492 | """ |
|
459 | 493 | check possible copies of f from m1 to m2 |
@@ -477,37 +511,6 b' def _checkcopies(ctx, f, m1, m2, base, l' | |||
|
477 | 511 | mb = base.manifest() |
|
478 | 512 | getfctx = _makegetfctx(ctx) |
|
479 | 513 | |
|
480 | def _related(f1, f2, limit): | |
|
481 | # Walk back to common ancestor to see if the two files originate | |
|
482 | # from the same file. Since workingfilectx's rev() is None it messes | |
|
483 | # up the integer comparison logic, hence the pre-step check for | |
|
484 | # None (f1 and f2 can only be workingfilectx's initially). | |
|
485 | ||
|
486 | if f1 == f2: | |
|
487 | return f1 # a match | |
|
488 | ||
|
489 | g1, g2 = f1.ancestors(), f2.ancestors() | |
|
490 | try: | |
|
491 | f1r, f2r = f1.linkrev(), f2.linkrev() | |
|
492 | ||
|
493 | if f1r is None: | |
|
494 | f1 = next(g1) | |
|
495 | if f2r is None: | |
|
496 | f2 = next(g2) | |
|
497 | ||
|
498 | while True: | |
|
499 | f1r, f2r = f1.linkrev(), f2.linkrev() | |
|
500 | if f1r > f2r: | |
|
501 | f1 = next(g1) | |
|
502 | elif f2r > f1r: | |
|
503 | f2 = next(g2) | |
|
504 | elif f1 == f2: | |
|
505 | return f1 # a match | |
|
506 | elif f1r == f2r or f1r < limit or f2r < limit: | |
|
507 | return False # copy no longer relevant | |
|
508 | except StopIteration: | |
|
509 | return False | |
|
510 | ||
|
511 | 514 | of = None |
|
512 | 515 | seen = set([f]) |
|
513 | 516 | for oc in getfctx(f, m1[f]).ancestors(): |
General Comments 0
You need to be logged in to leave comments.
Login now