D5137: streamclone: new server config and some API changes for narrow stream clones
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Oct 17 19:25:54 EDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGaf62936c2508: streamclone: new server config and some API changes for narrow stream clones (authored by pulkit, committed by ).
CHANGED PRIOR TO COMMIT
https://phab.mercurial-scm.org/D5137?vs=12208&id=12227#toc
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5137?vs=12208&id=12227
REVISION DETAIL
https://phab.mercurial-scm.org/D5137
AFFECTED FILES
mercurial/bundle2.py
mercurial/configitems.py
mercurial/streamclone.py
tests/test-narrow-clone-stream.t
CHANGE DETAILS
diff --git a/tests/test-narrow-clone-stream.t b/tests/test-narrow-clone-stream.t
new file mode 100644
--- /dev/null
+++ b/tests/test-narrow-clone-stream.t
@@ -0,0 +1,39 @@
+Tests narrow stream clones
+
+ $ . "$TESTDIR/narrow-library.sh"
+
+Server setup
+
+ $ hg init master
+ $ cd master
+ $ mkdir dir
+ $ mkdir dir/src
+ $ cd dir/src
+ $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
+
+ $ cd ..
+ $ mkdir tests
+ $ cd tests
+ $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
+ $ cd ../../..
+
+Trying to stream clone when the server does not support it
+
+ $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10" --stream
+ streaming all changes
+ remote: abort: server does not support narrow stream clones
+ abort: pull failed on remote
+ [255]
+
+Enable stream clone on the server
+
+ $ echo "[server]" >> master/.hg/hgrc
+ $ echo "stream-narrow-clones=True" >> master/.hg/hgrc
+
+Cloning a specific file when stream clone is supported
+
+ $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10" --stream
+ streaming all changes
+ remote: abort: server does not support narrow stream clones
+ abort: pull failed on remote
+ [255]
diff --git a/mercurial/streamclone.py b/mercurial/streamclone.py
--- a/mercurial/streamclone.py
+++ b/mercurial/streamclone.py
@@ -531,7 +531,7 @@
finally:
fp.close()
-def generatev2(repo):
+def generatev2(repo, includes, excludes):
"""Emit content for version 2 of a streaming clone.
the data stream consists the following entries:
@@ -544,6 +544,10 @@
Returns a 3-tuple of (file count, file size, data iterator).
"""
+ # temporarily raise error until we add storage level logic
+ if includes or excludes:
+ raise error.Abort(_("server does not support narrow stream clones"))
+
with repo.lock():
entries = []
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -610,6 +610,9 @@
coreconfigitem('experimental', 'server.manifestdata.recommended-batch-size',
default=100000,
)
+coreconfigitem('experimental.server', 'stream-narrow-clones',
+ default=False,
+)
coreconfigitem('experimental', 'single-head-per-branch',
default=False,
)
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -1687,7 +1687,18 @@
# to avoid compression to consumers of the bundle.
bundler.prefercompressed = False
- filecount, bytecount, it = streamclone.generatev2(repo)
+ # get the includes and excludes
+ includepats = kwargs.get(r'includepats')
+ excludepats = kwargs.get(r'excludepats')
+
+ narrowstream = repo.ui.configbool('experimental.server',
+ 'stream-narrow-clones')
+
+ if (includepats or excludepats) and not narrowstream:
+ raise error.Abort(_('server does not support narrow stream clones'))
+
+ filecount, bytecount, it = streamclone.generatev2(repo, includepats,
+ excludepats)
requirements = _formatrequirementsspec(repo.requirements)
part = bundler.newpart('stream2', data=it)
part.addparam('bytecount', '%d' % bytecount, mandatory=True)
To: pulkit, durin42, #hg-reviewers, martinvonz
Cc: martinvonz, indygreg, mercurial-devel
More information about the Mercurial-devel
mailing list