Rev 4358: Allow passing keys to check to VersionedFile.check(). in http://people.ubuntu.com/~robertc/baz2.0/check
Robert Collins
robertc at robertcollins.net
Mon Jun 15 01:24:19 BST 2009
At http://people.ubuntu.com/~robertc/baz2.0/check
------------------------------------------------------------
revno: 4358
revision-id: robertc at robertcollins.net-20090615002404-veq70usx4l5h3b1k
parent: robertc at robertcollins.net-20090601033315-1qj9cuq5e69vokao
committer: Robert Collins <robertc at robertcollins.net>
branch nick: check
timestamp: Mon 2009-06-15 10:24:04 +1000
message:
Allow passing keys to check to VersionedFile.check().
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2009-04-27 23:14:00 +0000
+++ b/bzrlib/knit.py 2009-06-15 00:24:04 +0000
@@ -1005,8 +1005,15 @@
"""See VersionedFiles.annotate."""
return self._factory.annotate(self, key)
- def check(self, progress_bar=None):
+ def check(self, progress_bar=None, keys=None):
"""See VersionedFiles.check()."""
+ if keys is None:
+ return self._logical_check()
+ else:
+ # At the moment, check does not extra work over get_record_stream
+ return self.get_record_stream(keys, 'unordered', True)
+
+ def _logical_check(self):
# This doesn't actually test extraction of everything, but that will
# impact 'bzr check' substantially, and needs to be integrated with
# care. However, it does check for the obvious problem of a delta with
=== modified file 'bzrlib/tests/test_versionedfile.py'
--- a/bzrlib/tests/test_versionedfile.py 2009-05-01 18:09:24 +0000
+++ b/bzrlib/tests/test_versionedfile.py 2009-06-15 00:24:04 +0000
@@ -30,6 +30,7 @@
knit as _mod_knit,
osutils,
progress,
+ ui,
)
from bzrlib.errors import (
RevisionNotPresent,
@@ -1510,6 +1511,28 @@
self.assertRaises(RevisionNotPresent,
files.annotate, prefix + ('missing-key',))
+ def test_check_no_parameters(self):
+ files = self.get_versionedfiles()
+
+ def test_check_progressbar_parameter(self):
+ """A progress bar can be supplied because check can be a generator."""
+ pb = ui.ui_factory.nested_progress_bar()
+ self.addCleanup(pb.finished)
+ files = self.get_versionedfiles()
+ files.check(progress_bar=pb)
+
+ def test_check_with_keys_becomes_generator(self):
+ files = self.get_versionedfiles()
+ self.get_diamond_files(files)
+ keys = files.keys()
+ entries = files.check(keys=keys)
+ seen = set()
+ # Texts output should be fulltexts.
+ self.capture_stream(files, entries, seen.add,
+ files.get_parent_map(keys), require_fulltext=True)
+ # All texts should be output.
+ self.assertEqual(set(keys), seen)
+
def test_construct(self):
"""Each parameterised test can be constructed on a transport."""
files = self.get_versionedfiles()
@@ -1669,7 +1692,8 @@
'knit-delta-closure', 'knit-delta-closure-ref',
'groupcompress-block', 'groupcompress-block-ref'])
- def capture_stream(self, f, entries, on_seen, parents):
+ def capture_stream(self, f, entries, on_seen, parents,
+ require_fulltext=False):
"""Capture a stream for testing."""
for factory in entries:
on_seen(factory.key)
@@ -1680,6 +1704,8 @@
self.assertEqual(parents[factory.key], factory.parents)
self.assertIsInstance(factory.get_bytes_as(factory.storage_kind),
str)
+ if require_fulltext:
+ factory.get_bytes_as('fulltext')
def test_get_record_stream_interface(self):
"""each item in a stream has to provide a regular interface."""
@@ -2547,8 +2573,8 @@
self.assertRaises(NotImplementedError,
self.texts.add_mpdiffs, [])
- def test_check(self):
- self.assertTrue(self.texts.check())
+ def test_check_noerrors(self):
+ self.texts.check()
def test_insert_record_stream(self):
self.assertRaises(NotImplementedError, self.texts.insert_record_stream,
=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py 2009-04-29 17:02:36 +0000
+++ b/bzrlib/versionedfile.py 2009-06-15 00:24:04 +0000
@@ -876,7 +876,16 @@
raise NotImplementedError(self.annotate)
def check(self, progress_bar=None):
- """Check this object for integrity."""
+ """Check this object for integrity.
+
+ :param progress_bar: A progress bar to output as the check progresses.
+ :param keys: Specific keys within the VersionedFiles to check. When
+ this parameter is not None, check() becomes a generator as per
+ get_record_stream. The difference to get_record_stream is that
+ more or deeper checks will be performed.
+ :return: None, or if keys was supplied a generator as per
+ get_record_stream.
+ """
raise NotImplementedError(self.check)
@staticmethod
@@ -1092,10 +1101,15 @@
result.append((prefix + (origin,), line))
return result
- def check(self, progress_bar=None):
+ def check(self, progress_bar=None, keys=None):
"""See VersionedFiles.check()."""
+ # XXX: This is over-enthusiastic but as we only thunk for Weaves today
+ # this is tolerable. Ideally we'd pass keys down to check() and
+ # have the older VersiondFile interface updated too.
for prefix, vf in self._iter_all_components():
vf.check()
+ if keys is not None:
+ return self.get_record_stream(keys, 'unordered', True)
def get_parent_map(self, keys):
"""Get a map of the parents of keys.
More information about the bazaar-commits
mailing list