summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2013-05-01 01:10:05 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-05-01 05:06:47 (GMT)
commit850dd25c9a245da0e6b23c36cf9f45d6ee08b237 (patch)
treed533649d864f9abbc9cb788acb68da72226b5694 /contrib
parent3f6e7c0af18b5362d5d7b847d2b92ce38e72e030 (diff)
downloadgit-850dd25c9a245da0e6b23c36cf9f45d6ee08b237.zip
git-850dd25c9a245da0e6b23c36cf9f45d6ee08b237.tar.gz
git-850dd25c9a245da0e6b23c36cf9f45d6ee08b237.tar.bz2
remote-bzr: add custom method to find branches
The official method is incredibly inefficient and slow. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/remote-helpers/git-remote-bzr25
1 files changed, 20 insertions, 5 deletions
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index af46016..11f2415 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -756,6 +756,25 @@ def get_remote_branch(origin, remote_branch, name):
return branch
+def find_branches(repo):
+ transport = repo.user_transport
+
+ for fn in transport.iter_files_recursive():
+ if not fn.endswith('.bzr/branch-format'):
+ continue
+
+ name = subdir = fn[:-len('/.bzr/branch-format')]
+ name = name if name != '' else 'master'
+ name = name.replace('/', '+')
+
+ try:
+ cur = transport.clone(subdir)
+ branch = bzrlib.branch.Branch.open_from_transport(cur)
+ except bzrlib.errors.NotBranchError:
+ continue
+ else:
+ yield name, branch
+
def get_repo(url, alias):
global dirname, peer, branches
@@ -796,11 +815,7 @@ def get_repo(url, alias):
else:
# repository
- for branch in repo.find_branches():
-
- name = repo.user_transport.relpath(branch.base)
- name = name if name != '' else 'master'
- name = name.replace('/', '+')
+ for name, branch in find_branches(repo):
if not is_local:
peers[name] = branch