# HG changeset patch # User Matt Mackall # Date 2010-06-30 22:44:36 # Node ID 6b836d5c8c9e770f66b40d2b5fc0f17c104979d1 # Parent ad27428c59ced65cf29f96e063a7a6bc012f7630 revset: make negate work for sort specs diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -111,10 +111,6 @@ def getset(repo, subset, x): # operator methods -def negate(repo, subset, x): - return getset(repo, subset, - ('string', '-' + getstring(x, _("can't negate that")))) - def stringset(repo, subset, x): x = repo[x].rev() if x == -1 and len(subset) == len(repo): @@ -482,7 +478,6 @@ symbols = { } methods = { - "negate": negate, "range": rangeset, "string": stringset, "symbol": symbolset, @@ -515,6 +510,9 @@ def optimize(x, small): return optimize(('range', ('string', '0'), x[1]), small) elif op == 'rangepost': return optimize(('range', x[1], ('string', 'tip')), small) + elif op == 'negate': + return optimize(('string', + '-' + getstring(x[1], _("can't negate that"))), small) elif op in 'string symbol negate': return smallbonus, x # single revisions are small elif op == 'and' or op == 'dagrange': diff --git a/tests/test-revset b/tests/test-revset --- a/tests/test-revset +++ b/tests/test-revset @@ -133,3 +133,4 @@ log 'not 2 and 0:2' log '(1 and 2)::' log '(1 and 2):' log '(1 and 2):3' +log 'sort(head(), -rev)' diff --git a/tests/test-revset.out b/tests/test-revset.out --- a/tests/test-revset.out +++ b/tests/test-revset.out @@ -210,3 +210,13 @@ 1 % log '(1 and 2)::' % log '(1 and 2):' % log '(1 and 2):3' +% log 'sort(head(), -rev)' +9 +7 +6 +5 +4 +3 +2 +1 +0