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@xxxxxxxxx> --- contrib/remote-helpers/git-remote-bzr | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index 7517645..3c59a18 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -300,7 +300,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() @@ -605,7 +605,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') @@ -706,7 +706,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: @@ -756,7 +756,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: @@ -845,13 +845,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: @@ -861,13 +863,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 -- 1.8.2.1.884.g3532a8d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html