From c95c35f4b8908fcda713c09eba4e55aac2c39be6 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 30 Apr 2013 20:10:03 -0500 Subject: [PATCH] remote-bzr: add support for shared repo This way all the remotes share the same data, so adding multiple remotes, or renaming them doesn't create extra overhead. Signed-off-by: Felipe Contreras Signed-off-by: Junio C Hamano --- contrib/remote-helpers/git-remote-bzr | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index 38cec07ed8..9fe830e3cd 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -752,7 +752,20 @@ def get_repo(url, alias): origin = bzrlib.bzrdir.BzrDir.open(url) is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport) - clone_path = os.path.join(dirname, 'clone') + shared_path = os.path.join(gitdir, 'bzr') + try: + shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path) + except bzrlib.errors.NotBranchError: + shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path) + try: + shared_repo = shared_dir.open_repository() + except bzrlib.errors.NoRepositoryPresent: + shared_repo = shared_dir.create_repository(shared=True) + + if not is_local: + clone_path = os.path.join(dirname, 'clone') + if not os.path.exists(clone_path): + os.mkdir(clone_path) try: repo = origin.open_repository() @@ -763,8 +776,6 @@ def get_repo(url, alias): branch = origin.open_branch() if not is_local: - if not os.path.exists(clone_path): - os.mkdir(clone_path) peers[name] = branch branches[name] = get_remote_branch(origin, branch, name) else: @@ -774,9 +785,6 @@ def get_repo(url, alias): else: # repository - if not is_local and not os.path.exists(clone_path): - clonedir = bzrlib.bzrdir.BzrDir.create(clone_path) - for branch in repo.find_branches(): name = repo.user_transport.relpath(branch.base) @@ -800,7 +808,7 @@ def fix_path(alias, orig_url): subprocess.call(cmd) def main(args): - global marks, prefix, dirname + global marks, prefix, gitdir, dirname global tags, filenodes global blob_marks global parsed_refs -- 2.11.4.GIT