Rev 1529: Allow committing write groups less often. in http://people.samba.org/bzr/jelmer/bzr-svn/trunk

Jelmer Vernooij jelmer at samba.org
Sat Aug 2 20:13:41 BST 2008


At http://people.samba.org/bzr/jelmer/bzr-svn/trunk

------------------------------------------------------------
revno: 1529
revision-id: jelmer at samba.org-20080802191340-73p9go8yl8l1690l
parent: jelmer at samba.org-20080802190836-bex4laptt0909aj6
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Sat 2008-08-02 21:13:40 +0200
message:
  Allow committing write groups less often.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
=== modified file 'fetch.py'
--- a/fetch.py	2008-08-02 19:08:36 +0000
+++ b/fetch.py	2008-08-02 19:13:40 +0000
@@ -42,6 +42,8 @@
 from bzrlib.plugins.svn.transport import _url_escape_uri
 from bzrlib.plugins.svn.tree import inventory_add_external
 
+FETCH_COMMIT_WRITE_SIZE = 500
+
 def _escape_commit_message(message):
     """Replace xml-incompatible control characters."""
     if message is None:
@@ -403,7 +405,6 @@
         self.old_inventory = prev_inventory
         self.inventory = prev_inventory.copy()
         super(RevisionBuildEditor, self).__init__(revmeta, mapping)
-        self._start_revision()
 
     def _get_revision(self, revid):
         """Creates the revision object.
@@ -430,9 +431,6 @@
     def _finish_commit(self):
         raise NotImplementedError(self._finish_commit)
 
-    def _start_revision(self):
-        pass
-
     def _rename(self, file_id, parent_id, old_path, new_path, kind):
         assert isinstance(new_path, unicode)
         assert isinstance(parent_id, str)
@@ -470,10 +468,6 @@
 class WeaveRevisionBuildEditor(RevisionBuildEditor):
     """Subversion commit editor that can write to a weave-based repository.
     """
-    def _start_revision(self):
-        self._write_group_active = True
-        self.target.start_write_group()
-
     def _finish_commit(self):
         (rev, signature) = self._get_revision(self.revid)
         self.inventory.revision_id = self.revid
@@ -483,13 +477,6 @@
         self.target.add_revision(self.revid, rev, self.inventory)
         if signature is not None:
             self.target.add_signature_text(self.revid, signature)
-        self.target.commit_write_group()
-        self._write_group_active = False
-
-    def abort(self):
-        if self._write_group_active:
-            self.target.abort_write_group()
-            self._write_group_active = False
 
 
 def get_revision_build_editor(repository):
@@ -656,8 +643,6 @@
                 else:
                     parent_inv = prev_inv
 
-                editor = revbuildklass(self.source, self.target, revid, parent_inv, revmeta)
-
                 if parent_revid == NULL_REVISION:
                     parent_branch = revmeta.branch_path
                     parent_revnum = revmeta.revnum
@@ -667,32 +652,43 @@
                             self.source.lookup_revision_id(parent_revid)
                     start_empty = False
 
+                if not self.target.is_in_write_group():
+                    self.target.start_write_group()
                 try:
-                    conn = None
+                    editor = revbuildklass(self.source, self.target, revid, parent_inv, revmeta)
                     try:
-                        conn = self.source.transport.connections.get(urlutils.join(repos_root, parent_branch))
-
-                        assert revmeta.revnum > parent_revnum or start_empty
-
-                        if parent_branch != revmeta.branch_path:
-                            reporter = conn.do_switch(revmeta.revnum, "", True, 
-                                _url_escape_uri(urlutils.join(repos_root, revmeta.branch_path)), 
-                                editor)
-                        else:
-                            reporter = conn.do_update(revmeta.revnum, "", True, editor)
-
-                        report_inventory_contents(reporter, parent_inv, parent_revnum, start_empty)
-                    finally:
-                        if conn is not None:
-                            if not conn.busy:
-                                self.source.transport.add_connection(conn)
+                        conn = None
+                        try:
+                            conn = self.source.transport.connections.get(urlutils.join(repos_root, parent_branch))
+
+                            assert revmeta.revnum > parent_revnum or start_empty
+
+                            if parent_branch != revmeta.branch_path:
+                                reporter = conn.do_switch(revmeta.revnum, "", True, 
+                                    _url_escape_uri(urlutils.join(repos_root, revmeta.branch_path)), 
+                                    editor)
+                            else:
+                                reporter = conn.do_update(revmeta.revnum, "", True, editor)
+
+                            report_inventory_contents(reporter, parent_inv, parent_revnum, start_empty)
+                        finally:
+                            if conn is not None:
+                                if not conn.busy:
+                                    self.source.transport.add_connection(conn)
+                    except:
+                        editor.abort()
+                        raise
                 except:
-                    editor.abort()
-                    raise
+                    if self.target.is_in_write_group():
+                        self.target.abort_write_group()
+                if num % FETCH_COMMIT_WRITE_SIZE == 0:
+                    self.target.commit_write_group()
 
                 prev_inv = editor.inventory
                 prev_revid = revid
                 num += 1
+            if self.target.is_in_write_group():
+                self.target.commit_write_group()
         finally:
             if nested_pb is not None:
                 nested_pb.finished()




More information about the bazaar-commits mailing list