D6331: log: add config for making `hg log -G` always topo-sorted

yuja (Yuya Nishihara) phabricator at mercurial-scm.org
Tue May 14 08:35:49 EDT 2019


yuja added a comment.


  > +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)

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6331

To: martinvonz, #hg-reviewers
Cc: yuja, mjpieters, mercurial-devel


More information about the Mercurial-devel mailing list