Rev 949: Use the RevisionLoader class from bzr-fast-import. in file:///data/jelmer/bzr-svn/revisionloader/

Jelmer Vernooij jelmer at samba.org
Wed Mar 12 18:49:57 GMT 2008


At file:///data/jelmer/bzr-svn/revisionloader/

------------------------------------------------------------
revno: 949
revision-id:jelmer at samba.org-20080312184954-ayb1gi3yjtqyjoez
parent: jelmer at samba.org-20080312150357-87y32kta69anlqjg
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: revisionloader
timestamp: Wed 2008-03-12 19:49:54 +0100
message:
  Use the RevisionLoader class from bzr-fast-import.
modified:
  AUTHORS                        AUTHORS-20060508114718-4c90c0062645106d
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
=== modified file 'AUTHORS'
--- a/AUTHORS	2008-03-12 15:01:25 +0000
+++ b/AUTHORS	2008-03-12 18:49:54 +0000
@@ -1,11 +1,11 @@
 Jelmer Vernooij <jelmer at samba.org>
 
 Thanks to David Allouche, Erik Bågfors, Alexander Belchenko, Andrew Bennetts, 
-Aaron Bentley, Max Bowser, Jerry Carter, Robert Collins, David Foerster, 
-Wouter van Heyst, Michael Hudson, David James, Matthias Klose, Jan Kneschke, 
-Lukás Lalinský, Kevin Light, Roland Mas, John Arbash Meinel, Stefan Metzmacher, 
-Andrew Mitchell, Gustavo Niemeyer, Martin Pool, Garrett Rooney, Johan Rydberg, 
-Peter Samuelson, Mark Shuttleworth, Adeodato Simó, Mikhail Sobolev, 
-Reinhard Tartler and Adrian Wilkins for comments, code reviews, funding, bug reports, testing, 
-committing patches/bundles and generally keeping up while I was asking 
-annoying questions.
+Aaron Bentley, Max Bowser, Jerry Carter, Ian Clatworthy, Robert Collins, 
+David Foerster, Wouter van Heyst, Michael Hudson, David James, Matthias Klose, 
+Jan Kneschke, Lukás Lalinský, Kevin Light, Roland Mas, John Arbash Meinel, 
+Stefan Metzmacher, Andrew Mitchell, Gustavo Niemeyer, Martin Pool, 
+Garrett Rooney, Johan Rydberg, Peter Samuelson, Mark Shuttleworth, 
+Adeodato Simó, Mikhail Sobolev, Reinhard Tartler and Adrian Wilkins for 
+comments, code reviews, funding, bug reports, testing, committing 
+patches/bundles and generally keeping up while I was asking annoying questions.

=== modified file 'fetch.py'
--- a/fetch.py	2008-03-04 16:16:48 +0000
+++ b/fetch.py	2008-03-12 18:49:54 +0000
@@ -90,6 +90,12 @@
         self.source = source
         self.transact = target.get_transaction()
 
+    def close(self):
+        pass
+
+    def abort(self):
+        pass
+
     def start_revision(self, revid, prev_inventory):
         self.revid = revid
         (self.branch_path, self.revnum, self.mapping) = self.source.lookup_revision_id(revid)
@@ -388,6 +394,7 @@
 
     def close_edit(self):
         assert len(self._premature_deletes) == 0
+        self.inventory.revision_id = self.revid
         self._finish_commit()
         self.pool.destroy()
 
@@ -446,7 +453,6 @@
 
     def _finish_commit(self):
         rev = self._get_revision(self.revid)
-        self.inventory.revision_id = self.revid
         # Escaping the commit message is really the task of the serialiser
         rev.message = _escape_commit_message(rev.message)
         rev.inventory_sha1 = osutils.sha_string(
@@ -487,12 +493,56 @@
         raise NotImplementedError(self)
 
 
+class RevisionLoaderRevisionBuildEditor(RevisionBuildEditor):
+    """Revision Build Editor for Subversion that uses the CommitBuilder API.
+    """
+    def __init__(self, source, target):
+        RevisionBuildEditor.__init__(self, source, target)
+        from bzrlib.plugins.fastimport.revisionloader import ExperimentalRevisionLoader
+        self.revloader = ExperimentalRevisionLoader(target)
+        self._write_group_active = True
+        self.target.start_write_group()
+        # Turn on caching for the inventory versioned file
+        inv_vf = self.target.get_inventory_weave()
+        inv_vf.enable_cache()
+
+    def abort(self):
+        if self._write_group_active:
+            self.target.abort_write_group()
+            self._write_group_active = False
+
+    def close(self):
+        self.target.commit_write_group()
+        self._write_group_active = False
+
+    def _start_revision(self):
+        self._file_text = {}
+
+    def _finish_commit(self):
+        rev = self._get_revision(self.revid)
+        def text_provider(file_id):
+            return self._file_text[file_id]
+        self.revloader.load(rev, self.inventory, None, text_provider)
+
+    def _store_file(self, file_id, lines, parents):
+        self._file_text[file_id] = lines
+
+    def _store_directory(self, file_id, parents):
+        self._file_text[file_id] = []
+
+    def _get_file_data(self, file_id, revid):
+        # FIXME: Some more efficient way to implement this?
+        file_weave = self.target.weave_store.get_weave_or_empty(file_id, self.target.get_transaction())
+        return file_weave.get_text(revid)
+
+
 def get_revision_build_editor(repository):
     """Obtain a RevisionBuildEditor for a particular target repository.
     
     :param repository: Repository to obtain the buildeditor for.
     :return: Class object of class descending from RevisionBuildEditor
     """
+    return RevisionLoaderRevisionBuildEditor
     if hasattr(repository, '_packs'):
         return PackRevisionBuildEditor
     return WeaveRevisionBuildEditor
@@ -662,7 +712,9 @@
                 prev_revid = revid
                 pool.destroy()
                 num += 1
+            editor.close()
         finally:
+            editor.abort()
             self.target.unlock()
             if nested_pb is not None:
                 nested_pb.finished()




More information about the bazaar-commits mailing list