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