streamclone: move streaming clone logic from localrepo
This is the last remnants of streaming clone code in localrepo.py.
This is a mostly mechanical transplant of code to a new file. Only a
rewrite of "self" to "repo" was performed. The code will be
significantly refactored in upcoming patches. So don't scrutinize it too
closely.
--- a/mercurial/localrepo.py Fri Oct 02 16:24:56 2015 -0700
+++ b/mercurial/localrepo.py Fri Oct 02 21:39:04 2015 -0700
@@ -1794,31 +1794,7 @@
keyword arguments:
heads: list of revs to clone (forces use of pull)
stream: use streaming clone if possible'''
-
- # now, all clients that can request uncompressed clones can
- # read repo formats supported by all servers that can serve
- # them.
-
- # if revlog format changes, client will have to check version
- # and format flags on "stream" capability, and use
- # uncompressed only if compatible.
-
- if stream is None:
- # if the server explicitly prefers to stream (for fast LANs)
- stream = remote.capable('stream-preferred')
-
- if stream and not heads:
- # 'stream' means remote revlog format is revlogv1 only
- if remote.capable('stream'):
- streamclone.streamin(self, remote, set(('revlogv1',)))
- else:
- # otherwise, 'streamreqs' contains the remote revlog format
- streamreqs = remote.capable('streamreqs')
- if streamreqs:
- streamreqs = set(streamreqs.split(','))
- # if we support it, stream in and adjust our requirements
- if not streamreqs - self.supportedformats:
- streamclone.streamin(self, remote, streamreqs)
+ streamclone.maybeperformstreamclone(self, remote, heads, stream)
# internal config: ui.quietbookmarkmove
quiet = self.ui.backupconfig('ui', 'quietbookmarkmove')
--- a/mercurial/streamclone.py Fri Oct 02 16:24:56 2015 -0700
+++ b/mercurial/streamclone.py Fri Oct 02 21:39:04 2015 -0700
@@ -17,6 +17,32 @@
util,
)
+def maybeperformstreamclone(repo, remote, heads, stream):
+ # now, all clients that can request uncompressed clones can
+ # read repo formats supported by all servers that can serve
+ # them.
+
+ # if revlog format changes, client will have to check version
+ # and format flags on "stream" capability, and use
+ # uncompressed only if compatible.
+
+ if stream is None:
+ # if the server explicitly prefers to stream (for fast LANs)
+ stream = remote.capable('stream-preferred')
+
+ if stream and not heads:
+ # 'stream' means remote revlog format is revlogv1 only
+ if remote.capable('stream'):
+ streamin(repo, remote, set(('revlogv1',)))
+ else:
+ # otherwise, 'streamreqs' contains the remote revlog format
+ streamreqs = remote.capable('streamreqs')
+ if streamreqs:
+ streamreqs = set(streamreqs.split(','))
+ # if we support it, stream in and adjust our requirements
+ if not streamreqs - repo.supportedformats:
+ streamin(repo, remote, streamreqs)
+
def allowservergeneration(ui):
"""Whether streaming clones are allowed from the server."""
return ui.configbool('server', 'uncompressed', True, untrusted=True)