Rev 1442: Use a knit as backend for the parent map. in http://people.samba.org/bzr/jelmer/bzr-svn/trunk

Jelmer Vernooij jelmer at samba.org
Fri Jul 4 21:03:59 BST 2008


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

------------------------------------------------------------
revno: 1442
revision-id: jelmer at samba.org-20080704200357-mdranmil2c1vcx63
parent: jelmer at samba.org-20080704121257-ob2mas8a521ngmf9
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Fri 2008-07-04 22:03:57 +0200
message:
  Use a knit as backend for the parent map.
modified:
  parents.py                     parents.py-20080505192113-5rcif033d6wcam9w-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
=== modified file 'parents.py'
--- a/parents.py	2008-06-06 17:19:53 +0000
+++ b/parents.py	2008-07-04 20:03:57 +0000
@@ -13,11 +13,15 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from bzrlib.plugins.svn.cache import CacheTable
+from bzrlib import debug, errors
+from bzrlib.knit import make_file_factory
+from bzrlib.trace import mutter
+from bzrlib.revision import NULL_REVISION
+from bzrlib.versionedfile import ConstantMapper
 
-class SqliteCachingParentsProvider(object):
-    def __init__(self, actual, cachedb=None):
-        self.cache = ParentsCache(cachedb)
+class DiskCachingParentsProvider(object):
+    def __init__(self, actual, cachetransport):
+        self.cache = ParentsCache(cachetransport)
         self.actual = actual
 
     def get_parent_map(self, keys):
@@ -30,28 +34,32 @@
             else:
                 ret[k] = parents
         if len(todo):
-            ret.update(self.actual.get_parent_map(todo))
+            newfound = self.actual.get_parent_map(todo)
+            for revid, parents in newfound.items():
+                if revid == NULL_REVISION:
+                    continue
+                self.cache.insert_parents(revid, parents)
+            ret.update(newfound)
         return ret
 
 
-class ParentsCache(CacheTable):
-    def _create_table(self):
-        self.cachedb.executescript("""
-        create table if not exists parent (revision text, parent text);
-        create index if not exists parent_revision on parent (revision);
-        """)
+PARENTMAP_VERSION = 1
+
+
+class ParentsCache(object):
+
+    def __init__(self, cache_transport):
+        mapper = ConstantMapper("parentmap-v%d" % PARENTMAP_VERSION)
+        self.parentmap_knit = make_file_factory(True, mapper)(cache_transport)
 
     def insert_parents(self, revid, parents):
-        self.mutter('insert parents: %r -> %r', revid, parents)
-        for parent in parents:
-            self.cachedb.execute("insert into parent (revision, parent) VALUES (?, ?)", (revid, parent))
+        self.parentmap_knit.add_lines((revid,), [(r, ) for r in parents], [])
 
     def lookup_parents(self, revid):
-        self.mutter('lookup parents: %r', revid)
-        ret = []
-        for row in self.cachedb.execute("select parent from parent where revision = ?", (revid,)).fetchall():
-            ret.append(row[0])
-        if ret == []:
+        if "cache" in debug.debug_flags:
+            mutter('lookup parents: %r', revid)
+        try:
+            return [r for (r,) in self.parentmap_knit.get_parent_map([(revid,)])[(revid,)]]
+        except KeyError:
             return None
-        return tuple(ret)
 

=== modified file 'repository.py'
--- a/repository.py	2008-07-04 10:34:05 +0000
+++ b/repository.py	2008-07-04 20:03:57 +0000
@@ -43,7 +43,7 @@
                      get_default_mapping, parse_revision_id, 
                      parse_svn_dateprop)
 from bzrlib.plugins.svn.mapping3 import BzrSvnMappingv3FileProps
-from bzrlib.plugins.svn.parents import SqliteCachingParentsProvider
+from bzrlib.plugins.svn.parents import DiskCachingParentsProvider
 from bzrlib.plugins.svn.revids import CachingRevidMap, RevidMap
 from bzrlib.plugins.svn.svk import (SVN_PROP_SVK_MERGE, svk_features_merged_since, 
                  parse_svk_feature)
@@ -198,7 +198,7 @@
             cachedir_transport = get_transport(cache_dir)
             self.fileid_map = CachingFileIdMap(cachedir_transport, self.fileid_map)
             self.revmap = CachingRevidMap(self.revmap, self.cachedb)
-            self._real_parents_provider = SqliteCachingParentsProvider(self._real_parents_provider)
+            self._real_parents_provider = DiskCachingParentsProvider(self._real_parents_provider, cachedir_transport)
 
         self.branchprop_list = PathPropertyProvider(self._log)
 




More information about the bazaar-commits mailing list