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