diff -r c2a81aa19980 -r 97b2f26dfc43 mercurial/scmutil.py --- a/mercurial/scmutil.py Fri Mar 28 16:12:05 2014 -0700 +++ b/mercurial/scmutil.py Thu Mar 20 18:44:25 2014 -0700 @@ -470,13 +470,26 @@ 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 = ':'