changeset 26445:f134fb33c906

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.
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 02 Oct 2015 21:39:04 -0700
parents 623743010133
children 3ea10bb761ce
files mercurial/localrepo.py mercurial/streamclone.py
diffstat 2 files changed, 27 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- 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)