# HG changeset patch # User Yuya Nishihara # Date 2016-06-15 12:26:45 # Node ID 76a1a703e23da67ef7b34e5d24ec5b5b15b3faed # Parent 2d18c61173f17a8c803256645d7935c33bda8718 revset: build dict of extra sort options before evaluating set Prepares for extracting a function that only validates sort options. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -1881,30 +1881,33 @@ def sort(repo, subset, x): raise error.ParseError(_("unknown sort key %r") % fk) keyflags.append((k, reverse)) - s = args['set'] - revs = getset(repo, subset, s) - if len(keyflags) > 1 and any(k == 'topo' for k, reverse in keyflags): # i18n: "topo" is a keyword raise error.ParseError(_( 'topo sort order cannot be combined with other sort keys')) - firstbranch = () + opts = {} if 'topo.firstbranch' in args: if any(k == 'topo' for k, reverse in keyflags): - firstbranch = getset(repo, subset, args['topo.firstbranch']) + opts['topo.firstbranch'] = args['topo.firstbranch'] else: # i18n: "topo" and "topo.firstbranch" are keywords raise error.ParseError(_( 'topo.firstbranch can only be used when using the topo sort ' 'key')) + s = args['set'] + revs = getset(repo, subset, s) + if not keyflags: return revs if len(keyflags) == 1 and keyflags[0][0] == "rev": revs.sort(reverse=keyflags[0][1]) return revs elif keyflags[0][0] == "topo": + firstbranch = () + if 'topo.firstbranch' in opts: + firstbranch = getset(repo, subset, opts['topo.firstbranch']) revs = baseset(_toposort(revs, repo.changelog.parentrevs, firstbranch), istopo=True) if keyflags[0][1]: