Patchwork D1929: bundle2: don't advertise stream bundle2 capability when feature disabled

login
register
mail settings
Submitter phabricator
Date Jan. 21, 2018, 12:45 a.m.
Message ID <differential-rev-PHID-DREV-lt6y2mbg43wquxyoebrc-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/27016/
State Superseded
Headers show

Comments

phabricator - Jan. 21, 2018, 12:45 a.m.
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  The server.uncompressed config option can be used to disable streaming
  clones. While the top-level capability to advertise streaming clone
  support isn't advertised when this option is set, we were still sending
  the bundle2-level capabilities advertising support for stream parts.
  It makes sense to not advertise that support when streaming clones
  are globally disabled.
  
  If the structure of the new code seems a bit odd, it is because we'll
  have to further tweak the behavior in commit(s) ahead.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1929

AFFECTED FILES
  mercurial/bundle2.py
  tests/test-clone-uncompressed.t

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t
--- a/tests/test-clone-uncompressed.t
+++ b/tests/test-clone-uncompressed.t
@@ -102,7 +102,7 @@ 
   Main capabilities:
     batch
     branchmap
-    $USUAL_BUNDLE2_CAPS$%0Astream%3Dv1
+    $USUAL_BUNDLE2_CAPS$
     changegroupsubset
     compression=zstd,zlib
     getbundle
@@ -136,8 +136,6 @@ 
     remote-changegroup
       http
       https
-    stream
-      v1
 
   $ hg clone --stream -U http://localhost:$HGPORT server-disabled
   warning: stream clone requested but server has them disabled
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -1519,8 +1519,20 @@ 
         caps['checkheads'] = ('related',)
     if 'phases' in repo.ui.configlist('devel', 'legacy.exchange'):
         caps.pop('phases')
-    if not repo.ui.configbool('experimental', 'bundle2.stream'):
-        caps.pop('stream')
+
+    # Don't advertise stream clone support in server mode if not configured.
+    if role == 'server':
+        streamsupported = repo.ui.configbool('server', 'uncompressed',
+                                             untrusted=True)
+        featuresupported = repo.ui.configbool('experimental', 'bundle2.stream')
+
+        if not streamsupported or not featuresupported:
+            caps.pop('stream')
+    # role == 'client'
+    else:
+        if not repo.ui.configbool('experimental', 'bundle2.stream'):
+            caps.pop('stream')
+
     return caps
 
 def bundle2caps(remote):