[PATCH 1 of 3] changeset_printer and changeset_templater updated to work with contexts
Alexander Solovyov
piranha at piranha.org.ua
Fri Oct 17 15:50:01 CDT 2008
# HG changeset patch
# User Alexander Solovyov <piranha at piranha.org.ua>
# Date 1224276297 -10800
# Node ID 009316f403122ec8608c9b72c87ea93d946b8344
# Parent 9514cbb6e4f6f54ac8437e7a4eb160a39986a7eb
changeset_printer and changeset_templater updated to work with contexts
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -593,100 +593,91 @@
return 1
return 0
- def show(self, rev=0, changenode=None, copies=(), **props):
+ def show(self, rev=0, changenode=None, copies=(), ctx=None, **props):
+ assert (ctx is not None) or (changenode is not None) or (rev is not None)
+ if ctx is None:
+ ctx = self.repo[changenode or rev]
if self.buffered:
self.ui.pushbuffer()
- self._show(rev, changenode, copies, props)
- self.hunk[rev] = self.ui.popbuffer()
+ self._show(ctx, copies, props)
+ self.hunk[ctx.rev()] = self.ui.popbuffer()
else:
- self._show(rev, changenode, copies, props)
+ self._show(ctx, copies, props)
- def _show(self, rev, changenode, copies, props):
+ def _show(self, ctx, copies, props):
'''show a single changeset or file revision'''
- log = self.repo.changelog
- if changenode is None:
- changenode = log.node(rev)
- elif not rev:
- rev = log.rev(changenode)
-
if self.ui.quiet:
- self.ui.write("%d:%s\n" % (rev, short(changenode)))
+ self.ui.write("%d:%s\n" % (ctx.rev(), short(ctx.node())))
return
- changes = log.read(changenode)
- date = util.datestr(changes[2])
- extra = changes[5]
- branch = extra.get("branch")
-
+ date = util.datestr(ctx.date())
hexfunc = self.ui.debugflag and hex or short
-
- parents = [(p, hexfunc(log.node(p)))
- for p in self._meaningful_parentrevs(log, rev)]
-
- self.ui.write(_("changeset: %d:%s\n") % (rev, hexfunc(changenode)))
+ self.ui.write(_("changeset: %d:%s\n") % (ctx.rev(),
+ hexfunc(ctx.node())))
# don't show the default branch name
- if branch != 'default':
- branch = util.tolocal(branch)
+ if ctx.branch() != 'default':
+ branch = util.tolocal(ctx.branch())
self.ui.write(_("branch: %s\n") % branch)
- for tag in self.repo.nodetags(changenode):
+ for tag in ctx.tags():
self.ui.write(_("tag: %s\n") % tag)
- for parent in parents:
- self.ui.write(_("parent: %d:%s\n") % parent)
+ for parent in self._meaningful_parentrevs(ctx):
+ self.ui.write(_("parent: %d:%s\n") % (
+ parent, hexfunc(self.repo.changelog.node(parent))))
if self.ui.debugflag:
+ mnode = ctx.changeset()[0]
self.ui.write(_("manifest: %d:%s\n") %
- (self.repo.manifest.rev(changes[0]), hex(changes[0])))
- self.ui.write(_("user: %s\n") % changes[1])
+ (self.repo.manifest.rev(mnode), hex(mnode)))
+ self.ui.write(_("user: %s\n") % ctx.user())
self.ui.write(_("date: %s\n") % date)
if self.ui.debugflag:
- files = self.repo.status(log.parents(changenode)[0], changenode)[:3]
+ files = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3]
for key, value in zip([_("files:"), _("files+:"), _("files-:")],
files):
if value:
self.ui.write("%-12s %s\n" % (key, " ".join(value)))
- elif changes[3] and self.ui.verbose:
- self.ui.write(_("files: %s\n") % " ".join(changes[3]))
+ elif ctx.files() and self.ui.verbose:
+ self.ui.write(_("files: %s\n") % " ".join(ctx.files()))
if copies and self.ui.verbose:
copies = ['%s (%s)' % c for c in copies]
self.ui.write(_("copies: %s\n") % ' '.join(copies))
- if extra and self.ui.debugflag:
- for key, value in util.sort(extra.items()):
+ if ctx.extra() and self.ui.debugflag:
+ for key, value in util.sort(ctx.extra().items()):
self.ui.write(_("extra: %s=%s\n")
% (key, value.encode('string_escape')))
- description = changes[4].strip()
- if description:
+ if ctx.description():
if self.ui.verbose:
self.ui.write(_("description:\n"))
- self.ui.write(description)
+ self.ui.write(ctx.description())
self.ui.write("\n\n")
else:
self.ui.write(_("summary: %s\n") %
- description.splitlines()[0])
+ ctx.description().splitlines()[0])
self.ui.write("\n")
- self.showpatch(changenode)
+ self.showpatch(ctx)
- def showpatch(self, node):
+ def showpatch(self, ctx):
if self.patch:
- prev = self.repo.changelog.parents(node)[0]
- patch.diff(self.repo, prev, node, match=self.patch, fp=self.ui,
+ prev = ctx.parents()[0]
+ patch.diff(self.repo, prev.node(), ctx.node(), match=self.patch, fp=self.ui,
opts=patch.diffopts(self.ui))
self.ui.write("\n")
- def _meaningful_parentrevs(self, log, rev):
+ def _meaningful_parentrevs(self, ctx):
"""Return list of meaningful (or all if debug) parentrevs for rev.
For merges (two non-nullrev revisions) both parents are meaningful.
Otherwise the first parent revision is considered meaningful if it
is not the preceding revision.
"""
- parents = log.parentrevs(rev)
+ parents = self.repo.changelog.parentrevs(ctx.rev())
if not self.ui.debugflag and parents[1] == nullrev:
- if parents[0] >= rev - 1:
+ if parents[0] >= ctx.rev() - 1:
parents = []
else:
parents = [parents[0]]
@@ -711,15 +702,8 @@
'''set template string to use'''
self.t.cache['changeset'] = t
- def _show(self, rev, changenode, copies, props):
+ def _show(self, ctx, copies, props):
'''show a single changeset or file revision'''
- log = self.repo.changelog
- if changenode is None:
- changenode = log.node(rev)
- elif not rev:
- rev = log.rev(changenode)
-
- changes = log.read(changenode)
def showlist(name, values, plural=None, **args):
'''expand set of values.
@@ -783,21 +767,21 @@
yield self.t(endname, **args)
def showbranches(**args):
- branch = changes[5].get("branch")
+ branch = ctx.branch()
if branch != 'default':
branch = util.tolocal(branch)
return showlist('branch', [branch], plural='branches', **args)
def showparents(**args):
- parents = [[('rev', p), ('node', hex(log.node(p)))]
- for p in self._meaningful_parentrevs(log, rev)]
+ parents = [[('rev', p), ('node', hexfunc(self.repo.changelog.node(p)))]
+ for p in self._meaningful_parentrevs(ctx)]
return showlist('parent', parents, **args)
def showtags(**args):
- return showlist('tag', self.repo.nodetags(changenode), **args)
+ return showlist('tag', ctx.tags(), **args)
def showextras(**args):
- for key, value in util.sort(changes[5].items()):
+ for key, value in util.sort(ctx.extra().items()):
args = args.copy()
args.update(dict(key=key, value=value))
yield self.t('extra', **args)
@@ -810,10 +794,10 @@
def getfiles():
if not files:
files[:] = self.repo.status(
- log.parents(changenode)[0], changenode)[:3]
+ ctx.parents()[0].node(), ctx.node())[:3]
return files
def showfiles(**args):
- return showlist('file', changes[3], **args)
+ return showlist('file', ctx.files(), **args)
def showmods(**args):
return showlist('file_mod', getfiles()[0], **args)
def showadds(**args):
@@ -822,24 +806,24 @@
return showlist('file_del', getfiles()[2], **args)
def showmanifest(**args):
args = args.copy()
- args.update(dict(rev=self.repo.manifest.rev(changes[0]),
- node=hex(changes[0])))
+ args.update(dict(rev=self.repo.manifest.rev(ctx.changeset()[0]),
+ node=hex(ctx.changeset()[0])))
return self.t('manifest', **args)
defprops = {
- 'author': changes[1],
+ 'author': ctx.user(),
'branches': showbranches,
- 'date': changes[2],
- 'desc': changes[4].strip(),
+ 'date': ctx.date(),
+ 'desc': ctx.description().strip(),
'file_adds': showadds,
'file_dels': showdels,
'file_mods': showmods,
'files': showfiles,
'file_copies': showcopies,
'manifest': showmanifest,
- 'node': hex(changenode),
+ 'node': ctx.hex(),
'parents': showparents,
- 'rev': rev,
+ 'rev': ctx.rev(),
'tags': showtags,
'extras': showextras,
}
@@ -860,7 +844,7 @@
if key:
h = templater.stringify(self.t(key, **props))
if self.buffered:
- self.header[rev] = h
+ self.header[ctx.rev()] = h
else:
self.ui.write(h)
if self.ui.debugflag and 'changeset_debug' in self.t:
@@ -872,7 +856,7 @@
else:
key = 'changeset'
self.ui.write(templater.stringify(self.t(key, **props)))
- self.showpatch(changenode)
+ self.showpatch(ctx)
except KeyError, inst:
raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile,
inst.args[0]))
More information about the Mercurial-devel
mailing list