comparison mercurial/templatekw.py @ 41781:e9b9ee9af4a9

templatekw: move getrenamedfn() to scmutil (API) The function is already used by `hg log` (for following renames, not for templates), so it seems it does not belong in templatekw. Differential Revision: https://phab.mercurial-scm.org/D6021
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 21 Feb 2019 10:54:29 -0800
parents 52d4cb162902
children b47e9712000b
comparison
equal deleted inserted replaced
41780:18f619d3b1bb 41781:e9b9ee9af4a9
102 todo.extend(p.rev() for p in ctx.parents()) 102 todo.extend(p.rev() for p in ctx.parents())
103 continue 103 continue
104 latesttags[rev] = pdate, pdist + 1, ptag 104 latesttags[rev] = pdate, pdist + 1, ptag
105 return latesttags[rev] 105 return latesttags[rev]
106 106
107 def getrenamedfn(repo, endrev=None):
108 rcache = {}
109 if endrev is None:
110 endrev = len(repo)
111
112 def getrenamed(fn, rev):
113 '''looks up all renames for a file (up to endrev) the first
114 time the file is given. It indexes on the changerev and only
115 parses the manifest if linkrev != changerev.
116 Returns rename info for fn at changerev rev.'''
117 if fn not in rcache:
118 rcache[fn] = {}
119 fl = repo.file(fn)
120 for i in fl:
121 lr = fl.linkrev(i)
122 renamed = fl.renamed(fl.node(i))
123 rcache[fn][lr] = renamed and renamed[0]
124 if lr >= endrev:
125 break
126 if rev in rcache[fn]:
127 return rcache[fn][rev]
128
129 # If linkrev != rev (i.e. rev not found in rcache) fallback to
130 # filectx logic.
131 try:
132 return repo[rev][fn].copysource()
133 except error.LookupError:
134 return None
135
136 return getrenamed
137
138 def getlogcolumns(): 107 def getlogcolumns():
139 """Return a dict of log column labels""" 108 """Return a dict of log column labels"""
140 _ = pycompat.identity # temporarily disable gettext 109 _ = pycompat.identity # temporarily disable gettext
141 # i18n: column positioning for "hg log" 110 # i18n: column positioning for "hg log"
142 columns = _('bookmark: %s\n' 111 columns = _('bookmark: %s\n'
341 ctx = context.resource(mapping, 'ctx') 310 ctx = context.resource(mapping, 'ctx')
342 cache = context.resource(mapping, 'cache') 311 cache = context.resource(mapping, 'cache')
343 copies = context.resource(mapping, 'revcache').get('copies') 312 copies = context.resource(mapping, 'revcache').get('copies')
344 if copies is None: 313 if copies is None:
345 if 'getrenamed' not in cache: 314 if 'getrenamed' not in cache:
346 cache['getrenamed'] = getrenamedfn(repo) 315 cache['getrenamed'] = scmutil.getrenamedfn(repo)
347 copies = [] 316 copies = []
348 getrenamed = cache['getrenamed'] 317 getrenamed = cache['getrenamed']
349 for fn in ctx.files(): 318 for fn in ctx.files():
350 rename = getrenamed(fn, ctx.rev()) 319 rename = getrenamed(fn, ctx.rev())
351 if rename: 320 if rename: