D6331: log: add config for making `hg log -G` always topo-sorted
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue May 14 09:59:31 EDT 2019
There used to be a `experimental.graph-group-branches` (that tortoise-hg
still use) that got removed at some point. Did you check the rational
behind the removal ?
If we reintroduce the option, I would be in favor of defining a path to
a non-experimental version of it.
On 5/1/19 7:22 PM, martinvonz (Martin von Zweigbergk) wrote:
> martinvonz created this revision.
> Herald added subscribers: mercurial-devel, mjpieters.
> Herald added a reviewer: hg-reviewers.
>
> REVISION SUMMARY
> I (and everyone else at Google) have an log alias that adds graph mode
> and templating. I have another one that builds on the first and also
> restricts the set of revisions to only show those I'm most likely to
> care about. This second alias also adds topological sorting. I still
> sometimes use the first one. When I do, it very often bothers me that
> it's not topologically sorted (branches are interleaved). This patch
> adds a config option for always using topological sorting with graph
> log.
>
> The revision set is sorted eagerly, which seems like a bad idea, but
> it doesn't seem to make a big difference in the hg repo (150ms). I
> initially tried to instead wrap the user's revset in sort(...,topo),
> but that seemed much harder.
>
> REPOSITORY
> rHG Mercurial
>
> REVISION DETAIL
> https://phab.mercurial-scm.org/D6331
>
> AFFECTED FILES
> mercurial/configitems.py
> mercurial/logcmdutil.py
> tests/test-glog-topological.t
>
> CHANGE DETAILS
>
> diff --git a/tests/test-glog-topological.t b/tests/test-glog-topological.t
> --- a/tests/test-glog-topological.t
> +++ b/tests/test-glog-topological.t
> @@ -114,3 +114,41 @@
> |/
> o 0
>
> +
> +Topological sort can be turned on via config
> +
> + $ cat >> $HGRCPATH << EOF
> + > [experimental]
> + > log.topo=true
> + > EOF
> +
> + $ hg log -G
> + o 8
> + |
> + o 3
> + |
> + o 2
> + |
> + o 1
> + |
> + | o 7
> + | |
> + | o 6
> + | |
> + | o 5
> + | |
> + | o 4
> + |/
> + o 0
Should we disable the topological sorting as soon as --rev is specified?
> +
> +Does not affect non-graph log
> + $ hg log -T '{rev}\n'
> + 8
> + 7
> + 6
> + 5
> + 4
> + 3
> + 2
> + 1
> + 0
> diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py
> --- a/mercurial/logcmdutil.py
> +++ b/mercurial/logcmdutil.py
> @@ -717,6 +717,13 @@
> revs.reverse()
> return revs
>
> +def _maybetoposort(repo, revs, opts):
> + if opts.get('graph') and repo.ui.configbool('experimental', 'log.topo'):
> + revs = dagop.toposort(revs, repo.changelog.parentrevs)
> + # TODO: try to iterate the set lazily
> + revs = revset.baseset(list(revs))
> + return revs
> +
> def getrevs(repo, pats, opts):
> """Return (revs, differ) where revs is a smartset
>
> @@ -727,7 +734,7 @@
> limit = getlimit(opts)
> revs = _initialrevs(repo, opts)
> if not revs:
> - return smartset.baseset(), None
> + return _maybetoposort(repo, smartset.baseset(), opts), None
> match, pats, slowpath = _makematcher(repo, revs, pats, opts)
> filematcher = None
> if follow:
> @@ -756,7 +763,7 @@
>
> differ = changesetdiffer()
> differ._makefilematcher = filematcher
> - return revs, differ
> + return _maybetoposort(repo, revs, opts), differ
>
> def _parselinerangeopt(repo, opts):
> """Parse --line-range log option and return a list of tuples (filename,
> diff --git a/mercurial/configitems.py b/mercurial/configitems.py
> --- a/mercurial/configitems.py
> +++ b/mercurial/configitems.py
> @@ -532,6 +532,9 @@
> coreconfigitem('experimental', 'evolution.track-operation',
> default=True,
> )
> +coreconfigitem('experimental', 'log.topo',
> + default=False,
> +)
> coreconfigitem('experimental', 'maxdeltachainspan',
> default=-1,
> )
>
>
>
> To: martinvonz, #hg-reviewers
> Cc: mjpieters, mercurial-devel
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list