Skip to content

Commit

Permalink
remote-bzr: access branches only when needed
Browse files Browse the repository at this point in the history
Bazaar doesn't seem to be tested for multiple usage of branches, so
resources seem to be leaked all over. Let's try to minimize this by
accessing the Branch objects only when needed.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Felipe Contreras authored and Junio C Hamano committed May 1, 2013
1 parent 747c9a3 commit d421c02
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions contrib/remote-helpers/git-remote-bzr
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def export_branch(repo, name):
ref = '%s/heads/%s' % (prefix, name)
tip = marks.get_tip(name)

branch = branches[name]
branch = bzrlib.branch.Branch.open(branches[name])
repo = branch.repository

branch.lock_read()
Expand Down Expand Up @@ -582,7 +582,7 @@ def parse_commit(parser):

if ref.startswith('refs/heads/'):
name = ref[len('refs/heads/'):]
branch = branches[name]
branch = bzrlib.branch.Branch.open(branches[name])
else:
die('unknown ref')

Expand Down Expand Up @@ -683,7 +683,7 @@ def do_export(parser):

for ref, revid in parsed_refs.iteritems():
name = ref[len('refs/heads/'):]
branch = branches[name]
branch = bzrlib.branch.Branch.open(branches[name])
branch.generate_revision_history(revid, marks.get_tip(name))

if name in peers:
Expand Down Expand Up @@ -733,7 +733,7 @@ def do_list(parser):
master_branch = name
print "? refs/heads/%s" % name

branch = branches[master_branch]
branch = bzrlib.branch.Branch.open(branches[master_branch])
branch.lock_read()
for tag, revid in branch.tags.get_tag_dict().items():
try:
Expand Down Expand Up @@ -822,13 +822,15 @@ def get_repo(url, alias):
# branch

name = 'master'
branch = origin.open_branch()
remote_branch = origin.open_branch()

if not is_local:
peers[name] = branch.base
branches[name] = get_remote_branch(origin, branch, name)
peers[name] = remote_branch.base
branch = get_remote_branch(origin, remote_branch, name)
else:
branches[name] = branch
branch = remote_branch

branches[name] = branch.base

return branch.repository
else:
Expand All @@ -838,13 +840,15 @@ def get_repo(url, alias):
# stupid python
wanted = [e for e in wanted if e]

for name, branch in find_branches(repo, wanted):
for name, remote_branch in find_branches(repo, wanted):

if not is_local:
peers[name] = branch.base
branches[name] = get_remote_branch(origin, branch, name)
peers[name] = remote_branch.base
branch = get_remote_branch(origin, remote_branch, name)
else:
branches[name] = branch
branch = remote_branch

branches[name] = branch.base

return repo

Expand Down

0 comments on commit d421c02

Please sign in to comment.