diff options
Diffstat (limited to 'contrib/remote-helpers/git-remote-bzr')
-rwxr-xr-x | contrib/remote-helpers/git-remote-bzr | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index af46016dc9..11f24152bf 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 |