remote-bzr: detect local repositories

So we don't create a clone unnecessarily.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Felipe Contreras 2012-11-28 02:01:35 +01:00 committed by Junio C Hamano
parent 570e7ecd4a
commit 073c3ffa58

View file

@ -24,6 +24,7 @@ import bzrlib.plugin
bzrlib.plugin.load_plugins()
import bzrlib.generate_ids
import bzrlib.transport
import sys
import os
@ -613,11 +614,14 @@ def do_export(parser):
if ref == 'refs/heads/master':
repo.generate_revision_history(revid, marks.get_tip('master'))
revno, revid = repo.last_revision_info()
if hasattr(peer, "import_last_revision_info_and_tags"):
peer.import_last_revision_info_and_tags(repo, revno, revid)
if peer:
if hasattr(peer, "import_last_revision_info_and_tags"):
peer.import_last_revision_info_and_tags(repo, revno, revid)
else:
peer.import_last_revision_info(repo.repository, revno, revid)
wt = peer.bzrdir.open_workingtree()
else:
peer.import_last_revision_info(repo.repository, revno, revid)
wt = peer.bzrdir.open_workingtree()
wt = repo.bzrdir.open_workingtree()
wt.update()
print "ok %s" % ref
print
@ -649,24 +653,28 @@ def do_list(parser):
def get_repo(url, alias):
global dirname, peer
clone_path = os.path.join(dirname, 'clone')
origin = bzrlib.bzrdir.BzrDir.open(url)
remote_branch = origin.open_branch()
branch = origin.open_branch()
if os.path.exists(clone_path):
# pull
d = bzrlib.bzrdir.BzrDir.open(clone_path)
branch = d.open_branch()
result = branch.pull(remote_branch, [], None, False)
if not isinstance(origin.transport, bzrlib.transport.local.LocalTransport):
clone_path = os.path.join(dirname, 'clone')
remote_branch = branch
if os.path.exists(clone_path):
# pull
d = bzrlib.bzrdir.BzrDir.open(clone_path)
branch = d.open_branch()
result = branch.pull(remote_branch, [], None, False)
else:
# clone
d = origin.sprout(clone_path, None,
hardlink=True, create_tree_if_local=False,
source_branch=remote_branch)
branch = d.open_branch()
branch.bind(remote_branch)
peer = remote_branch
else:
# clone
d = origin.sprout(clone_path, None,
hardlink=True, create_tree_if_local=False,
source_branch=remote_branch)
branch = d.open_branch()
branch.bind(remote_branch)
peer = remote_branch
peer = None
return branch