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