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:
parent
a8ffc3ade2
commit
e56660a73f
@ -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')
|
||||||
|
Loading…
Reference in New Issue
Block a user