D6331: log: add config for making `hg log -G` always topo-sorted
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Tue May 14 12:34:55 EDT 2019
martinvonz added a comment.
In https://phab.mercurial-scm.org/D6331#92619, @yuja wrote:
> > +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.
Heh, true. I'l fix that.
>
>
>> @@ -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)
Good idea, that looks much better.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D6331
To: martinvonz, #hg-reviewers
Cc: marmoute, yuja, mjpieters, mercurial-devel
More information about the Mercurial-devel
mailing list