[PATCH] graphlog: add revsets support (and convert usual options to revset)
Matt Mackall
mpm at selenic.com
Wed Mar 16 22:21:21 UTC 2011
On Tue, 2011-03-15 at 09:30 +0100, Alexander Solovyov wrote:
> # HG changeset patch
> # User Alexander Solovyov <alexander at solovyov.net>
> # Date 1300028018 -3600
> # Node ID 8f29edb674ab941f03b11d542aeceb71fcbd6de8
> # Parent 595dba23d33780a5f2752a837898861704ef18bf
> graphlog: add revsets support (and convert usual options to revset)
Is this the version of the patch I queued yesterday that actually passes
tests?
> Thanks for the idea and most of the implementation to Klaus Koch
>
> Replaces graphmod.revisions with version which can iterate through arbitrary
> list of revisions instead of strict one by one iteration from start to
> stop. When a gap occurs in a revisions (i.e. in file log or in merge-only
> display), the next topological parent within the revset is searched and the
> connection to it is printed in the ascii graph.
>
> File graph can draw sometimes more connections than previous version, because
> graph is produced according to the revset, not according to a file's filelog.
>
> In case the graph contains several branches where the left parent is null, the
> graphs for each are printed sequentially, not in parallel as it was a case
> earlier (see for example the graph for README in hg-dev).
>
> diff --git a/hgext/graphlog.py b/hgext/graphlog.py
> --- a/hgext/graphlog.py
> +++ b/hgext/graphlog.py
> @@ -12,7 +12,6 @@ commands. When this options is given, an
> revision graph is also shown.
> '''
>
> -import os
> from mercurial.cmdutil import revrange, show_changeset
> from mercurial.commands import templateopts
> from mercurial.i18n import _
> @@ -216,13 +215,46 @@ def get_revs(repo, rev_opt):
> return (len(repo) - 1, 0)
>
> def check_unsupported_flags(opts):
> - for op in ["follow", "follow_first", "date", "copies", "keyword", "remove",
> - "only_merges", "user", "branch", "only_branch", "prune",
> - "newest_first", "no_merges", "include", "exclude"]:
> + for op in ["follow_first", "copies", "newest_first"]:
> if op in opts and opts[op]:
> - raise util.Abort(_("--graph option is incompatible with --%s")
> + raise util.Abort(_("-G/--graph option is incompatible with --%s")
> % op.replace("_", "-"))
>
> +def revset(pats, opts):
> + """Return revset str built of revisions, log options and file patterns.
> + """
> + opt2revset = dict(only_merges='merge',
> + only_branch='branch',
> + no_merges='not merge',
> + include='file',
> + exclude='not file',
> + prune='not follow')
> + revset = []
> + for op, val in opts.iteritems():
> + if not val:
> + continue
> + revop = opt2revset.get(op, op)
> + if op in ('follow', 'only_merges', 'no_merges'):
> + revset.append('%s()' % revop)
> + elif op in ("date", "keyword", "remove", "user", "branch",
> + "only_branch", "prune"):
> + revset.append('%s(%s)' % (op, val))
> + elif op in ('include', 'exclude'):
> + for f in val:
> + revset.append('%s(%r)' % (op, f))
> + elif op == 'rev':
> + revset.extend(val)
> +
> + for path in pats:
> + revset.append('file(%r)' % path)
> +
> + revset = ' and '.join(revset) or 'all()'
> + # we want reverted revset to build graph
> + revset = 'reverse(%s)' % revset
> + if opts['limit']:
> + revset = 'limit(%s, %s)' % (revset, opts['limit'])
> + return revset
> +
> def generate(ui, dag, displayer, showparents, edgefn):
> seen, state = [], asciistate()
> for rev, type, ctx, parents in dag:
> @@ -233,7 +265,7 @@ def generate(ui, dag, displayer, showpar
> ascii(ui, state, type, char, lines, edgefn(seen, rev, parents))
> displayer.close()
>
> -def graphlog(ui, repo, path=None, **opts):
> +def graphlog(ui, repo, *pats, **opts):
> """show revision history alongside an ASCII revision graph
>
> Print a revision history alongside a revision graph drawn with
> @@ -244,19 +276,9 @@ def graphlog(ui, repo, path=None, **opts
> """
>
> check_unsupported_flags(opts)
> - limit = cmdutil.loglimit(opts)
> - start, stop = get_revs(repo, opts["rev"])
> - if start == nullrev:
> - return
>
> - if path:
> - path = util.canonpath(repo.root, os.getcwd(), path)
> - if path: # could be reset in canonpath
> - revdag = graphmod.filerevs(repo, path, start, stop, limit)
> - else:
> - if limit is not None:
> - stop = max(stop, start - limit + 1)
> - revdag = graphmod.revisions(repo, start, stop)
> + revs = revrange(repo, [revset(pats, opts)])
> + revdag = graphmod.revisions(repo, revs)
>
> displayer = show_changeset(ui, repo, opts, buffered=True)
> showparents = [ctx.node() for ctx in repo[None].parents()]
> @@ -319,11 +341,7 @@ def _wrapcmd(ui, cmd, table, wrapfn):
> '''wrap the command'''
> def graph(orig, *args, **kwargs):
> if kwargs['graph']:
> - try:
> - return wrapfn(*args, **kwargs)
> - except TypeError, e:
> - if len(args) > wrapfn.func_code.co_argcount:
> - raise util.Abort(_('--graph option allows at most one file'))
> + return wrapfn(*args, **kwargs)
> return orig(*args, **kwargs)
> entry = extensions.wrapcommand(table, cmd, graph)
> entry[1].append(('G', 'graph', None, _("show the revision DAG")))
> diff --git a/mercurial/graphmod.py b/mercurial/graphmod.py
> --- a/mercurial/graphmod.py
> +++ b/mercurial/graphmod.py
> @@ -21,40 +21,48 @@ from mercurial.node import nullrev
>
> CHANGESET = 'C'
>
> -def revisions(repo, start, stop):
> +def revisions(repo, revs):
> """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
>
> - This generator function walks through the revision history from revision
> - start to revision stop (which must be less than or equal to start). It
> - returns a tuple for each node. The node and parent ids are arbitrary
> - integers which identify a node in the context of the graph returned.
> + This generator function walks through revisions (which should be ordered
> + from bigger to lower). It returns a tuple for each node. The node and parent
> + ids are arbitrary integers which identify a node in the context of the graph
> + returned.
> """
> - cur = start
> - while cur >= stop:
> - ctx = repo[cur]
> - parents = set([p.rev() for p in ctx.parents() if p.rev() != nullrev])
> - yield (cur, CHANGESET, ctx, sorted(parents))
> - cur -= 1
> + if not revs:
> + return []
>
> -def filerevs(repo, path, start, stop, limit=None):
> - """file cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
> + ns = [repo[r].node() for r in revs]
> + revdag = list(nodes(repo, ns))
>
> - This generator function walks through the revision history of a single
> - file from revision start down to revision stop.
> - """
> - filerev = len(repo.file(path)) - 1
> - rev = stop + 1
> - count = 0
> - while filerev >= 0 and rev > stop:
> - fctx = repo.filectx(path, fileid=filerev)
> - parents = set([f.linkrev() for f in fctx.parents() if f.path() == path])
> - rev = fctx.rev()
> - if rev <= start:
> - yield (rev, CHANGESET, fctx.changectx(), sorted(parents))
> - count += 1
> - if count == limit:
> - break
> - filerev -= 1
> + cl = repo.changelog
> + lowestrev = min(revs)
> + gpcache = {}
> + leafs = {}
> +
> + for i, (id, c, ctx, parents) in enumerate(revdag):
> + mpars = [p.rev() for p in ctx.parents() if
> + p.rev() != nullrev and p.rev() not in parents]
> + grandparents = []
> +
> + for mpar in mpars:
> + gp = gpcache.get(mpar) or grandparent(cl, lowestrev, revs, mpar)
> + gpcache[mpar] = gp
> + if gp is None:
> + leafs.setdefault(mpar, []).append((i, ctx))
> + else:
> + grandparents.append(gp)
> +
> + if grandparents:
> + for gp in grandparents:
> + if gp not in revdag[i][3]:
> + revdag[i][3].append(gp)
> +
> + for parent, leafs in leafs.iteritems():
> + for i, ctx in leafs:
> + revdag[i][3].append(parent)
> +
> + return revdag
>
> def nodes(repo, nodes):
> """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
> @@ -120,3 +128,78 @@ def colored(dag):
> # Yield and move on
> yield (cur, type, data, (col, color), edges)
> seen = next
> +
> +
> +def grandparent(cl, lowestrev, roots, head):
> + """Return closest 'root' rev in topological path from 'roots' to 'head'.
> +
> + Derived from revlog.revlog.nodesbetween, but only returns next rev
> + of topologically sorted list of all nodes N that satisfy of these
> + constraints:
> +
> + 1. N is a descendant of some node in 'roots'
> + 2. N is an ancestor of 'head'
> + 3. N is some node in 'roots' or nullrev
> +
> + Every node is considered to be both a descendant and an ancestor
> + of itself, so every reachable node in 'roots' and 'head' will be
> + included in 'nodes'.
> + """
> + ancestors = set()
> + # Start at the top and keep marking parents until we're done.
> + revstotag = set([head])
> + revstotag.discard(nullrev)
> + llowestrev = max(nullrev, lowestrev)
> +
> + while revstotag:
> + r = revstotag.pop()
> + # A node's revision number represents its place in a
> + # topologically sorted list of nodes.
> + if r >= llowestrev:
> + if r not in ancestors:
> + # If we are possibly a descendent of one of the roots
> + # and we haven't already been marked as an ancestor
> + ancestors.add(r) # Mark as ancestor
> + # Add non-nullrev parents to list of nodes to tag.
> + revstotag.update([p for p in cl.parentrevs(r)])
> +
> + if not ancestors:
> + return
> + # Now that we have our set of ancestors, we want to remove any
> + # roots that are not ancestors.
> +
> + # If one of the roots was nullrev, everything is included anyway.
> + if lowestrev > nullrev:
> + # But, since we weren't, let's recompute the lowest rev to not
> + # include roots that aren't ancestors.
> +
> + # Filter out roots that aren't ancestors of heads
> + _roots = ancestors.intersection(roots)
> + if not _roots:
> + return
> + # Recompute the lowest revision
> + lowestrev = min(roots)
> + else:
> + # We are descending from nullrev, and don't need to care about
> + # any other roots.
> + lowestrev = nullrev
> + _roots = [nullrev]
> +
> + # The roots are just the descendants.
> + # Don't start at nullrev since we don't want nullrev in our output list,
> + # and if nullrev shows up in descedents, empty parents will look like
> + # they're descendents.
> + lowestrevisnullrev = (lowestrev == nullrev)
> + for r in xrange(head - 1, max(lowestrev, -1) - 1, -1):
> + if lowestrevisnullrev or r in _roots:
> + pass
> + elif _roots.issuperset(cl.parentrevs(r)):
> + # A node is a descendent if either of its parents are
> + # descendents. (We seeded the dependents list with the roots
> + # up there, remember?)
> + _roots.add(r)
> + else:
> + continue
> + if r in ancestors:
> + # Only include nodes that are both descendents and ancestors.
> + return r
> diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
> --- a/mercurial/hgweb/webcommands.py
> +++ b/mercurial/hgweb/webcommands.py
> @@ -736,7 +736,7 @@ def graph(web, req, tmpl):
> count = len(web.repo)
> changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
>
> - dag = graphmod.revisions(web.repo, rev, downrev)
> + dag = graphmod.revisions(web.repo, range(rev, downrev - 1, -1))
> tree = list(graphmod.colored(dag))
> canvasheight = (len(tree) + 1) * bg_height - 27
> data = []
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -630,7 +630,7 @@ def outgoing(repo, subset, x):
> """
> import hg # avoid start-up nasties
> # i18n: "outgoing" is a keyword
> - l = getargs(x, 0, 1, _("outgoing requires a repository path"))
> + l = getargs(x, 0, 2, _("outgoing requires a repository path"))
> # i18n: "outgoing" is a keyword
> dest = l and getstring(l[0], _("outgoing requires a repository path")) or ''
> dest = repo.ui.expandpath(dest or 'default-push', dest or 'default')
> diff --git a/tests/test-glog.t b/tests/test-glog.t
> --- a/tests/test-glog.t
> +++ b/tests/test-glog.t
> @@ -463,115 +463,115 @@ File glog:
> | | | date: Thu Jan 01 00:00:32 1970 +0000
> | | | summary: (32) expand
> | | |
> - | o | changeset: 31:621d83e11f67
> - | | | parent: 21:d42a756af44d
> - | | | parent: 30:6e11cd4b648f
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:31 1970 +0000
> - | | | summary: (31) expand
> - | | |
> - | o | changeset: 30:6e11cd4b648f
> - | |\ \ parent: 28:44ecd0b9ae99
> - | | | | parent: 29:cd9bb2be7593
> + | o | changeset: 31:621d83e11f67
> + | |\ \ parent: 21:d42a756af44d
> + | | | | parent: 30:6e11cd4b648f
> | | | | user: test
> - | | | | date: Thu Jan 01 00:00:30 1970 +0000
> - | | | | summary: (30) expand
> + | | | | date: Thu Jan 01 00:00:31 1970 +0000
> + | | | | summary: (31) expand
> | | | |
> - | | o | changeset: 29:cd9bb2be7593
> - | | | | parent: 0:e6eb3150255d
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:29 1970 +0000
> - | | | | summary: (29) regular commit
> + | | o | changeset: 30:6e11cd4b648f
> + | | |\ \ parent: 28:44ecd0b9ae99
> + | | | | | parent: 29:cd9bb2be7593
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:30 1970 +0000
> + | | | | | summary: (30) expand
> + | | | | |
> + | | | o | changeset: 29:cd9bb2be7593
> + | | | | | parent: 0:e6eb3150255d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:29 1970 +0000
> + | | | | | summary: (29) regular commit
> + | | | | |
> + | | o | | changeset: 28:44ecd0b9ae99
> + | | |\ \ \ parent: 1:6db2ef61d156
> + | | | | | | parent: 26:7f25b6c2f0b9
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
> + | | | | | | summary: (28) merge zero known
> + | | | | | |
> + o | | | | | changeset: 27:886ed638191b
> + |/ / / / / parent: 21:d42a756af44d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:27 1970 +0000
> + | | | | | summary: (27) collapse
> + | | | | |
> + | | o---+ changeset: 26:7f25b6c2f0b9
> + | | | | | parent: 18:1aa84d96232a
> + | | | | | parent: 25:91da8ed57247
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:26 1970 +0000
> + | | | | | summary: (26) merge one known; far right
> + | | | | |
> + +---o | | changeset: 25:91da8ed57247
> + | | | | | parent: 21:d42a756af44d
> + | | | | | parent: 24:a9c19a3d96b7
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:25 1970 +0000
> + | | | | | summary: (25) merge one known; far left
> + | | | | |
> + | | o | | changeset: 24:a9c19a3d96b7
> + | | |\| | parent: 0:e6eb3150255d
> + | | | | | parent: 23:a01cddf0766d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:24 1970 +0000
> + | | | | | summary: (24) merge one known; immediate right
> + | | | | |
> + | | o | | changeset: 23:a01cddf0766d
> + | |/| | | parent: 1:6db2ef61d156
> + | | | | | parent: 22:e0d9cccacb5d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:23 1970 +0000
> + | | | | | summary: (23) merge one known; immediate left
> + | | | | |
> + +---o---+ changeset: 22:e0d9cccacb5d
> + | | | | parent: 18:1aa84d96232a
> + | | / / parent: 21:d42a756af44d
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:22 1970 +0000
> + | | | | summary: (22) merge two known; one far left, one far right
> | | | |
> - | o | | changeset: 28:44ecd0b9ae99
> - | | | | parent: 1:6db2ef61d156
> - | | | | parent: 26:7f25b6c2f0b9
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:28 1970 +0000
> - | | | | summary: (28) merge zero known
> + o | | | changeset: 21:d42a756af44d
> + |\ \ \ \ parent: 19:31ddc2c1573b
> + | | | | | parent: 20:d30ed6450e32
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:21 1970 +0000
> + | | | | | summary: (21) expand
> + | | | | |
> + | o---+-+ changeset: 20:d30ed6450e32
> + | | | | parent: 0:e6eb3150255d
> + | / / / parent: 18:1aa84d96232a
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:20 1970 +0000
> + | | | | summary: (20) merge two known; two far right
> | | | |
> - o | | | changeset: 27:886ed638191b
> - | | | | parent: 21:d42a756af44d
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:27 1970 +0000
> - | | | | summary: (27) collapse
> + o | | | changeset: 19:31ddc2c1573b
> + |\ \ \ \ parent: 15:1dda3f72782d
> + | | | | | parent: 17:44765d7c06e0
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:19 1970 +0000
> + | | | | | summary: (19) expand
> + | | | | |
> + +---+---o changeset: 18:1aa84d96232a
> + | | | | parent: 1:6db2ef61d156
> + | | | | parent: 15:1dda3f72782d
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:18 1970 +0000
> + | | | | summary: (18) merge two known; two far left
> | | | |
> - | o | | changeset: 26:7f25b6c2f0b9
> - | | | | parent: 18:1aa84d96232a
> - | | | | parent: 25:91da8ed57247
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:26 1970 +0000
> - | | | | summary: (26) merge one known; far right
> - | | | |
> - | o | | changeset: 25:91da8ed57247
> - | | | | parent: 21:d42a756af44d
> - | | | | parent: 24:a9c19a3d96b7
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:25 1970 +0000
> - | | | | summary: (25) merge one known; far left
> - | | | |
> - | o | | changeset: 24:a9c19a3d96b7
> - | | | | parent: 0:e6eb3150255d
> - | | | | parent: 23:a01cddf0766d
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:24 1970 +0000
> - | | | | summary: (24) merge one known; immediate right
> - | | | |
> - | o | | changeset: 23:a01cddf0766d
> - | | | | parent: 1:6db2ef61d156
> - | | | | parent: 22:e0d9cccacb5d
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:23 1970 +0000
> - | | | | summary: (23) merge one known; immediate left
> - | | | |
> - | o | | changeset: 22:e0d9cccacb5d
> - |/ / / parent: 18:1aa84d96232a
> - | | | parent: 21:d42a756af44d
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:22 1970 +0000
> - | | | summary: (22) merge two known; one far left, one far right
> - | | |
> - o | | changeset: 21:d42a756af44d
> - |\ \ \ parent: 19:31ddc2c1573b
> - | | | | parent: 20:d30ed6450e32
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:21 1970 +0000
> - | | | | summary: (21) expand
> - | | | |
> - | o---+ changeset: 20:d30ed6450e32
> - | | | parent: 0:e6eb3150255d
> - | / / parent: 18:1aa84d96232a
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:20 1970 +0000
> - | | | summary: (20) merge two known; two far right
> - | | |
> - o | | changeset: 19:31ddc2c1573b
> - |\ \ \ parent: 15:1dda3f72782d
> - | | | | parent: 17:44765d7c06e0
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:19 1970 +0000
> - | | | | summary: (19) expand
> - | | | |
> - +-----o changeset: 18:1aa84d96232a
> - | | | parent: 1:6db2ef61d156
> - | | | parent: 15:1dda3f72782d
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:18 1970 +0000
> - | | | summary: (18) merge two known; two far left
> - | | |
> - | o | changeset: 17:44765d7c06e0
> - | |\ \ parent: 12:86b91144a6e9
> - | | | | parent: 16:3677d192927d
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:17 1970 +0000
> - | | | | summary: (17) expand
> - | | | |
> - | | o | changeset: 16:3677d192927d
> - | | | | parent: 0:e6eb3150255d
> - | | | | parent: 1:6db2ef61d156
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:16 1970 +0000
> - | | | | summary: (16) merge two known; one immediate right, one near right
> + | o | | changeset: 17:44765d7c06e0
> + | |\ \ \ parent: 12:86b91144a6e9
> + | | | | | parent: 16:3677d192927d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:17 1970 +0000
> + | | | | | summary: (17) expand
> + | | | | |
> + | | o---+ changeset: 16:3677d192927d
> + | | | | | parent: 0:e6eb3150255d
> + | | |/ / parent: 1:6db2ef61d156
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:16 1970 +0000
> + | | | | summary: (16) merge two known; one immediate right, one near right
> | | | |
> o | | | changeset: 15:1dda3f72782d
> |\ \ \ \ parent: 13:22d8966a97e3
> @@ -580,9 +580,9 @@ File glog:
> | | | | | date: Thu Jan 01 00:00:15 1970 +0000
> | | | | | summary: (15) expand
> | | | | |
> - | o | | | changeset: 14:8eac370358ef
> - | |/ / / parent: 0:e6eb3150255d
> - | | | | parent: 12:86b91144a6e9
> + | o-----+ changeset: 14:8eac370358ef
> + | | | | | parent: 0:e6eb3150255d
> + | |/ / / parent: 12:86b91144a6e9
> | | | | user: test
> | | | | date: Thu Jan 01 00:00:14 1970 +0000
> | | | | summary: (14) merge two known; one immediate right, one far right
> @@ -595,72 +595,72 @@ File glog:
> | | | | | summary: (13) expand
> | | | | |
> +---o | | changeset: 12:86b91144a6e9
> - | | / / parent: 1:6db2ef61d156
> + | | |/ / parent: 1:6db2ef61d156
> | | | | parent: 9:7010c0af0a35
> | | | | user: test
> | | | | date: Thu Jan 01 00:00:12 1970 +0000
> | | | | summary: (12) merge two known; one immediate right, one far left
> | | | |
> - | o | | changeset: 11:832d76e6bdf2
> - | | | | parent: 6:b105a072e251
> - | | | | parent: 10:74c64d036d72
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:11 1970 +0000
> - | | | | summary: (11) expand
> + | o | | changeset: 11:832d76e6bdf2
> + | |\ \ \ parent: 6:b105a072e251
> + | | | | | parent: 10:74c64d036d72
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:11 1970 +0000
> + | | | | | summary: (11) expand
> + | | | | |
> + | | o---+ changeset: 10:74c64d036d72
> + | | | | | parent: 0:e6eb3150255d
> + | |/ / / parent: 6:b105a072e251
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:10 1970 +0000
> + | | | | summary: (10) merge two known; one immediate left, one near right
> | | | |
> - | o | | changeset: 10:74c64d036d72
> - | | | | parent: 0:e6eb3150255d
> - | | | | parent: 6:b105a072e251
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:10 1970 +0000
> - | | | | summary: (10) merge two known; one immediate left, one near right
> + o | | | changeset: 9:7010c0af0a35
> + |\ \ \ \ parent: 7:b632bb1b1224
> + | | | | | parent: 8:7a0b11f71937
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:09 1970 +0000
> + | | | | | summary: (9) expand
> + | | | | |
> + | o-----+ changeset: 8:7a0b11f71937
> + | | | | | parent: 0:e6eb3150255d
> + |/ / / / parent: 7:b632bb1b1224
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:08 1970 +0000
> + | | | | summary: (8) merge two known; one immediate left, one far right
> | | | |
> - o | | | changeset: 9:7010c0af0a35
> - | | | | parent: 7:b632bb1b1224
> - | | | | parent: 8:7a0b11f71937
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:09 1970 +0000
> - | | | | summary: (9) expand
> + o | | | changeset: 7:b632bb1b1224
> + |\ \ \ \ parent: 2:3d9a33b8d1e1
> + | | | | | parent: 5:4409d547b708
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:07 1970 +0000
> + | | | | | summary: (7) expand
> + | | | | |
> + +---o | | changeset: 6:b105a072e251
> + | |/ / / parent: 2:3d9a33b8d1e1
> + | | | | parent: 5:4409d547b708
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:06 1970 +0000
> + | | | | summary: (6) merge two known; one immediate left, one far left
> | | | |
> - o | | | changeset: 8:7a0b11f71937
> - | | | | parent: 0:e6eb3150255d
> - | | | | parent: 7:b632bb1b1224
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:08 1970 +0000
> - | | | | summary: (8) merge two known; one immediate left, one far right
> + | o | | changeset: 5:4409d547b708
> + | |\ \ \ parent: 3:27eef8ed80b4
> + | | | | | parent: 4:26a8bac39d9f
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:05 1970 +0000
> + | | | | | summary: (5) expand
> + | | | | |
> + | | o | | changeset: 4:26a8bac39d9f
> + | |/|/ / parent: 1:6db2ef61d156
> + | | | | parent: 3:27eef8ed80b4
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:04 1970 +0000
> + | | | | summary: (4) merge two known; one immediate left, one immediate right
> | | | |
> - o | | | changeset: 7:b632bb1b1224
> - | | | | parent: 2:3d9a33b8d1e1
> - | | | | parent: 5:4409d547b708
> - | | | | user: test
> - | | | | date: Thu Jan 01 00:00:07 1970 +0000
> - | | | | summary: (7) expand
> - | | | |
> - | o | | changeset: 6:b105a072e251
> - |/ / / parent: 2:3d9a33b8d1e1
> - | | | parent: 5:4409d547b708
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:06 1970 +0000
> - | | | summary: (6) merge two known; one immediate left, one far left
> - | | |
> - o | | changeset: 5:4409d547b708
> - | | | parent: 3:27eef8ed80b4
> - | | | parent: 4:26a8bac39d9f
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:05 1970 +0000
> - | | | summary: (5) expand
> - | | |
> - o | | changeset: 4:26a8bac39d9f
> - | | | parent: 1:6db2ef61d156
> - | | | parent: 3:27eef8ed80b4
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:04 1970 +0000
> - | | | summary: (4) merge two known; one immediate left, one immediate right
> - | | |
> - o | | changeset: 3:27eef8ed80b4
> - | | | user: test
> - | | | date: Thu Jan 01 00:00:03 1970 +0000
> - | | | summary: (3) collapse
> + | o | | changeset: 3:27eef8ed80b4
> + |/ / / user: test
> + | | | date: Thu Jan 01 00:00:03 1970 +0000
> + | | | summary: (3) collapse
> | | |
> o | | changeset: 2:3d9a33b8d1e1
> |/ / user: test
> @@ -678,6 +678,439 @@ File glog:
> summary: (0) root
>
>
> +File glog per revset:
> +
> + $ hg glog -r 'file("a")'
> + @ changeset: 34:fea3ac5810e0
> + | tag: tip
> + | parent: 32:d06dffa21a31
> + | user: test
> + | date: Thu Jan 01 00:00:34 1970 +0000
> + | summary: (34) head
> + |
> + | o changeset: 33:68608f5145f9
> + | | parent: 18:1aa84d96232a
> + | | user: test
> + | | date: Thu Jan 01 00:00:33 1970 +0000
> + | | summary: (33) head
> + | |
> + o | changeset: 32:d06dffa21a31
> + |\ \ parent: 27:886ed638191b
> + | | | parent: 31:621d83e11f67
> + | | | user: test
> + | | | date: Thu Jan 01 00:00:32 1970 +0000
> + | | | summary: (32) expand
> + | | |
> + | o | changeset: 31:621d83e11f67
> + | |\ \ parent: 21:d42a756af44d
> + | | | | parent: 30:6e11cd4b648f
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:31 1970 +0000
> + | | | | summary: (31) expand
> + | | | |
> + | | o | changeset: 30:6e11cd4b648f
> + | | |\ \ parent: 28:44ecd0b9ae99
> + | | | | | parent: 29:cd9bb2be7593
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:30 1970 +0000
> + | | | | | summary: (30) expand
> + | | | | |
> + | | | o | changeset: 29:cd9bb2be7593
> + | | | | | parent: 0:e6eb3150255d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:29 1970 +0000
> + | | | | | summary: (29) regular commit
> + | | | | |
> + | | o | | changeset: 28:44ecd0b9ae99
> + | | |\ \ \ parent: 1:6db2ef61d156
> + | | | | | | parent: 26:7f25b6c2f0b9
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
> + | | | | | | summary: (28) merge zero known
> + | | | | | |
> + o | | | | | changeset: 27:886ed638191b
> + |/ / / / / parent: 21:d42a756af44d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:27 1970 +0000
> + | | | | | summary: (27) collapse
> + | | | | |
> + | | o---+ changeset: 26:7f25b6c2f0b9
> + | | | | | parent: 18:1aa84d96232a
> + | | | | | parent: 25:91da8ed57247
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:26 1970 +0000
> + | | | | | summary: (26) merge one known; far right
> + | | | | |
> + +---o | | changeset: 25:91da8ed57247
> + | | | | | parent: 21:d42a756af44d
> + | | | | | parent: 24:a9c19a3d96b7
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:25 1970 +0000
> + | | | | | summary: (25) merge one known; far left
> + | | | | |
> + | | o | | changeset: 24:a9c19a3d96b7
> + | | |\| | parent: 0:e6eb3150255d
> + | | | | | parent: 23:a01cddf0766d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:24 1970 +0000
> + | | | | | summary: (24) merge one known; immediate right
> + | | | | |
> + | | o | | changeset: 23:a01cddf0766d
> + | |/| | | parent: 1:6db2ef61d156
> + | | | | | parent: 22:e0d9cccacb5d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:23 1970 +0000
> + | | | | | summary: (23) merge one known; immediate left
> + | | | | |
> + +---o---+ changeset: 22:e0d9cccacb5d
> + | | | | parent: 18:1aa84d96232a
> + | | / / parent: 21:d42a756af44d
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:22 1970 +0000
> + | | | | summary: (22) merge two known; one far left, one far right
> + | | | |
> + o | | | changeset: 21:d42a756af44d
> + |\ \ \ \ parent: 19:31ddc2c1573b
> + | | | | | parent: 20:d30ed6450e32
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:21 1970 +0000
> + | | | | | summary: (21) expand
> + | | | | |
> + | o---+-+ changeset: 20:d30ed6450e32
> + | | | | parent: 0:e6eb3150255d
> + | / / / parent: 18:1aa84d96232a
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:20 1970 +0000
> + | | | | summary: (20) merge two known; two far right
> + | | | |
> + o | | | changeset: 19:31ddc2c1573b
> + |\ \ \ \ parent: 15:1dda3f72782d
> + | | | | | parent: 17:44765d7c06e0
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:19 1970 +0000
> + | | | | | summary: (19) expand
> + | | | | |
> + +---+---o changeset: 18:1aa84d96232a
> + | | | | parent: 1:6db2ef61d156
> + | | | | parent: 15:1dda3f72782d
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:18 1970 +0000
> + | | | | summary: (18) merge two known; two far left
> + | | | |
> + | o | | changeset: 17:44765d7c06e0
> + | |\ \ \ parent: 12:86b91144a6e9
> + | | | | | parent: 16:3677d192927d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:17 1970 +0000
> + | | | | | summary: (17) expand
> + | | | | |
> + | | o---+ changeset: 16:3677d192927d
> + | | | | | parent: 0:e6eb3150255d
> + | | |/ / parent: 1:6db2ef61d156
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:16 1970 +0000
> + | | | | summary: (16) merge two known; one immediate right, one near right
> + | | | |
> + o | | | changeset: 15:1dda3f72782d
> + |\ \ \ \ parent: 13:22d8966a97e3
> + | | | | | parent: 14:8eac370358ef
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:15 1970 +0000
> + | | | | | summary: (15) expand
> + | | | | |
> + | o-----+ changeset: 14:8eac370358ef
> + | | | | | parent: 0:e6eb3150255d
> + | |/ / / parent: 12:86b91144a6e9
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:14 1970 +0000
> + | | | | summary: (14) merge two known; one immediate right, one far right
> + | | | |
> + o | | | changeset: 13:22d8966a97e3
> + |\ \ \ \ parent: 9:7010c0af0a35
> + | | | | | parent: 11:832d76e6bdf2
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:13 1970 +0000
> + | | | | | summary: (13) expand
> + | | | | |
> + +---o | | changeset: 12:86b91144a6e9
> + | | |/ / parent: 1:6db2ef61d156
> + | | | | parent: 9:7010c0af0a35
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:12 1970 +0000
> + | | | | summary: (12) merge two known; one immediate right, one far left
> + | | | |
> + | o | | changeset: 11:832d76e6bdf2
> + | |\ \ \ parent: 6:b105a072e251
> + | | | | | parent: 10:74c64d036d72
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:11 1970 +0000
> + | | | | | summary: (11) expand
> + | | | | |
> + | | o---+ changeset: 10:74c64d036d72
> + | | | | | parent: 0:e6eb3150255d
> + | |/ / / parent: 6:b105a072e251
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:10 1970 +0000
> + | | | | summary: (10) merge two known; one immediate left, one near right
> + | | | |
> + o | | | changeset: 9:7010c0af0a35
> + |\ \ \ \ parent: 7:b632bb1b1224
> + | | | | | parent: 8:7a0b11f71937
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:09 1970 +0000
> + | | | | | summary: (9) expand
> + | | | | |
> + | o-----+ changeset: 8:7a0b11f71937
> + | | | | | parent: 0:e6eb3150255d
> + |/ / / / parent: 7:b632bb1b1224
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:08 1970 +0000
> + | | | | summary: (8) merge two known; one immediate left, one far right
> + | | | |
> + o | | | changeset: 7:b632bb1b1224
> + |\ \ \ \ parent: 2:3d9a33b8d1e1
> + | | | | | parent: 5:4409d547b708
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:07 1970 +0000
> + | | | | | summary: (7) expand
> + | | | | |
> + +---o | | changeset: 6:b105a072e251
> + | |/ / / parent: 2:3d9a33b8d1e1
> + | | | | parent: 5:4409d547b708
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:06 1970 +0000
> + | | | | summary: (6) merge two known; one immediate left, one far left
> + | | | |
> + | o | | changeset: 5:4409d547b708
> + | |\ \ \ parent: 3:27eef8ed80b4
> + | | | | | parent: 4:26a8bac39d9f
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:05 1970 +0000
> + | | | | | summary: (5) expand
> + | | | | |
> + | | o | | changeset: 4:26a8bac39d9f
> + | |/|/ / parent: 1:6db2ef61d156
> + | | | | parent: 3:27eef8ed80b4
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:04 1970 +0000
> + | | | | summary: (4) merge two known; one immediate left, one immediate right
> + | | | |
> + | o | | changeset: 3:27eef8ed80b4
> + |/ / / user: test
> + | | | date: Thu Jan 01 00:00:03 1970 +0000
> + | | | summary: (3) collapse
> + | | |
> + o | | changeset: 2:3d9a33b8d1e1
> + |/ / user: test
> + | | date: Thu Jan 01 00:00:02 1970 +0000
> + | | summary: (2) collapse
> + | |
> + o | changeset: 1:6db2ef61d156
> + |/ user: test
> + | date: Thu Jan 01 00:00:01 1970 +0000
> + | summary: (1) collapse
> + |
> + o changeset: 0:e6eb3150255d
> + user: test
> + date: Thu Jan 01 00:00:00 1970 +0000
> + summary: (0) root
> +
> +
> +
> +File glog per revset (only merges):
> +
> + $ hg log -G -r 'file("a")' -m
> + o changeset: 32:d06dffa21a31
> + |\ parent: 27:886ed638191b
> + | | parent: 31:621d83e11f67
> + | | user: test
> + | | date: Thu Jan 01 00:00:32 1970 +0000
> + | | summary: (32) expand
> + | |
> + o | changeset: 31:621d83e11f67
> + |\| parent: 21:d42a756af44d
> + | | parent: 30:6e11cd4b648f
> + | | user: test
> + | | date: Thu Jan 01 00:00:31 1970 +0000
> + | | summary: (31) expand
> + | |
> + o | changeset: 30:6e11cd4b648f
> + |\ \ parent: 28:44ecd0b9ae99
> + | | | parent: 29:cd9bb2be7593
> + | | | user: test
> + | | | date: Thu Jan 01 00:00:30 1970 +0000
> + | | | summary: (30) expand
> + | | |
> + o | | changeset: 28:44ecd0b9ae99
> + |\ \ \ parent: 1:6db2ef61d156
> + | | | | parent: 26:7f25b6c2f0b9
> + | | | | user: test
> + | | | | date: Thu Jan 01 00:00:28 1970 +0000
> + | | | | summary: (28) merge zero known
> + | | | |
> + o | | | changeset: 26:7f25b6c2f0b9
> + |\ \ \ \ parent: 18:1aa84d96232a
> + | | | | | parent: 25:91da8ed57247
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:26 1970 +0000
> + | | | | | summary: (26) merge one known; far right
> + | | | | |
> + | o-----+ changeset: 25:91da8ed57247
> + | | | | | parent: 21:d42a756af44d
> + | | | | | parent: 24:a9c19a3d96b7
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:25 1970 +0000
> + | | | | | summary: (25) merge one known; far left
> + | | | | |
> + | o | | | changeset: 24:a9c19a3d96b7
> + | |\ \ \ \ parent: 0:e6eb3150255d
> + | | | | | | parent: 23:a01cddf0766d
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
> + | | | | | | summary: (24) merge one known; immediate right
> + | | | | | |
> + | o---+ | | changeset: 23:a01cddf0766d
> + | | | | | | parent: 1:6db2ef61d156
> + | | | | | | parent: 22:e0d9cccacb5d
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
> + | | | | | | summary: (23) merge one known; immediate left
> + | | | | | |
> + | o-------+ changeset: 22:e0d9cccacb5d
> + | | | | | | parent: 18:1aa84d96232a
> + |/ / / / / parent: 21:d42a756af44d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:22 1970 +0000
> + | | | | | summary: (22) merge two known; one far left, one far right
> + | | | | |
> + | | | | o changeset: 21:d42a756af44d
> + | | | | |\ parent: 19:31ddc2c1573b
> + | | | | | | parent: 20:d30ed6450e32
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
> + | | | | | | summary: (21) expand
> + | | | | | |
> + +-+-------o changeset: 20:d30ed6450e32
> + | | | | | parent: 0:e6eb3150255d
> + | | | | | parent: 18:1aa84d96232a
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:20 1970 +0000
> + | | | | | summary: (20) merge two known; two far right
> + | | | | |
> + | | | | o changeset: 19:31ddc2c1573b
> + | | | | |\ parent: 15:1dda3f72782d
> + | | | | | | parent: 17:44765d7c06e0
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
> + | | | | | | summary: (19) expand
> + | | | | | |
> + o---+---+ | changeset: 18:1aa84d96232a
> + | | | | | parent: 1:6db2ef61d156
> + / / / / / parent: 15:1dda3f72782d
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:18 1970 +0000
> + | | | | | summary: (18) merge two known; two far left
> + | | | | |
> + | | | | o changeset: 17:44765d7c06e0
> + | | | | |\ parent: 12:86b91144a6e9
> + | | | | | | parent: 16:3677d192927d
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
> + | | | | | | summary: (17) expand
> + | | | | | |
> + +-+-------o changeset: 16:3677d192927d
> + | | | | | parent: 0:e6eb3150255d
> + | | | | | parent: 1:6db2ef61d156
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:16 1970 +0000
> + | | | | | summary: (16) merge two known; one immediate right, one near right
> + | | | | |
> + | | | o | changeset: 15:1dda3f72782d
> + | | | |\ \ parent: 13:22d8966a97e3
> + | | | | | | parent: 14:8eac370358ef
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
> + | | | | | | summary: (15) expand
> + | | | | | |
> + +-------o | changeset: 14:8eac370358ef
> + | | | | |/ parent: 0:e6eb3150255d
> + | | | | | parent: 12:86b91144a6e9
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:14 1970 +0000
> + | | | | | summary: (14) merge two known; one immediate right, one far right
> + | | | | |
> + | | | o | changeset: 13:22d8966a97e3
> + | | | |\ \ parent: 9:7010c0af0a35
> + | | | | | | parent: 11:832d76e6bdf2
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
> + | | | | | | summary: (13) expand
> + | | | | | |
> + | +---+---o changeset: 12:86b91144a6e9
> + | | | | | parent: 1:6db2ef61d156
> + | | | | | parent: 9:7010c0af0a35
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:12 1970 +0000
> + | | | | | summary: (12) merge two known; one immediate right, one far left
> + | | | | |
> + | | | | o changeset: 11:832d76e6bdf2
> + | | | | |\ parent: 6:b105a072e251
> + | | | | | | parent: 10:74c64d036d72
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
> + | | | | | | summary: (11) expand
> + | | | | | |
> + +---------o changeset: 10:74c64d036d72
> + | | | | |/ parent: 0:e6eb3150255d
> + | | | | | parent: 6:b105a072e251
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:10 1970 +0000
> + | | | | | summary: (10) merge two known; one immediate left, one near right
> + | | | | |
> + | | | o | changeset: 9:7010c0af0a35
> + | | | |\ \ parent: 7:b632bb1b1224
> + | | | | | | parent: 8:7a0b11f71937
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
> + | | | | | | summary: (9) expand
> + | | | | | |
> + +-------o | changeset: 8:7a0b11f71937
> + | | | |/ / parent: 0:e6eb3150255d
> + | | | | | parent: 7:b632bb1b1224
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:08 1970 +0000
> + | | | | | summary: (8) merge two known; one immediate left, one far right
> + | | | | |
> + | | | o | changeset: 7:b632bb1b1224
> + | | | |\ \ parent: 2:3d9a33b8d1e1
> + | | | | | | parent: 5:4409d547b708
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
> + | | | | | | summary: (7) expand
> + | | | | | |
> + | | | +---o changeset: 6:b105a072e251
> + | | | | |/ parent: 2:3d9a33b8d1e1
> + | | | | | parent: 5:4409d547b708
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:06 1970 +0000
> + | | | | | summary: (6) merge two known; one immediate left, one far left
> + | | | | |
> + | | | o | changeset: 5:4409d547b708
> + | | | |\ \ parent: 3:27eef8ed80b4
> + | | | | | | parent: 4:26a8bac39d9f
> + | | | | | | user: test
> + | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
> + | | | | | | summary: (5) expand
> + | | | | | |
> + | +---o | | changeset: 4:26a8bac39d9f
> + | | | |/ / parent: 1:6db2ef61d156
> + | | | | | parent: 3:27eef8ed80b4
> + | | | | | user: test
> + | | | | | date: Thu Jan 01 00:00:04 1970 +0000
> + | | | | | summary: (4) merge two known; one immediate left, one immediate right
> + | | | | |
> +
> +
> Unused arguments:
> $ hg glog -q foo bar
> hg glog: invalid arguments
> @@ -733,10 +1166,10 @@ File log with revs != cset revs:
> | summary: more
> |
> o changeset: 1:5ac72c0599bf
> - user: test
> - date: Thu Jan 01 00:00:00 1970 +0000
> - summary: two
> -
> + | user: test
> + | date: Thu Jan 01 00:00:00 1970 +0000
> + | summary: two
> + |
>
> Issue1896: File log with explicit style
> $ hg glog --style=default one
> @@ -868,7 +1301,26 @@ File + limit + -ra:b, (b - a) < limit:
> | | | summary: (32) expand
> | | |
>
> +Point out a common and an uncommon unshown parent
> +
> + $ hg glog -r 'rev(8) or rev(9)'
> + o changeset: 9:7010c0af0a35
> + |\ parent: 7:b632bb1b1224
> + | | parent: 8:7a0b11f71937
> + | | user: test
> + | | date: Thu Jan 01 00:00:09 1970 +0000
> + | | summary: (9) expand
> + | |
> + o | changeset: 8:7a0b11f71937
> + |\| parent: 0:e6eb3150255d
> + | | parent: 7:b632bb1b1224
> + | | user: test
> + | | date: Thu Jan 01 00:00:08 1970 +0000
> + | | summary: (8) merge two known; one immediate left, one far right
> + | |
> +
> File + limit + -ra:b, b < tip:
> +
> $ hg glog -l1 -r32:34 a
> o changeset: 34:fea3ac5810e0
> | parent: 32:d06dffa21a31
> @@ -877,7 +1329,33 @@ File + limit + -ra:b, b < tip:
> | summary: (34) head
> |
>
> +file(File) + limit + -ra:b, b < tip:
> +
> + $ hg glog -l1 -r32:34 -r 'file("a")'
> + o changeset: 34:fea3ac5810e0
> + | parent: 32:d06dffa21a31
> + | user: test
> + | date: Thu Jan 01 00:00:34 1970 +0000
> + | summary: (34) head
> + |
> +
> +limit(file(File) and a::b), b < tip:
> +
> + $ hg glog -r 'limit(file("a") and 32::34, 1)'
> + o changeset: 32:d06dffa21a31
> + |\ parent: 27:886ed638191b
> + | | parent: 31:621d83e11f67
> + | | user: test
> + | | date: Thu Jan 01 00:00:32 1970 +0000
> + | | summary: (32) expand
> + | |
> +
> +File + limit + -ra:b, b < tip:
> +
> + $ hg glog -r 'limit(file("a") and 34::32, 1)'
> +
> File + limit + -ra:b, b < tip, (b - a) < limit:
> +
> $ hg glog -l10 -r33:34 a
> o changeset: 34:fea3ac5810e0
> | parent: 32:d06dffa21a31
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list