# HG changeset patch # User Augie Fackler # Date 1337261029 18000 # Node ID 04ded06ea5174f14fc041abd5af363ef212eef40 # Parent b6b1365e3489aa385c11945f67aa2d2e75198286 swig bindings: abort transaction if we can't finalize it This should prevent us from leaking pending transactions on the server. diff --git a/hgsubversion/svnwrap/svn_swig_wrapper.py b/hgsubversion/svnwrap/svn_swig_wrapper.py --- a/hgsubversion/svnwrap/svn_swig_wrapper.py +++ b/hgsubversion/svnwrap/svn_swig_wrapper.py @@ -394,9 +394,15 @@ class SubversionRepo(object): # TODO pass md5(new_text) instead of None editor.close_file(baton, None, pool) - delta.path_driver(editor, edit_baton, base_revision, paths, driver_cb, - self.pool) - editor.close_edit(edit_baton, self.pool) + try: + delta.path_driver(editor, edit_baton, base_revision, paths, driver_cb, + self.pool) + editor.close_edit(edit_baton, self.pool) + except: + # If anything went wrong on the preceding lines, we should + # abort the in-progress transaction. + editor.abort_edit(edit_baton, self.pool) + raise def get_replay(self, revision, editor, oldest_rev_i_have=0): # this method has a tendency to chew through RAM if you don't re-init