D6331: log: add config for making `hg log -G` always topo-sorted
Yuya Nishihara
yuya at tcha.org
Tue May 14 08:34:34 EDT 2019
> +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
Nit: no need to sort an empty set.
> @@ -756,7 +763,7 @@
>
> differ = changesetdiffer()
> differ._makefilematcher = filematcher
> - return revs, differ
> + return _maybetoposort(repo, revs, opts), differ
Maybe this can be merged with the `if opts.get('graph')` block above.
```
# I think "and opts.get('rev')" can be removed since revs.isdescending()
# would be true if --follow without --rev.
if opts.get('graph'):
if experimental.log.topo:
if not topo yet:
toposort(revs)
elif not (revs.isdescending() or revs.istopo()):
revs.sort(reverse=True)
```
More information about the Mercurial-devel
mailing list