The official method is incredibly inefficient and slow. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/remote-helpers/git-remote-bzr | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index 5c25b06..5155b93 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -779,6 +779,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 @@ -819,11 +838,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 -- 1.8.2.1.884.g3532a8d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html