Rev 5790: (jelmer) Make PackRepository subclass MetaDirRepository rather than in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Sat Apr 16 10:11:54 UTC 2011


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 5790 [merge]
revision-id: pqm at pqm.ubuntu.com-20110416101151-adka24z3gayoxml7
parent: pqm at pqm.ubuntu.com-20110416010956-5wrpm136qq2hz5f3
parent: jelmer at samba.org-20110415111118-jejnktf3p9a47cwa
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Sat 2011-04-16 10:11:51 +0000
message:
  (jelmer) Make PackRepository subclass MetaDirRepository rather than
   KnitRepository. (Jelmer Vernooij)
modified:
  bzrlib/repofmt/groupcompress_repo.py repofmt.py-20080715094215-wp1qfvoo7093c8qr-1
  bzrlib/repofmt/knitpack_repo.py knitpack_repo.py-20110405143430-6p75yrk99v6pb770-1
  bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/per_repository/test_check.py test_check.py-20070824124512-38g4d135gcqxo4zb-1
=== modified file 'bzrlib/repofmt/groupcompress_repo.py'
--- a/bzrlib/repofmt/groupcompress_repo.py	2011-04-08 22:59:00 +0000
+++ b/bzrlib/repofmt/groupcompress_repo.py	2011-04-15 11:07:12 +0000
@@ -606,10 +606,10 @@
     def __init__(self, *args, **kwargs):
         super(GCCHKCanonicalizingPacker, self).__init__(*args, **kwargs)
         self._data_changed = False
-    
+
     def _exhaust_stream(self, source_vf, keys, message, vf_to_stream, pb_offset):
         """Create and exhaust a stream, but don't insert it.
-        
+
         This is useful to get the side-effects of generating a stream.
         """
         self.pb.update('scanning %s' % (message,), pb_offset)

=== modified file 'bzrlib/repofmt/knitpack_repo.py'
--- a/bzrlib/repofmt/knitpack_repo.py	2011-04-05 23:14:12 +0000
+++ b/bzrlib/repofmt/knitpack_repo.py	2011-04-15 11:11:18 +0000
@@ -59,11 +59,11 @@
     )
 
 
-class KnitPackRepository(PackRepository):
+class KnitPackRepository(PackRepository, KnitRepository):
 
     def __init__(self, _format, a_bzrdir, control_files, _commit_builder_class,
         _serializer):
