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