remote-bzr: reorganize the way 'wanted' works

If the user specified a list of branches, we ignore what the remote
repository lists, and simply use the branches directly. Since some
remotes don't report the branches correctly, this is useful.

Otherwise either fetch the repo, or the branch.

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-05-24 21:24:25 -05:00 committed by Junio C Hamano
parent a8ffc3ade2
commit e56660a73f

View File

@ -795,7 +795,7 @@ def get_remote_branch(name):
return branch return branch
def find_branches(repo, wanted): def find_branches(repo):
transport = repo.bzrdir.root_transport transport = repo.bzrdir.root_transport
for fn in transport.iter_files_recursive(): for fn in transport.iter_files_recursive():
@ -806,9 +806,6 @@ def find_branches(repo, wanted):
name = name if name != '' else 'master' name = name if name != '' else 'master'
name = name.replace('/', '+') name = name.replace('/', '+')
if wanted and not name in wanted:
continue
try: try:
cur = transport.clone(subdir) cur = transport.clone(subdir)
branch = bzrlib.branch.Branch.open_from_transport(cur) branch = bzrlib.branch.Branch.open_from_transport(cur)
@ -848,38 +845,35 @@ def get_repo(url, alias):
except bzrlib.errors.NoRepositoryPresent: except bzrlib.errors.NoRepositoryPresent:
pass pass
try: wanted = get_config('remote-bzr.branches').rstrip().split(', ')
repo = origin.open_repository() # stupid python
if not repo.user_transport.listable(): wanted = [e for e in wanted if e]
# this repository is not usable for us
raise bzrlib.errors.NoRepositoryPresent(repo.bzrdir)
except bzrlib.errors.NoRepositoryPresent:
# branch
name = 'master' if not wanted:
branch = origin.open_branch().base try:
repo = origin.open_repository()
if not repo.user_transport.listable():
# this repository is not usable for us
raise bzrlib.errors.NoRepositoryPresent(repo.bzrdir)
except bzrlib.errors.NoRepositoryPresent:
wanted = ['master']
if not is_local: if wanted:
peers[name] = branch def list_wanted(url, wanted):
for name in wanted:
subdir = name if name != 'master' else ''
yield name, bzrlib.urlutils.join(url, subdir)
branches[name] = branch branch_list = list_wanted(url, wanted)
return origin
else: else:
# repository branch_list = find_branches(repo)
wanted = get_config('remote-bzr.branches').rstrip().split(', ') for name, url in branch_list:
# stupid python if not is_local:
wanted = [e for e in wanted if e] peers[name] = url
branches[name] = url
for name, branch in find_branches(repo, wanted): return origin
if not is_local:
peers[name] = branch
branches[name] = branch
return origin
def fix_path(alias, orig_url): def fix_path(alias, orig_url):
url = urlparse.urlparse(orig_url, 'file') url = urlparse.urlparse(orig_url, 'file')