exchange: support streaming clone bundles in clone bundles
Now that we have support for detecting compatible stream clone bundles
in bundle specifications, we can safely add support for applying stream
clone bundles to the clone bundles feature.
--- a/mercurial/exchange.py Sat Oct 17 10:26:34 2015 -0700
+++ b/mercurial/exchange.py Sat Oct 17 11:37:08 2015 -0700
@@ -1832,6 +1832,8 @@
if isinstance(cg, bundle2.unbundle20):
bundle2.processbundle(repo, cg, lambda: tr)
+ elif isinstance(cg, streamclone.streamcloneapplier):
+ cg.apply(repo)
else:
cg.apply(repo, 'clonebundles', url)
tr.close()
--- a/tests/test-clonebundles.t Sat Oct 17 10:26:34 2015 -0700
+++ b/tests/test-clonebundles.t Sat Oct 17 11:37:08 2015 -0700
@@ -273,6 +273,69 @@
no changes found
#endif
+Stream clone bundles are supported
+
+ $ hg -R server debugcreatestreamclonebundle packed.hg
+ writing 613 bytes for 4 files
+ bundle requirements: revlogv1
+
+No bundle spec should work
+
+ $ cat > server/.hg/clonebundles.manifest << EOF
+ > http://localhost:$HGPORT1/packed.hg
+ > EOF
+
+ $ hg clone -U http://localhost:$HGPORT stream-clone-no-spec
+ applying clone bundle from http://localhost:$HGPORT1/packed.hg
+ 4 files to transfer, 613 bytes of data
+ transferred 613 bytes in *.* seconds (*) (glob)
+ finished applying clone bundle
+ searching for changes
+ no changes found
+
+Bundle spec without parameters should work
+
+ $ cat > server/.hg/clonebundles.manifest << EOF
+ > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1
+ > EOF
+
+ $ hg clone -U http://localhost:$HGPORT stream-clone-vanilla-spec
+ applying clone bundle from http://localhost:$HGPORT1/packed.hg
+ 4 files to transfer, 613 bytes of data
+ transferred 613 bytes in *.* seconds (*) (glob)
+ finished applying clone bundle
+ searching for changes
+ no changes found
+
+Bundle spec with format requirements should work
+
+ $ cat > server/.hg/clonebundles.manifest << EOF
+ > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv1
+ > EOF
+
+ $ hg clone -U http://localhost:$HGPORT stream-clone-supported-requirements
+ applying clone bundle from http://localhost:$HGPORT1/packed.hg
+ 4 files to transfer, 613 bytes of data
+ transferred 613 bytes in *.* seconds (*) (glob)
+ finished applying clone bundle
+ searching for changes
+ no changes found
+
+Stream bundle spec with unknown requirements should be filtered out
+
+ $ cat > server/.hg/clonebundles.manifest << EOF
+ > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv42
+ > EOF
+
+ $ hg clone -U http://localhost:$HGPORT stream-clone-unsupported-requirements
+ no compatible clone bundles available on server; falling back to regular clone
+ (you may want to report this to the server operator)
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 2 files
+
Set up manifest for testing preferences
(Remember, the TYPE does not have to match reality - the URL is
important)