@@ -1487,6 +1487,7 @@ capabilities = {'HG20': (),
'remote-changegroup': ('http', 'https'),
'hgtagsfnodes': (),
'phases': ('heads',),
+ 'stream': ('v2',),
}
def getrepocaps(repo, allowpushback=False):
@@ -1507,6 +1508,8 @@ def getrepocaps(repo, allowpushback=Fals
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')
return caps
def bundle2caps(remote):
@@ -428,6 +428,9 @@ coreconfigitem('experimental', 'bundle2-
coreconfigitem('experimental', 'bundle2.pushback',
default=False,
)
+coreconfigitem('experimental', 'bundle2.stream',
+ default=False,
+)
coreconfigitem('experimental', 'bundle2lazylocking',
default=False,
)
@@ -1455,13 +1455,18 @@ def _pullbundle2(pullop):
# At the moment we don't do stream clones over bundle2. If that is
# implemented then here's where the check for that will go.
- streaming = False
+ streaming = streamclone.canperformstreamclone(pullop, bundle2=True)[0]
# declare pull perimeters
kwargs['common'] = pullop.common
kwargs['heads'] = pullop.heads or pullop.rheads
- if True:
+ if streaming:
+ kwargs['cg'] = False
+ kwargs['stream'] = True
+ pullop.stepsdone.add('changegroup')
+
+ else:
# pulling changegroup
pullop.stepsdone.add('changegroup')
@@ -1,5 +1,14 @@
#require serve
+#testcases stream-legacy stream-bundle2
+
+#if stream-bundle2
+ $ cat << EOF >> $HGRCPATH
+ > [experimental]
+ > bundle2.stream = yes
+ > EOF
+#endif
+
Initialize repository
the status call is to check for issue5130
@@ -18,24 +27,41 @@ the status call is to check for issue513
Basic clone
+#if stream-legacy
$ hg clone --stream -U http://localhost:$HGPORT clone1
streaming all changes
1027 files to transfer, 96.3 KB of data
transferred 96.3 KB in * seconds (*/sec) (glob)
searching for changes
no changes found
+#endif
+#if stream-bundle2
+ $ hg clone --stream -U http://localhost:$HGPORT clone1
+ streaming all changes
+ 1027 files to transfer, 96.3 KB of data
+ transferred 96.3 KB in * seconds (* */sec) (glob)
+#endif
--uncompressed is an alias to --stream
+#if stream-legacy
$ hg clone --uncompressed -U http://localhost:$HGPORT clone1-uncompressed
streaming all changes
1027 files to transfer, 96.3 KB of data
transferred 96.3 KB in * seconds (*/sec) (glob)
searching for changes
no changes found
+#endif
+#if stream-bundle2
+ $ hg clone --uncompressed -U http://localhost:$HGPORT clone1-uncompressed
+ streaming all changes
+ 1027 files to transfer, 96.3 KB of data
+ transferred 96.3 KB in * seconds (* */sec) (glob)
+#endif
Clone with background file closing enabled
+#if stream-legacy
$ hg --debug --config worker.backgroundclose=true --config worker.backgroundcloseminfilecount=1 clone --stream -U http://localhost:$HGPORT clone-background | grep -v adding
using http://localhost:$HGPORT/
sending capabilities command
@@ -57,6 +83,28 @@ Clone with background file closing enabl
bundle2-input-part: total payload size 24
bundle2-input-bundle: 1 parts total
checking for updated bookmarks
+#endif
+#if stream-bundle2
+ $ hg --debug --config worker.backgroundclose=true --config worker.backgroundcloseminfilecount=1 clone --stream -U http://localhost:$HGPORT clone-background | grep -v adding
+ using http://localhost:$HGPORT/
+ sending capabilities command
+ query 1; heads
+ sending batch command
+ streaming all changes
+ sending getbundle command
+ bundle2-input-bundle: with-transaction
+ bundle2-input-part: "stream" (params: 4 mandatory) supported
+ applying stream bundle
+ 1027 files to transfer, 96.3 KB of data
+ starting 4 threads for background file closing
+ transferred 96.3 KB in * seconds (* */sec) (glob)
+ bundle2-input-part: total payload size 110887
+ bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+ bundle2-input-part: "phase-heads" supported
+ bundle2-input-part: total payload size 24
+ bundle2-input-bundle: 2 parts total
+ checking for updated bookmarks
+#endif
Cannot stream clone when there are secret changesets
@@ -79,12 +127,20 @@ Streaming of secrets can be overridden b
$ cat hg.pid > $DAEMON_PIDS
$ cd ..
+#if stream-legacy
$ hg clone --stream -U http://localhost:$HGPORT secret-allowed
streaming all changes
1027 files to transfer, 96.3 KB of data
transferred 96.3 KB in * seconds (*/sec) (glob)
searching for changes
no changes found
+#endif
+#if stream-bundle2
+ $ hg clone --stream -U http://localhost:$HGPORT secret-allowed
+ streaming all changes
+ 1027 files to transfer, 96.3 KB of data
+ transferred 96.3 KB in * seconds (* */sec) (glob)
+#endif
$ killdaemons.py
@@ -186,6 +242,7 @@ add a bookmark
clone it
+#if stream-legacy
$ hg clone --stream http://localhost:$HGPORT with-bookmarks
streaming all changes
1027 files to transfer, 96.3 KB of data
@@ -194,5 +251,14 @@ clone it
no changes found
updating to branch default
1025 files updated, 0 files merged, 0 files removed, 0 files unresolved
+#endif
+#if stream-bundle2
+ $ hg clone --stream http://localhost:$HGPORT with-bookmarks
+ streaming all changes
+ 1027 files to transfer, 96.3 KB of data
+ transferred 96.3 KB in * seconds (* */sec) (glob)
+ updating to branch default
+ 1025 files updated, 0 files merged, 0 files removed, 0 files unresolved
+#endif
$ hg -R with-bookmarks bookmarks
some-bookmark 1:c17445101a72