# HG changeset patch # User Pierre-Yves David # Date 2014-03-21 01:44:25 # Node ID 97b2f26dfc43be63ef48f7cdddfb984ecfd462fc # Parent c2a81aa199804e9fa8cc02d95b6ba1b086cff2f4 revpair: smartset compatibility Since recent revset changes, revrange now return a smartset. This smart set probably does not support indexing (_addset does not). This led to crash. Instead when the smartset is ordered we use the `min` and `max` method of smart set. Otherwise we turn is into a list and use indexing on it. The tests have been updated to catch such regression. diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -470,13 +470,26 @@ def revpair(repo, revs): l = revrange(repo, revs) - if len(l) == 0: + if not l: + first = second = None + elif l.isascending(): + first = l.min() + second = l.max() + elif l.isdescending(): + first = l.max() + second = l.min() + else: + l = list(l) + first = l[0] + second = l[-1] + + if first is None: raise util.Abort(_('empty revision range')) - if len(l) == 1 and len(revs) == 1 and _revrangesep not in revs[0]: - return repo.lookup(l[0]), None + if first == second and len(revs) == 1 and _revrangesep not in revs[0]: + return repo.lookup(first), None - return repo.lookup(l[0]), repo.lookup(l[-1]) + return repo.lookup(first), repo.lookup(second) _revrangesep = ':' diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -744,6 +744,43 @@ multiple revspecs 6 7 +test usage in revpair (with "+") + +(real pair) + + $ hg diff -r 'tip^^' -r 'tip' + diff -r 2326846efdab -r 24286f4ae135 .hgtags + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0 + $ hg diff -r 'tip^^::tip' + diff -r 2326846efdab -r 24286f4ae135 .hgtags + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0 + +(single rev) + + $ hg diff -r 'tip^' -r 'tip^' + $ hg diff -r 'tip^::tip^ or tip^' + +(single rev that does not looks like a range) + + $ hg diff -r 'tip^ or tip^' + diff -r d5d0dcbdc4d9 .hgtags + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/.hgtags * (glob) + @@ -0,0 +1,1 @@ + +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0 + +(no rev) + + $ hg diff -r 'author("babar") or author("celeste")' + abort: empty revision range + [255] + aliases: $ echo '[revsetalias]' >> .hg/hgrc