D6545: copies: create helper for getting all copies for changeset
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Jun 19 21:56:09 UTC 2019
Closed by commit rHG88ba0ff94605: copies: create helper for getting all copies for changeset (authored by martinvonz).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6545?vs=15595&id=15607
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D6545/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D6545
AFFECTED FILES
mercurial/scmutil.py
mercurial/templatekw.py
CHANGE DETAILS
diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py
--- a/mercurial/templatekw.py
+++ b/mercurial/templatekw.py
@@ -301,14 +301,10 @@
cache = context.resource(mapping, 'cache')
copies = context.resource(mapping, 'revcache').get('copies')
if copies is None:
- if 'getrenamed' not in cache:
- cache['getrenamed'] = scmutil.getrenamedfn(repo)
- copies = []
- getrenamed = cache['getrenamed']
- for fn in ctx.files():
- rename = getrenamed(fn, ctx.rev())
- if rename:
- copies.append((fn, rename))
+ if 'getcopies' not in cache:
+ cache['getcopies'] = scmutil.getcopiesfn(repo)
+ getcopies = cache['getcopies']
+ copies = getcopies(ctx)
return templateutil.compatfilecopiesdict(context, mapping, 'file_copy',
copies)
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1247,6 +1247,28 @@
return getrenamed
+def getcopiesfn(repo, endrev=None):
+ if copiesmod.usechangesetcentricalgo(repo):
+ def copiesfn(ctx):
+ if ctx.p2copies():
+ allcopies = ctx.p1copies().copy()
+ # There should be no overlap
+ allcopies.update(ctx.p2copies())
+ return sorted(allcopies.items())
+ else:
+ return sorted(ctx.p1copies().items())
+ else:
+ getrenamed = getrenamedfn(repo, endrev)
+ def copiesfn(ctx):
+ copies = []
+ for fn in ctx.files():
+ rename = getrenamed(fn, ctx.rev())
+ if rename:
+ copies.append((fn, rename))
+ return copies
+
+ return copiesfn
+
def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
"""Update the dirstate to reflect the intent of copying src to dst. For
different reasons it might not end with dst being marked as copied from src.
To: martinvonz, #hg-reviewers, pulkit
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list