This instance will be upgraded to Heptapod 0.21.0rc3 on 2021-04-23 at 10:30 UTC+2 (a few minutes of down time)

Commit a6939e93 authored by kiilerix's avatar kiilerix

log: follow filenames through renames (issue647)

In commands.log a displayer was initialized from
cmdutil.show_changeset() with the initial matchfn (which designates
the specified files which only is correct in the highest revision in
the range). prep() is handed the correct list of files, but didn't use that list but keept using the original

The matchfn argument to cmdutil.show_changeset() wasn't specified in
other places and is only used in .show(), so now we give the matchfn
as an optional parameter to .show().

We do however still have to detect --patch and --stat from opts in
show_changeset() and let it imply a matchall, but that can now be
overruled with the new .show() matchfn parameter.

branch : stable
parent eca7f719201b
......@@ -708,15 +708,15 @@ class changeset_printer(object):
if self.footer:
def show(self, ctx, copies=None, **props):
def show(self, ctx, copies=None, matchfn=None, **props):
if self.buffered:
self._show(ctx, copies, props)
self._show(ctx, copies, matchfn, props)
self.hunk[ctx.rev()] = self.ui.popbuffer(labeled=True)
self._show(ctx, copies, props)
self._show(ctx, copies, matchfn, props)
def _show(self, ctx, copies, props):
def _show(self, ctx, copies, matchfn, props):
'''show a single changeset or file revision'''
changenode = ctx.node()
rev = ctx.rev()
......@@ -796,15 +796,17 @@ class changeset_printer(object):
self.showpatch(changenode, matchfn)
def showpatch(self, node):
if self.patch:
def showpatch(self, node, matchfn):
if not matchfn:
matchfn = self.patch
if matchfn:
stat = self.diffopts.get('stat')
diffopts = patch.diffopts(self.ui, self.diffopts)
prev = self.repo.changelog.parents(node)[0]
diffordiffstat(self.ui, self.repo, diffopts, prev, node,
match=self.patch, stat=stat)
match=matchfn, stat=stat)
def _meaningful_parentrevs(self, log, rev):
......@@ -857,7 +859,7 @@ class changeset_templater(changeset_printer):
return []
return parents
def _show(self, ctx, copies, props):
def _show(self, ctx, copies, matchfn, props):
'''show a single changeset or file revision'''
showlist = templatekw.showlist
......@@ -912,7 +914,7 @@ class changeset_templater(changeset_printer):
# write changeset metadata, then patch if requested
key = types['changeset']
self.ui.write(templater.stringify(self.t(key, **props)))
self.showpatch(ctx.node(), matchfn)
if types['footer']:
if not self.footer:
......@@ -925,7 +927,7 @@ class changeset_templater(changeset_printer):
except SyntaxError, inst:
raise util.Abort('%s: %s' % (self.t.mapfile, inst.args[0]))
def show_changeset(ui, repo, opts, buffered=False, matchfn=False):
def show_changeset(ui, repo, opts, buffered=False):
"""show one changeset using template or regular display.
Display format will be the first non-empty hit of:
......@@ -939,7 +941,7 @@ def show_changeset(ui, repo, opts, buffered=False, matchfn=False):
# options
patch = False
if opts.get('patch') or opts.get('stat'):
patch = matchfn or matchall(repo)
patch = matchall(repo)
tmpl = opts.get('template')
style = None
......@@ -2484,7 +2484,7 @@ def log(ui, repo, *pats, **opts):
branches = opts.get('branch', []) + opts.get('only_branch', [])
opts['branch'] = [repo.lookupbranch(b) for b in branches]
displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn)
displayer = cmdutil.show_changeset(ui, repo, opts, True)
def prep(ctx, fns):
rev = ctx.rev()
parents = [p for p in repo.changelog.parentrevs(rev)
......@@ -2517,7 +2517,11 @@ def log(ui, repo, *pats, **opts):
if rename:
copies.append((fn, rename[0])), copies=copies)
revmatchfn = None
if opts.get('patch') or opts.get('stat'):
revmatchfn = cmdutil.match(repo, fns), copies=copies, matchfn=revmatchfn)
for ctx in cmdutil.walkchangerevs(repo, matchfn, opts, prep):
if count == limit:
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment