D1929: bundle2: don't advertise stream bundle2 capability when feature disabled
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sun Jan 21 00:45:59 UTC 2018
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
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):
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list