--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -758,14 +758,8 @@ class changeset_printer(object):
hexfunc = self.ui.debugflag and hex or short
- parents = log.parentrevs(rev)
- if not self.ui.debugflag:
- if parents[1] == nullrev:
- if parents[0] >= rev - 1:
- parents = []
- else:
- parents = [parents[0]]
- parents = [(p, hexfunc(log.node(p))) for p in parents]
+ parents = [(p, hexfunc(log.node(p)))
+ for p in self._meaningful_parentrevs(log, rev)]
self.ui.write(_("changeset: %d:%s\n") % (rev, hexfunc(changenode)))
@@ -823,6 +817,22 @@ class changeset_printer(object):
opts=patch.diffopts(self.ui))
self.ui.write("\n")
+ def _meaningful_parentrevs(self, log, rev):
+ """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)
+ if not self.ui.debugflag and parents[1] == nullrev:
+ if parents[0] >= rev - 1:
+ parents = []
+ else:
+ parents = [parents[0]]
+ return parents
+
+
class changeset_templater(changeset_printer):
'''format changeset information.'''
@@ -919,12 +929,8 @@ class changeset_templater(changeset_prin
return showlist('branch', [branch], plural='branches', **args)
def showparents(**args):
- parents = [[('rev', log.rev(p)), ('node', hex(p))]
- for p in log.parents(changenode)
- if self.ui.debugflag or p != nullid]
- if (not self.ui.debugflag and len(parents) == 1 and
- parents[0][0][1] == rev - 1):
- return
+ parents = [[('rev', p), ('node', hex(log.node(p)))]
+ for p in self._meaningful_parentrevs(log, rev)]
return showlist('parent', parents, **args)
def showtags(**args):
@@ -966,7 +972,7 @@ class changeset_templater(changeset_prin
'author': changes[1],
'branches': showbranches,
'date': changes[2],
- 'desc': changes[4],
+ 'desc': changes[4].strip(),
'file_adds': showadds,
'file_dels': showdels,
'files': showfiles,