revset: avoid a ValueError when 'only()' is given an empty set
authorMatt Harbison <matt_harbison@yahoo.com>
Fri, 18 Jul 2014 19:46:56 -0400
changeset 21925 7142e04b438e
parent 21924 5375ba75df40
child 21926 6c36dc6cd61a
child 21976 3467cf39aae6
revset: avoid a ValueError when 'only()' is given an empty set This previously died in _revdescendants() taking the min() of the first set to only(), when it was empty. An empty second set already worked. Likewise, descendants() already handled an empty set.
mercurial/revset.py
tests/test-revset.t
--- a/mercurial/revset.py	Tue Jul 15 23:34:13 2014 +0900
+++ b/mercurial/revset.py	Fri Jul 18 19:46:56 2014 -0400
@@ -399,6 +399,9 @@
     args = getargs(x, 1, 2, _('only takes one or two arguments'))
     include = getset(repo, spanset(repo), args[0]).set()
     if len(args) == 1:
+        if len(include) == 0:
+            return baseset([])
+
         descendants = set(_revdescendants(repo, include, False))
         exclude = [rev for rev in cl.headrevs()
             if not rev in descendants and not rev in include]
--- a/tests/test-revset.t	Tue Jul 15 23:34:13 2014 +0900
+++ b/tests/test-revset.t	Fri Jul 18 19:46:56 2014 -0400
@@ -427,6 +427,16 @@
   7
   8
   9
+
+Test empty set input
+  $ log 'only(p2())'
+  $ log 'only(p1(), p2())'
+  0
+  1
+  2
+  4
+  8
+  9
   $ log 'outgoing()'
   8
   9