Rev 1349: Fix compatibility with new versionedfiles API. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4

Jelmer Vernooij jelmer at samba.org
Thu Jun 26 14:26:07 BST 2008


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

------------------------------------------------------------
revno: 1349
revision-id: jelmer at samba.org-20080626132606-i33g9so2280g78ui
parent: jelmer at samba.org-20080626124738-97ghchm8w05apcjd
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Thu 2008-06-26 15:26:06 +0200
message:
  Fix compatibility with new versionedfiles API.
modified:
  __init__.py                    __init__.py-20051008155114-eae558e6cf149e1d
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  fileids.py                     fileids.py-20060714013623-u5iiyqqnko11grcf-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  tests/test_branch.py           test_branch.py-20060508162215-74ffeb5d608f8e20
=== modified file '__init__.py'
--- a/__init__.py	2008-06-24 09:01:06 +0000
+++ b/__init__.py	2008-06-26 13:26:06 +0000
@@ -39,7 +39,7 @@
     version_string = '%d.%d.%d%s%d' % version_info
 __version__ = version_string
 
-COMPATIBLE_BZR_VERSIONS = [(1, 4), (1, 5), (1, 6)]
+COMPATIBLE_BZR_VERSIONS = [(1, 6)]
 
 def check_bzrlib_version(desired):
     """Check that bzrlib is compatible.

=== modified file 'fetch.py'
--- a/fetch.py	2008-06-24 01:31:35 +0000
+++ b/fetch.py	2008-06-26 13:26:06 +0000
@@ -156,12 +156,6 @@
     def close(self):
         pass
 
-    def _store_directory(self, file_id, parents):
-        raise NotImplementedError(self._store_directory)
-
-    def _get_file_data(self, file_id, revid):
-        raise NotImplementedError(self._get_file_data)
-
     def _finish_commit(self):
         raise NotImplementedError(self._finish_commit)
 
@@ -171,9 +165,6 @@
     def _start_revision(self):
         pass
 
-    def _store_file(self, file_id, lines, parents):
-        raise NotImplementedError(self._store_file)
-
     def _get_existing_id(self, old_parent_id, new_parent_id, path):
         assert isinstance(path, unicode)
         assert isinstance(old_parent_id, str)
@@ -218,7 +209,8 @@
         self.editor.inventory[self.new_id].revision = self.editor.revid
 
         # Only record root if the target repository supports it
-        self.editor._store_directory(self.new_id, self.parent_revids)
+        self.editor.texts.add_lines((self.new_id, self.editor.revid), 
+                 [(self.new_id, revid) for revid in self.parent_revids], [])
 
         if self.new_id == self.editor.inventory.root.file_id:
             assert len(self.editor._premature_deletes) == 0
@@ -320,7 +312,8 @@
         base_revid = self.editor.old_inventory[base_file_id].revision
         file_id = self.editor._get_existing_id(self.old_id, self.new_id, path)
         is_symlink = (self.editor.inventory[base_file_id].kind == 'symlink')
-        file_data = self.editor._get_file_data(base_file_id, base_revid)
+        record = self.editor.texts.get_record_stream([(base_file_id, base_revid)], 'unordered', True).next()
+        file_data = record.get_bytes_as('fulltext')
         if file_id == base_file_id:
             file_parents = [base_revid]
         else:
@@ -400,7 +393,8 @@
         actual_checksum = md5_strings(lines)
         assert checksum is None or checksum == actual_checksum
 
-        self.editor._store_file(self.file_id, lines, self.file_parents)
+        self.editor.texts.add_lines((self.file_id, self.editor.revid), 
+                [(self.file_id, revid) for revid in self.file_parents], lines)
 
         assert self.is_symlink in (True, False)
 
@@ -433,26 +427,12 @@
     """
     def __init__(self, source, target):
         RevisionBuildEditor.__init__(self, source, target)
-        self.weave_store = target.weave_store
+        self.texts = target.texts
 
     def _start_revision(self):
         self._write_group_active = True
         self.target.start_write_group()
 
-    def _store_directory(self, file_id, parents):
-        file_weave = self.weave_store.get_weave_or_empty(file_id, self.transact)
-        if not file_weave.has_version(self.revid):
-            file_weave.add_lines(self.revid, parents, [])
-
-    def _get_file_data(self, file_id, revid):
-        file_weave = self.weave_store.get_weave_or_empty(file_id, self.transact)
-        return file_weave.get_text(revid)
-
-    def _store_file(self, file_id, lines, parents):
-        file_weave = self.weave_store.get_weave_or_empty(file_id, self.transact)
-        if not file_weave.has_version(self.revid):
-            file_weave.add_lines(self.revid, parents, lines)
-
     def _finish_commit(self):
         (rev, signature) = self._get_revision(self.revid)
         self.inventory.revision_id = self.revid
@@ -471,24 +451,6 @@
             self._write_group_active = False
 
 
