comparison mercurial/bundlerepo.py @ 12734:5dfd1c49dcc5

bundlerepo: unify common code into a new getremotechanges The pattern where we fetch incoming remote changes and return them as a local bundlerepo seems common. It's nicer to have this code unified.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Thu, 14 Oct 2010 22:41:43 +0200
parents 6277a9469dff
children ad63e5f834e1
comparison
equal deleted inserted replaced
12733:098dfb2b7596 12734:5dfd1c49dcc5
12 """ 12 """
13 13
14 from node import nullid 14 from node import nullid
15 from i18n import _ 15 from i18n import _
16 import os, struct, tempfile, shutil 16 import os, struct, tempfile, shutil
17 import changegroup, util, mdiff 17 import changegroup, util, mdiff, discovery
18 import localrepo, changelog, manifest, filelog, revlog, error 18 import localrepo, changelog, manifest, filelog, revlog, error
19 19
20 class bundlerevlog(revlog.revlog): 20 class bundlerevlog(revlog.revlog):
21 def __init__(self, opener, indexfile, bundle, 21 def __init__(self, opener, indexfile, bundle,
22 linkmapper=None): 22 linkmapper=None):
286 else: 286 else:
287 repopath, bundlename = s 287 repopath, bundlename = s
288 else: 288 else:
289 repopath, bundlename = parentpath, path 289 repopath, bundlename = parentpath, path
290 return bundlerepository(ui, repopath, bundlename) 290 return bundlerepository(ui, repopath, bundlename)
291
292 def getremotechanges(ui, repo, other, revs=None, bundlename=None, force=False):
293 tmp = discovery.findcommonincoming(repo, other, heads=revs, force=force)
294 common, incoming, rheads = tmp
295 if not incoming:
296 try:
297 os.unlink(bundlename)
298 except:
299 pass
300 return other, None, None
301
302 bundle = None
303 if bundlename or not other.local():
304 # create a bundle (uncompressed if other repo is not local)
305
306 if revs is None and other.capable('changegroupsubset'):
307 revs = rheads
308
309 if revs is None:
310 cg = other.changegroup(incoming, "incoming")
311 else:
312 cg = other.changegroupsubset(incoming, revs, 'incoming')
313 bundletype = other.local() and "HG10BZ" or "HG10UN"
314 fname = bundle = changegroup.writebundle(cg, bundlename, bundletype)
315 # keep written bundle?
316 if bundlename:
317 bundle = None
318 if not other.local():
319 # use the created uncompressed bundlerepo
320 other = bundlerepository(ui, repo.root, fname)
321 return (other, incoming, bundle)
322