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:
Felipe Contreras 2013-04-30 20:10:05 -05:00 коммит произвёл Junio C Hamano
Родитель 3f6e7c0af1
Коммит 850dd25c9a
1 изменённых файлов: 20 добавлений и 5 удалений

Просмотреть файл

@ -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