# HG changeset patch # User Gregory Szorc # Date 1443847144 25200 # Node ID f134fb33c906354663ff301da5b680157ab267c0 # Parent 623743010133fab1c57b2e551007b9475c6454e9 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. diff -r 623743010133 -r f134fb33c906 mercurial/localrepo.py --- 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') diff -r 623743010133 -r f134fb33c906 mercurial/streamclone.py --- 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)