mercurial/streamclone.py
changeset 26467 ff2c89239d49
parent 26466 3515db5aae05
child 26468 19bbd53af46d
--- a/mercurial/streamclone.py	Sun Oct 04 11:50:42 2015 -0700
+++ b/mercurial/streamclone.py	Sun Oct 04 18:35:19 2015 -0700
@@ -17,9 +17,13 @@
     util,
 )
 
-def canperformstreamclone(pullop):
+def canperformstreamclone(pullop, bailifbundle2supported=False):
     """Whether it is possible to perform a streaming clone as part of pull.
 
+    ``bailifbundle2supported`` will cause the function to return False if
+    bundle2 stream clones are supported. It should only be called by the
+    legacy stream clone code path.
+
     Returns a tuple of (supported, requirements). ``supported`` is True if
     streaming clone is supported and False otherwise. ``requirements`` is
     a set of repo requirements from the remote, or ``None`` if stream clone
@@ -28,6 +32,21 @@
     repo = pullop.repo
     remote = pullop.remote
 
+    bundle2supported = False
+    if pullop.canusebundle2:
+        if 'v1' in pullop.remotebundle2caps.get('stream', []):
+            bundle2supported = True
+        # else
+            # Server doesn't support bundle2 stream clone or doesn't support
+            # the versions we support. Fall back and possibly allow legacy.
+
+    # Ensures legacy code path uses available bundle2.
+    if bailifbundle2supported and bundle2supported:
+        return False, None
+    # Ensures bundle2 doesn't try to do a stream clone if it isn't supported.
+    #elif not bailifbundle2supported and not bundle2supported:
+    #    return False, None
+
     # Streaming clone only works on empty repositories.
     if len(repo):
         return False, None