Rev 4352: Cleanup progress reporting for check to go left to right once and only once. in http://people.ubuntu.com/~robertc/baz2.0/check

Robert Collins robertc at robertcollins.net
Tue May 12 07:33:20 BST 2009


At http://people.ubuntu.com/~robertc/baz2.0/check

------------------------------------------------------------
revno: 4352
revision-id: robertc at robertcollins.net-20090512063317-77tyeab01ua3v8uv
parent: robertc at robertcollins.net-20090512063223-v8vbs10pau1ps1rp
committer: Robert Collins <robertc at robertcollins.net>
branch nick: check
timestamp: Tue 2009-05-12 16:33:17 +1000
message:
  Cleanup progress reporting for check to go left to right once and only once.
=== modified file 'bzrlib/check.py'
--- a/bzrlib/check.py	2009-05-12 05:34:15 +0000
+++ b/bzrlib/check.py	2009-05-12 06:33:17 +0000
@@ -98,24 +98,31 @@
         self.repository.lock_read()
         self.progress = bzrlib.ui.ui_factory.nested_progress_bar()
         try:
+            self.progress.update('check', 0, 4)
             if self.check_repo:
-                self.progress.update('retrieving inventory', 0, 2)
+                self.progress.update('checking revision graph', 0)
+                self.check_revision_graph()
                 # do not put in init, as it should be done with progess,
                 # and inside the lock.
                 self.inventory_weave = self.repository.inventories
-                self.progress.update('checking revision graph', 1)
-                self.check_revision_graph()
-                self.plan_revisions()
+                self.planned_revisions = list(self.planned_revisions)
                 revno = 0
-                while revno < len(self.planned_revisions):
-                    rev_id = self.planned_revisions[revno]
-                    self.progress.update('checking revision', revno,
-                                         len(self.planned_revisions))
-                    revno += 1
-                    self._check_revision_tree(rev_id)
+                self.progress.update('checking revisions', 1)
+                revbar = bzrlib.ui.ui_factory.nested_progress_bar()
+                try:
+                    while revno < len(self.planned_revisions):
+                        rev_id = self.planned_revisions[revno]
+                        revbar.update('checking revision', revno,
+                            len(self.planned_revisions))
+                        revno += 1
+                        self._check_revision_tree(rev_id)
+                finally:
+                    revbar.finished()
+                self.progress.update('checking revision contents', 2)
                 # check_weaves is done after the revision scan so that
                 # revision index is known to be valid.
                 self.check_weaves()
+            self.progress.update('checking branches and trees', 3)
             if callback_refs:
                 repo = self.repository
                 # calculate all refs, and callback the objects requesting them.
@@ -190,16 +197,6 @@
                 revision_iterator)
             self.revs_with_bad_parents_in_index = list(bad_revisions)
 
-    def plan_revisions(self):
-        repository = self.repository
-        self.planned_revisions = repository.all_revision_ids()
-        self.progress.clear()
-        inventoried = set(key[-1] for key in self.inventory_weave.keys())
-        awol = set(self.planned_revisions) - inventoried
-        if len(awol) > 0:
-            raise BzrCheckError('Stored revisions missing from inventory'
-                '{%s}' % ','.join([f for f in awol]))
-
     def report_results(self, verbose):
         if self.check_repo:
             self._report_repo_results(verbose)
@@ -310,15 +307,24 @@
         """Check all the weaves we can get our hands on.
         """
         weave_ids = []
-        self.progress.update('checking inventory', 0, 2)
-        self.inventory_weave.check(progress_bar=self.progress)
-        self.progress.update('checking text storage', 1, 2)
-        self.repository.texts.check(progress_bar=self.progress)
+        storebar = bzrlib.ui.ui_factory.nested_progress_bar()
+        try:
+            self._check_weaves(storebar)
+        finally:
+            storebar.finished()
+
+    def _check_weaves(self, storebar):
+        storebar.update('inventory', 0, 4)
+        self.inventory_weave.check(progress_bar=storebar)
+        storebar.update('text-deltas', 1)
+        self.repository.texts.check(progress_bar=storebar)
+        storebar.update('text-index', 2)
         weave_checker = self.repository._get_versioned_file_checker(
             text_key_references=self.text_key_references,
             ancestors=self.ancestors)
+        storebar.update('file-graph', 3)
         result = weave_checker.check_file_version_parents(
-            self.repository.texts, progress_bar=self.progress)
+            self.repository.texts)
         self.checked_weaves = weave_checker.file_ids
         bad_parents, unused_versions = result
         bad_parents = bad_parents.items()
@@ -333,7 +339,11 @@
         self.unreferenced_versions.update(unused_versions)
 
     def _check_revision_tree(self, rev_id):
-        tree = self.repository.revision_tree(rev_id)
+        try:
+            tree = self.repository.revision_tree(rev_id)
+        except errors.NoSuchRevision:
+            self._report_items.append(
+                "Missing inventory for revision {%s}" % rev_id)
         inv = tree.inventory
         seen_ids = set()
         seen_names = set()




More information about the bazaar-commits mailing list