# HG changeset patch
# User Yuya Nishihara <y...@tcha.org>
# Date 1476131409 -7200
#      Mon Oct 10 22:30:09 2016 +0200
# Node ID 4960509763a61ae3710346131f218cf3bf3f3d32
# Parent  30b2ca4bcf3588de9d949b3eefb2669cb6f8a18a
revset: make follow() reject more than one start revisions

Taking only the last revision is inconsistent because ancestors(set) follows
all revisions given, and theoretically follow(startrev=set) == ancestors(set).
I'm planning to add a support for multiple start revisions, but that won't fit
to the 4.0 time frame. So reject multiple revisions now to avoid future BC.

len(revs) might be slow if revs were large, but we don't care since a valid
revs should have only one element.

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -1027,10 +1027,11 @@ def _follow(repo, subset, x, name, follo
         x = getstring(l[0], _("%s expected a pattern") % name)
         rev = None
         if len(l) >= 2:
-            rev = getset(repo, fullreposet(repo), l[1]).last()
-            if rev is None:
+            revs = getset(repo, fullreposet(repo), l[1])
+            if len(revs) != 1:
                 raise error.RepoLookupError(
-                        _("%s: starting revision set cannot be empty") % name)
+                        _("%s expected one starting revision") % name)
+            rev = revs.last()
             c = repo[rev]
         matcher = matchmod.match(repo.root, repo.getcwd(), [x],
                                  ctx=repo[rev], default='path')
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to