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>
maint
Felipe Contreras 2013-05-24 21:24:25 -05:00 committed by Junio C Hamano
parent a8ffc3ade2
commit e56660a73f
1 changed files with 24 additions and 30 deletions

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')