-class PackRevisionBuildEditor(WeaveRevisionBuildEditor):
-    """Revision Build Editor for Subversion that is specific for the packs API.
-    """
-    def __init__(self, source, target):
-        WeaveRevisionBuildEditor.__init__(self, source, target)
-
-    def _add_text_to_weave(self, file_id, new_lines, parents):
-        return self.target._packs._add_text_to_weave(file_id,
-            self.revid, new_lines, parents, nostore_sha=None, 
-            random_revid=False)
-
-    def _store_directory(self, file_id, parents):
-        self._add_text_to_weave(file_id, [], parents)
-
-    def _store_file(self, file_id, lines, parents):
-        self._add_text_to_weave(file_id, lines, parents)
-
-
 class CommitBuilderRevisionBuildEditor(RevisionBuildEditor):
     """Revision Build Editor for Subversion that uses the CommitBuilder API.
     """
@@ -503,8 +465,6 @@
     :param repository: Repository to obtain the buildeditor for.
     :return: Class object of class descending from RevisionBuildEditor
     """
-    if getattr(repository, '_packs', None):
-        return PackRevisionBuildEditor
     return WeaveRevisionBuildEditor
 
 

=== modified file 'fileids.py'
--- a/fileids.py	2008-06-06 17:19:53 +0000
+++ b/fileids.py	2008-06-26 13:26:06 +0000
@@ -17,9 +17,10 @@
 
 from bzrlib import ui
 from bzrlib.errors import NotBranchError, RevisionNotPresent
-from bzrlib.knit import make_file_knit
+from bzrlib.knit import make_file_factory
 from bzrlib.revision import NULL_REVISION
 from bzrlib.trace import mutter
+from bzrlib.versionedfile import ConstantMapper
 
 import urllib
 
@@ -189,7 +190,8 @@
 class CachingFileIdMap(object):
     """A file id map that uses a cache."""
     def __init__(self, cache_transport, actual):
-        self.idmap_knit = make_file_knit("fileidmap-v%d" % FILEIDMAP_VERSION, cache_transport, 0644, create=True)
+        mapper = ConstantMapper("fileidmap-v%d" % FILEIDMAP_VERSION)
+        self.idmap_knit = make_file_factory(True, mapper)(cache_transport)
         self.actual = actual
         self.apply_changes = actual.apply_changes
         self.repos = actual.repos
@@ -202,13 +204,13 @@
             assert isinstance(id, str)
             assert isinstance(created_revid, str)
 
-        self.idmap_knit.add_lines_with_ghosts(revid, parent_revids, 
+        self.idmap_knit.add_lines(revid, parent_revids, 
                 ["%s\t%s\t%s\n" % (urllib.quote(filename.encode("utf-8")), urllib.quote(_map[filename][0]), 
                                         urllib.quote(_map[filename][1])) for filename in sorted(_map.keys())])
 
     def load(self, revid):
         map = {}
-        for line in self.idmap_knit.get_lines(revid):
+        for (line, version_id) in self.idmap_knit.iter_lines_added_or_present_in_keys([revid]):
             (filename, id, create_revid) = line.rstrip("\n").split("\t", 3)
             map[urllib.unquote(filename).decode("utf-8")] = (urllib.unquote(id), urllib.unquote(create_revid))
             assert isinstance(map[urllib.unquote(filename)][0], str)

=== modified file 'repository.py'
--- a/repository.py	2008-06-24 10:00:53 +0000
+++ b/repository.py	2008-06-26 13:26:06 +0000
@@ -156,8 +156,7 @@
         assert isinstance(transport, Transport)
 
         control_files = LockableFiles(transport, '', TransportLock)
-        Repository.__init__(self, SvnRepositoryFormat(), bzrdir, 
-            control_files, None, None, None)
+        Repository.__init__(self, SvnRepositoryFormat(), bzrdir, control_files)
 
         self._cached_revnum = None
         self._lock_mode = None

=== modified file 'tests/test_branch.py'
--- a/tests/test_branch.py	2008-06-23 02:40:47 +0000
+++ b/tests/test_branch.py	2008-06-26 13:26:06 +0000
@@ -568,15 +568,15 @@
              oldbranch.generate_revision_id(6))
         transaction = newbranch.repository.get_transaction()
         newbranch.repository.lock_read()
-        weave = newbranch.repository.weave_store.get_weave(
-                tree.inventory.path2id("hosts"), transaction)
+        texts = newbranch.repository.texts
+        host_fileid = tree.inventory.path2id("hosts")
         mapping = BzrSvnMappingv3FileProps(TrunkBranchingScheme())
         self.assertEqual(set([
-            mapping.generate_revision_id(uuid, 1, "trunk"),
-            mapping.generate_revision_id(uuid, 2, "trunk"),
-            mapping.generate_revision_id(uuid, 3, "trunk"),
-            oldbranch.generate_revision_id(6)]),
-                          set(weave.versions()))
+            (host_fileid, mapping.generate_revision_id(uuid, 1, "trunk")),
+            (host_fileid, mapping.generate_revision_id(uuid, 2, "trunk")),
+            (host_fileid, mapping.generate_revision_id(uuid, 3, "trunk")),
+            (host_fileid, oldbranch.generate_revision_id(6))]),
+            set(filter(lambda (fid, rid): fid == host_fileid, texts.keys())))
         newbranch.repository.unlock()
 
     def test_check(self):




More information about the bazaar-commits mailing list