diff -r 85b992177d2a -r 56527b886d1d mercurial/localrepo.py --- a/mercurial/localrepo.py Fri Oct 02 15:36:00 2015 -0700 +++ b/mercurial/localrepo.py Fri Oct 02 15:51:32 2015 -0700 @@ -19,6 +19,7 @@ import weakref, errno, os, time, inspect, random import branchmap, pathutil import namespaces +import streamclone propertycache = util.propertycache filecache = scmutil.filecache @@ -1808,60 +1809,9 @@ elif resp != 0: raise util.Abort(_('the server sent an unknown error code')) - self.applystreamclone(remotereqs, rbranchmap, fp) + streamclone.applyremotedata(self, remotereqs, rbranchmap, fp) return len(self.heads()) + 1 - def applystreamclone(self, remotereqs, remotebranchmap, fp): - """Apply stream clone data to this repository. - - "remotereqs" is a set of requirements to handle the incoming data. - "remotebranchmap" is the result of a branchmap lookup on the remote. It - can be None. - "fp" is a file object containing the raw stream data, suitable for - feeding into exchange.consumestreamclone. - """ - lock = self.lock() - try: - exchange.consumestreamclone(self, fp) - - # new requirements = old non-format requirements + - # new format-related remote requirements - # requirements from the streamed-in repository - self.requirements = remotereqs | ( - self.requirements - self.supportedformats) - self._applyopenerreqs() - self._writerequirements() - - if remotebranchmap: - rbheads = [] - closed = [] - for bheads in remotebranchmap.itervalues(): - rbheads.extend(bheads) - for h in bheads: - r = self.changelog.rev(h) - b, c = self.changelog.branchinfo(r) - if c: - closed.append(h) - - if rbheads: - rtiprev = max((int(self.changelog.rev(node)) - for node in rbheads)) - cache = branchmap.branchcache(remotebranchmap, - self[rtiprev].node(), - rtiprev, - closednodes=closed) - # Try to stick it as low as possible - # filter above served are unlikely to be fetch from a clone - for candidate in ('base', 'immutable', 'served'): - rview = self.filtered(candidate) - if cache.validfor(rview): - self._branchcaches[candidate] = cache - cache.write(rview) - break - self.invalidate() - finally: - lock.release() - def clone(self, remote, heads=[], stream=None): '''clone remote repository.