comparison mercurial/copies.py @ 30135:3eae81c0a09d

checkcopies: rename 'ca' to 'base' This variable was named after the common ancestor. It is actually the merge base that might differ from the common ancestor in the graft case. We rename the variable before a larger refactoring to clarify the situation.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Sat, 08 Oct 2016 18:38:42 +0200
parents 2c8ec8c2ddfe
children 8797eadb5d90
comparison
equal deleted inserted replaced
30134:165c9526e594 30135:3eae81c0a09d
452 "dst: '%s'\n") % (f, df)) 452 "dst: '%s'\n") % (f, df))
453 break 453 break
454 454
455 return copy, movewithdir, diverge, renamedelete 455 return copy, movewithdir, diverge, renamedelete
456 456
457 def _checkcopies(ctx, f, m1, m2, ca, limit, diverge, copy, fullcopy): 457 def _checkcopies(ctx, f, m1, m2, base, limit, diverge, copy, fullcopy):
458 """ 458 """
459 check possible copies of f from m1 to m2 459 check possible copies of f from m1 to m2
460 460
461 ctx = starting context for f in m1 461 ctx = starting context for f in m1
462 f = the filename to check 462 f = the filename to check
463 m1 = the source manifest 463 m1 = the source manifest
464 m2 = the destination manifest 464 m2 = the destination manifest
465 ca = the changectx of the common ancestor 465 base = the changectx used as a merge base
466 limit = the rev number to not search beyond 466 limit = the rev number to not search beyond
467 diverge = record all diverges in this dict 467 diverge = record all diverges in this dict
468 copy = record all non-divergent copies in this dict 468 copy = record all non-divergent copies in this dict
469 fullcopy = record all copies in this dict 469 fullcopy = record all copies in this dict
470 470
472 irrelevant revisions will not be limited 472 irrelevant revisions will not be limited
473 there is no easy way to make this algorithm stop in a guaranteed way 473 there is no easy way to make this algorithm stop in a guaranteed way
474 once it "goes behind a certain revision". 474 once it "goes behind a certain revision".
475 """ 475 """
476 476
477 ma = ca.manifest() 477 mb = base.manifest()
478 getfctx = _makegetfctx(ctx) 478 getfctx = _makegetfctx(ctx)
479 479
480 def _related(f1, f2, limit): 480 def _related(f1, f2, limit):
481 # Walk back to common ancestor to see if the two files originate 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 482 # from the same file. Since workingfilectx's rev() is None it messes
521 seen.add(of) 521 seen.add(of)
522 522
523 fullcopy[f] = of # remember for dir rename detection 523 fullcopy[f] = of # remember for dir rename detection
524 if of not in m2: 524 if of not in m2:
525 continue # no match, keep looking 525 continue # no match, keep looking
526 if m2[of] == ma.get(of): 526 if m2[of] == mb.get(of):
527 return # no merge needed, quit early 527 return # no merge needed, quit early
528 c2 = getfctx(of, m2[of]) 528 c2 = getfctx(of, m2[of])
529 cr = _related(oc, c2, ca.rev()) 529 cr = _related(oc, c2, base.rev())
530 if cr and (of == f or of == c2.path()): # non-divergent 530 if cr and (of == f or of == c2.path()): # non-divergent
531 copy[f] = of 531 copy[f] = of
532 return 532 return
533 533
534 if of in ma: 534 if of in mb:
535 diverge.setdefault(of, []).append(f) 535 diverge.setdefault(of, []).append(f)
536 536
537 def duplicatecopies(repo, rev, fromrev, skiprev=None): 537 def duplicatecopies(repo, rev, fromrev, skiprev=None):
538 '''reproduce copies from fromrev to rev in the dirstate 538 '''reproduce copies from fromrev to rev in the dirstate
539 539