-        KnitRepository.__init__(self, _format, a_bzrdir, control_files,
+        PackRepository.__init__(self, _format, a_bzrdir, control_files,
             _commit_builder_class, _serializer)
         if self._format.supports_chks:
             raise AssertionError("chk not supported")

=== modified file 'bzrlib/repofmt/knitrepo.py'
--- a/bzrlib/repofmt/knitrepo.py	2011-04-08 12:28:37 +0000
+++ b/bzrlib/repofmt/knitrepo.py	2011-04-08 15:26:51 +0000
@@ -232,37 +232,6 @@
     def _make_parents_provider(self):
         return _KnitsParentsProvider(self.revisions)
 
-    def _find_inconsistent_revision_parents(self, revisions_iterator=None):
-        """Find revisions with different parent lists in the revision object
-        and in the index graph.
-
-        :param revisions_iterator: None, or an iterator of (revid,
-            Revision-or-None). This iterator controls the revisions checked.
-        :returns: an iterator yielding tuples of (revison-id, parents-in-index,
-            parents-in-revision).
-        """
-        if not self.is_locked():
-            raise AssertionError()
-        vf = self.revisions
-        if revisions_iterator is None:
-            revisions_iterator = self._iter_revisions(None)
-        for revid, revision in revisions_iterator:
-            if revision is None:
-                pass
-            parent_map = vf.get_parent_map([(revid,)])
-            parents_according_to_index = tuple(parent[-1] for parent in
-                parent_map[(revid,)])
-            parents_according_to_revision = tuple(revision.parent_ids)
-            if parents_according_to_index != parents_according_to_revision:
-                yield (revid, parents_according_to_index,
-                    parents_according_to_revision)
-
-    def _check_for_inconsistent_revision_parents(self):
-        inconsistencies = list(self._find_inconsistent_revision_parents())
-        if inconsistencies:
-            raise errors.BzrCheckError(
-                "Revision knit has inconsistent parents.")
-
 
 class RepositoryFormatKnit(MetaDirRepositoryFormat):
     """Bzr repository knit format (generalized).

=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py	2011-04-09 01:20:42 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2011-04-15 11:07:12 +0000
@@ -50,11 +50,15 @@
     lockdir,
     )
 
-from bzrlib.decorators import needs_write_lock, only_raises
+from bzrlib.decorators import (
+    needs_read_lock,
+    needs_write_lock,
+    only_raises,
+    )
 from bzrlib.lock import LogicalLockResult
-from bzrlib.repofmt.knitrepo import KnitRepository
 from bzrlib.repository import (
     CommitBuilder,
+    MetaDirRepository,
     MetaDirRepositoryFormat,
     RepositoryFormat,
     RepositoryWriteLockResult,
@@ -2060,7 +2064,7 @@
             self._resume_pack(token)
 
 
-class PackRepository(KnitRepository):
+class PackRepository(MetaDirRepository):
     """Repository with knit objects stored inside pack containers.
 
     The layering for a KnitPackRepository is:
@@ -2085,6 +2089,25 @@
 
     """
 
+    # These attributes are inherited from the Repository base class. Setting
+    # them to None ensures that if the constructor is changed to not initialize
+    # them, or a subclass fails to call the constructor, that an error will
+    # occur rather than the system working but generating incorrect data.
+    _commit_builder_class = None
+    _serializer = None
+
+    def __init__(self, _format, a_bzrdir, control_files, _commit_builder_class,
+        _serializer):
+        MetaDirRepository.__init__(self, _format, a_bzrdir, control_files)
+        self._commit_builder_class = _commit_builder_class
+        self._serializer = _serializer
+        self._reconcile_fixes_text_parents = True
+
+    @needs_read_lock
+    def _all_revision_ids(self):
+        """See Repository.all_revision_ids()."""
+        return [key[0] for key in self.revisions.keys()]
+
     def _abort_write_group(self):
         self.revisions._index._key_dependencies.clear()
         self._pack_collection._abort_write_group()

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2011-04-08 22:51:59 +0000
+++ b/bzrlib/repository.py	2011-04-15 11:07:12 +0000
@@ -2765,6 +2765,37 @@
                 except UnicodeDecodeError:
                     raise errors.NonAsciiRevisionId(method, self)
 
+    def _find_inconsistent_revision_parents(self, revisions_iterator=None):
+        """Find revisions with different parent lists in the revision object
+        and in the index graph.
+
+        :param revisions_iterator: None, or an iterator of (revid,
+            Revision-or-None). This iterator controls the revisions checked.
+        :returns: an iterator yielding tuples of (revison-id, parents-in-index,
+            parents-in-revision).
+        """
+        if not self.is_locked():
+            raise AssertionError()
+        vf = self.revisions
+        if revisions_iterator is None:
+            revisions_iterator = self._iter_revisions(None)
+        for revid, revision in revisions_iterator:
+            if revision is None:
+                pass
+            parent_map = vf.get_parent_map([(revid,)])
+            parents_according_to_index = tuple(parent[-1] for parent in
+                parent_map[(revid,)])
+            parents_according_to_revision = tuple(revision.parent_ids)
+            if parents_according_to_index != parents_according_to_revision:
+                yield (revid, parents_according_to_index,
+                    parents_according_to_revision)
+
+    def _check_for_inconsistent_revision_parents(self):
+        inconsistencies = list(self._find_inconsistent_revision_parents())
+        if inconsistencies:
+            raise errors.BzrCheckError(
+                "Revision knit has inconsistent parents.")
+
 
 def install_revision(repository, rev, revision_tree):
     """Install all revision data into a repository."""

=== modified file 'bzrlib/tests/per_repository/test_check.py'
--- a/bzrlib/tests/per_repository/test_check.py	2011-04-08 12:28:37 +0000
+++ b/bzrlib/tests/per_repository/test_check.py	2011-04-08 12:42:59 +0000
@@ -17,13 +17,9 @@
 
 """Test operations that check the repository for corruption"""
 
-import os
-
 from bzrlib import (
-    check,
     config as _mod_config,
     errors,
-    inventory,
     revision as _mod_revision,
     )
 from bzrlib.tests import TestNotApplicable




More information about the bazaar-commits mailing list