copytrace: use ctx.mutable() instead of adhoc constant of non-public phases

This commit is contained in:
Yuya Nishihara 2017-09-22 22:45:02 +09:00
parent 76b0c9eaa7
commit 183298cb9f

View File

@ -15,7 +15,6 @@ from . import (
match as matchmod,
node,
pathutil,
phases,
scmutil,
util,
)
@ -368,9 +367,9 @@ def mergecopies(repo, c1, c2, base):
if copytracing == 'off':
return {}, {}, {}, {}, {}
elif copytracing == 'heuristics':
# Do full copytracing if only drafts are involved as that will be fast
# enough and will also cover the copies which can be missed by
# heuristics
# Do full copytracing if only non-public revisions are involved as
# that will be fast enough and will also cover the copies which could
# be missed by heuristics
if _isfullcopytraceable(repo, c1, base):
return _fullcopytracing(repo, c1, c2, base)
return _heuristicscopytracing(repo, c1, c2, base)
@ -378,16 +377,13 @@ def mergecopies(repo, c1, c2, base):
return _fullcopytracing(repo, c1, c2, base)
def _isfullcopytraceable(repo, c1, base):
""" Checks that if base, source and destination are all draft branches, if
yes let's use the full copytrace algorithm for increased capabilities since
it will be fast enough.
""" Checks that if base, source and destination are all no-public branches,
if yes let's use the full copytrace algorithm for increased capabilities
since it will be fast enough.
"""
if c1.rev() is None:
c1 = c1.p1()
nonpublicphases = set([phases.draft, phases.secret])
if (c1.phase() in nonpublicphases) and (base.phase() in nonpublicphases):
if c1.mutable() and base.mutable():
sourcecommitlimit = repo.ui.configint('experimental',
'copytrace.sourcecommitlimit')
commits = len(repo.revs('%d::%d', base.rev(), c1.rev()))