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>
This commit is contained in:
parent
3f6e7c0af1
commit
850dd25c9a
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user