Rev 316: Try to reduce memory usage further. in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Wed Dec 27 04:22:27 GMT 2006


------------------------------------------------------------
revno: 316
revision-id: jelmer at samba.org-20061227042119-q98xp1i0u725mj4z
parent: jelmer at samba.org-20061227034807-w9dva17y9ao13c2z
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Wed 2006-12-27 05:21:19 +0100
message:
  Try to reduce memory usage further.
  Move mutters about commands sent to server to single place.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  transport.py                   transport.py-20060406231150-b3472d06b3a0818d
  tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
=== modified file 'fetch.py'
--- a/fetch.py	2006-12-27 03:48:07 +0000
+++ b/fetch.py	2006-12-27 04:21:19 +0000
@@ -44,7 +44,7 @@
 class RevisionBuildEditor(svn.delta.Editor):
     def __init__(self, source, target, branch_path, revnum, prev_inventory, revid, svn_revprops, id_map, parent_branch, parent_id_map):
         self.branch_path = branch_path
-        self.inventory = copy(prev_inventory)
+        self.inventory = prev_inventory
         self.revid = revid
         self.revnum = revnum
         self.id_map = id_map
@@ -61,6 +61,8 @@
         self._revprops = {}
         self._svn_revprops = svn_revprops
 
+        self.pool = Pool()
+
     def _get_revision(self, revid):
         if self._parent_ids is None:
             self._parent_ids = ""
@@ -249,6 +251,7 @@
             bzrlib.xml5.serializer_v5.write_inventory_to_string(
                 self.inventory))
         self.target.add_revision(self.revid, rev, self.inventory)
+        self.pool.destroy()
 
     def abort_edit(self):
         pass
@@ -258,7 +261,7 @@
         assert (base_checksum is None or base_checksum == actual_checksum,
             "base checksum mismatch: %r != %r" % (base_checksum, actual_checksum))
         self.file_stream = StringIO()
-        return apply_txdelta_handler(StringIO(self.file_data), self.file_stream)
+        return apply_txdelta_handler(StringIO(self.file_data), self.file_stream, self.pool)
 
 
 class InterSvnRepository(InterRepository):
@@ -350,14 +353,10 @@
                 transport.reparent("%s/%s" % (repos_root, parent_branch))
             if parent_branch != branch:
                 switch_url = "%s/%s" % (repos_root, branch)
-                mutter('svn switch %r:%r -> %r:%r' % 
-                               (parent_branch, parent_revnum, switch_url, revnum))
                 reporter, reporter_baton = transport.do_switch(
                            revnum, "", True, 
                            switch_url, edit, edit_baton, pool)
             else:
-                mutter('svn update -r %r:%r %r' % 
-                               (parent_revnum, revnum, branch))
                 reporter, reporter_baton = transport.do_update(
                            revnum, "", True, edit, edit_baton, pool)
 

=== modified file 'transport.py'
--- a/transport.py	2006-12-26 23:37:35 +0000
+++ b/transport.py	2006-12-27 04:21:19 +0000
@@ -156,9 +156,9 @@
         return svn.ra.get_latest_revnum(self._ra)
 
     @need_lock
-    def do_switch(self, switch_rev, switch_target, *args, **kwargs):
-        mutter('svn switch -r %d %r' % (switch_rev, switch_target))
-        return svn.ra.do_switch(self._ra, switch_rev, switch_target, *args, **kwargs)
+    def do_switch(self, switch_rev, switch_target, recurse, switch_url, *args, **kwargs):
+        mutter('svn switch -r %d %r -> %r' % (switch_rev, switch_target, switch_url))
+        return svn.ra.do_switch(self._ra, switch_rev, switch_target, recurse, switch_url, *args, **kwargs)
 
     @need_lock
     def get_log(self, path, from_revnum, to_revnum, *args, **kwargs):
@@ -224,8 +224,9 @@
             raise
 
     @need_lock
-    def do_update(self, *args, **kwargs):
-        return svn.ra.do_update(self._ra, *args, **kwargs)
+    def do_update(self, revnum, path, *args, **kwargs):
+        mutter('svn update -r %r %r' % (revnum, path))
+        return svn.ra.do_update(self._ra, revnum, path, *args, **kwargs)
 
     @need_lock
     def get_commit_editor(self, *args, **kwargs):

=== modified file 'tree.py'
--- a/tree.py	2006-12-23 19:54:16 +0000
+++ b/tree.py	2006-12-27 04:21:19 +0000
@@ -34,16 +34,14 @@
 import svn.core, svn.wc, svn.delta, svn.ra
 from svn.core import SubversionException, Pool
 
-_global_pool = Pool()
-
-def apply_txdelta_handler(src_stream, target_stream):
+def apply_txdelta_handler(src_stream, target_stream, pool):
     assert hasattr(src_stream, 'read')
     assert hasattr(target_stream, 'write')
     ret = svn.delta.svn_txdelta_apply(
             src_stream, 
             target_stream,
             None,
-            _global_pool)
+            pool)
 
     def wrapper(window):
         svn.delta.invoke_txdelta_window_handler(
@@ -55,6 +53,7 @@
      def __init__(self, repository, revision_id, inventory=None):
         self._repository = repository
         self._revision_id = revision_id
+        pool = Pool()
         if revision_id == NULL_REVISION:
             self._inventory = Inventory(ROOT_ID)
             self._inventory.revision_id = NULL_REVISION
@@ -63,32 +62,34 @@
             self._inventory = Inventory(ROOT_ID)
             self._inventory.revision_id = revision_id
             self.id_map = repository.get_fileid_map(self.revnum, self.branch_path)
-            self.editor = TreeBuildEditor(self)
+            self.editor = TreeBuildEditor(self, pool)
             self.file_data = {}
 
-            editor, baton = svn.delta.make_editor(self.editor)
+            editor, baton = svn.delta.make_editor(self.editor, pool)
 
             root_repos = repository.transport.get_repos_root()
-            mutter('svn checkout -r %r %r' % (self.revnum, self.branch_path))
             reporter, reporter_baton = repository.transport.do_switch(
                     self.revnum, "", True, 
-                    os.path.join(root_repos, self.branch_path), editor, baton)
-
-            svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, "", 0, True, None)
-
-            svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton)
+                    os.path.join(root_repos, self.branch_path), editor, baton, pool)
+
+            svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, "", 0, True, None, pool)
+
+            svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
+
+            pool.destroy()
 
      def get_file_lines(self, file_id):
         return osutils.split_lines(self.file_data[file_id])
 
 
 class TreeBuildEditor(svn.delta.Editor):
-    def __init__(self, tree):
+    def __init__(self, tree, pool):
         self.tree = tree
         self.repository = tree._repository
         self.last_revnum = {}
         self.dir_revnum = {}
         self.dir_ignores = {}
+        self.pool = pool
 
     def set_target_revision(self, revnum):
         self.revnum = revnum
@@ -201,7 +202,7 @@
 
     def apply_textdelta(self, file_id, base_checksum):
         self.file_stream = StringIO()
-        return apply_txdelta_handler(StringIO(""), self.file_stream)
+        return apply_txdelta_handler(StringIO(""), self.file_stream, self.pool)
 
 
 class SvnBasisTree(SvnRevisionTree):




More information about the bazaar-commits mailing list