Rev 337: Properly finish progress bars when exceptions occur. in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev
Jelmer Vernooij
jelmer at samba.org
Sat Dec 30 17:50:48 GMT 2006
------------------------------------------------------------
revno: 337
revision-id: jelmer at samba.org-20061230174926-kprsbiva815mc835
parent: jelmer at samba.org-20061230174309-9614ukw3mkm0tebf
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Sat 2006-12-30 18:49:26 +0100
message:
Properly finish progress bars when exceptions occur.
modified:
fetch.py fetch.py-20060625004942-x2lfaib8ra707a8p-1
=== modified file 'fetch.py'
--- a/fetch.py 2006-12-30 17:43:09 +0000
+++ b/fetch.py 2006-12-30 17:49:26 +0000
@@ -320,66 +320,67 @@
transport = self.source.transport
pb = ui_factory.nested_progress_bar()
num = 0
- for (branch, revnum, revid) in needed:
- pb.update('copying revision', num, len(needed))
-
- parent_revid = parents[revid]
-
- if parent_revid is None:
- parent_inv = Inventory(ROOT_ID)
- elif prev_revid != parent_revid:
- parent_inv = self.target.get_inventory(parent_revid)
- else:
- parent_inv = prev_inv
-
- changes = self.source._log.get_revision_paths(revnum, branch)
- id_map = self.source.transform_fileid_map(self.source.uuid,
- revnum, branch, changes)
-
- editor = RevisionBuildEditor(self.source, self.target, branch,
- parent_inv, revid,
- self.source._log.get_revision_info(revnum),
- id_map)
-
- pool = Pool()
- edit, edit_baton = svn.delta.make_editor(editor, pool)
-
- if parent_revid is None:
- transport.reparent("%s/%s" % (repos_root, branch))
- reporter, reporter_baton = transport.do_update(
- revnum, "", True, edit, edit_baton, pool)
-
- # Report status of existing paths
- svn.ra.reporter2_invoke_set_path(reporter, reporter_baton,
- "", revnum, True, None, pool)
- else:
- (parent_branch, parent_revnum) = self.source.parse_revision_id(parent_revid)
- transport.reparent("%s/%s" % (repos_root, parent_branch))
-
- if parent_branch != branch:
- switch_url = "%s/%s" % (repos_root, branch)
- reporter, reporter_baton = transport.do_switch(
- revnum, "", True,
- switch_url, edit, edit_baton, pool)
+ try:
+ for (branch, revnum, revid) in needed:
+ pb.update('copying revision', num, len(needed))
+
+ parent_revid = parents[revid]
+
+ if parent_revid is None:
+ parent_inv = Inventory(ROOT_ID)
+ elif prev_revid != parent_revid:
+ parent_inv = self.target.get_inventory(parent_revid)
else:
+ parent_inv = prev_inv
+
+ changes = self.source._log.get_revision_paths(revnum, branch)
+ id_map = self.source.transform_fileid_map(self.source.uuid,
+ revnum, branch, changes)
+
+ editor = RevisionBuildEditor(self.source, self.target, branch,
+ parent_inv, revid,
+ self.source._log.get_revision_info(revnum),
+ id_map)
+
+ pool = Pool()
+ edit, edit_baton = svn.delta.make_editor(editor, pool)
+
+ if parent_revid is None:
+ transport.reparent("%s/%s" % (repos_root, branch))
reporter, reporter_baton = transport.do_update(
- revnum, "", True, edit, edit_baton, pool)
-
- # Report status of existing paths
- svn.ra.reporter2_invoke_set_path(reporter, reporter_baton,
- "", parent_revnum, False, None, pool)
-
- transport.lock()
- svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
- transport.unlock()
-
- prev_inv = editor.inventory
- prev_revid = revid
- pool.destroy()
- num += 1
-
+ revnum, "", True, edit, edit_baton, pool)
+
+ # Report status of existing paths
+ svn.ra.reporter2_invoke_set_path(reporter, reporter_baton,
+ "", revnum, True, None, pool)
+ else:
+ (parent_branch, parent_revnum) = self.source.parse_revision_id(parent_revid)
+ transport.reparent("%s/%s" % (repos_root, parent_branch))
+
+ if parent_branch != branch:
+ switch_url = "%s/%s" % (repos_root, branch)
+ reporter, reporter_baton = transport.do_switch(
+ revnum, "", True,
+ switch_url, edit, edit_baton, pool)
+ else:
+ reporter, reporter_baton = transport.do_update(
+ revnum, "", True, edit, edit_baton, pool)
+
+ # Report status of existing paths
+ svn.ra.reporter2_invoke_set_path(reporter, reporter_baton,
+ "", parent_revnum, False, None, pool)
+
+ transport.lock()
+ svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
+ transport.unlock()
+
+ prev_inv = editor.inventory
+ prev_revid = revid
+ pool.destroy()
+ num += 1
+ finally:
+ pb.finished()
self.source.transport.reparent(repos_root)
- pb.finished()
@needs_write_lock
def fetch(self, revision_id=None, pb=None):
More information about the bazaar-commits
mailing list