Rev 2994: Change the contract for VersionedFileChecker to consolidate related parameters rather than splitting them across two api calls. This allows better reuse of a single checker object. in http://people.ubuntu.com/~robertc/baz2.0/reconcile

Robert Collins robertc at robertcollins.net
Thu Nov 15 22:38:35 GMT 2007


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

------------------------------------------------------------
revno: 2994
revision-id:robertc at robertcollins.net-20071115223817-m5mzq041xuj5xu42
parent: robertc at robertcollins.net-20071115211844-3npqwsnifwdsh5kr
committer: Robert Collins <robertc at robertcollins.net>
branch nick: get_versioned_file_checker
timestamp: Fri 2007-11-16 09:38:17 +1100
message:
  Change the contract for VersionedFileChecker to consolidate related parameters rather than splitting them across two api calls. This allows better reuse of a single checker object.
modified:
  bzrlib/check.py                check.py-20050309040759-f3a679400c06bcc1
  bzrlib/reconcile.py            reweave_inventory.py-20051108164726-1e5e0934febac06e
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
=== modified file 'bzrlib/check.py'
--- a/bzrlib/check.py	2007-10-26 06:48:09 +0000
+++ b/bzrlib/check.py	2007-11-15 22:38:17 +0000
@@ -208,16 +208,15 @@
         self.inventory_weave.check(progress_bar=self.progress)
         files_in_revisions = {}
         revisions_of_files = {}
+        weave_checker = self.repository.get_versioned_file_checker()
         for i, weave_id in enumerate(weave_ids):
             self.progress.update('checking versionedfile', i, n_weaves)
             w = self.repository.weave_store.get_weave(weave_id,
                     self.repository.get_transaction())
             # No progress here, because it looks ugly.
             w.check()
-
-            weave_checker = self.repository.get_versioned_file_checker(
+            result = weave_checker.check_file_version_parents(w, weave_id,
                 self.planned_revisions, self.revision_versions)
-            result = weave_checker.check_file_version_parents(w, weave_id)
             bad_parents, dangling_versions = result
             bad_parents = bad_parents.items()
             for revision_id, (weave_parents,correct_parents) in bad_parents:

=== modified file 'bzrlib/reconcile.py'
--- a/bzrlib/reconcile.py	2007-11-04 20:35:32 +0000
+++ b/bzrlib/reconcile.py	2007-11-15 22:38:17 +0000
@@ -382,14 +382,14 @@
                 len(versions))
         revision_versions.prepopulate_revs(versions)
         used_file_versions = revision_versions.used_file_versions()
+        vf_checker = self.repo.get_versioned_file_checker()
         for num, file_id in enumerate(self.repo.weave_store):
             self.pb.update('Fixing text parents', num,
                            len(self.repo.weave_store))
             vf = self.repo.weave_store.get_weave(file_id, transaction)
-            vf_checker = self.repo.get_versioned_file_checker(
+            versions_with_bad_parents, dangling_file_versions = \
+                vf_checker.check_file_version_parents(vf, file_id,
                 vf.versions(), revision_versions)
-            versions_with_bad_parents, dangling_file_versions = \
-                vf_checker.check_file_version_parents(vf, file_id)
             if (len(versions_with_bad_parents) == 0 and
                 len(dangling_file_versions) == 0):
                 continue

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2007-11-15 21:18:44 +0000
+++ b/bzrlib/repository.py	2007-11-15 22:38:17 +0000
@@ -1649,8 +1649,9 @@
                 [parents_provider, other_repository._make_parents_provider()])
         return graph.Graph(parents_provider)
 
-    def get_versioned_file_checker(self, revisions, revision_versions_cache):
-        return VersionedFileChecker(revisions, revision_versions_cache, self)
+    def get_versioned_file_checker(self):
+        """Return an object suitable for checking versioned files."""
+        return VersionedFileChecker(self)
 
     @needs_write_lock
     def set_make_working_trees(self, new_value):
@@ -2875,9 +2876,7 @@
 
 class VersionedFileChecker(object):
 
-    def __init__(self, planned_revisions, revision_versions, repository):
-        self.planned_revisions = planned_revisions
-        self.revision_versions = revision_versions
+    def __init__(self, repository):
         self.repository = repository
     
     def calculate_file_version_parents(self, revision_id, file_id):
@@ -2905,7 +2904,8 @@
                 new_parents.append(parent)
         return tuple(new_parents)
 
-    def check_file_version_parents(self, weave, file_id):
+    def check_file_version_parents(self, weave, file_id, planned_revisions,
+        revision_versions):
         """Check the parents stored in a versioned file are correct.
 
         It also detects file versions that are not referenced by their
@@ -2918,6 +2918,9 @@
             revision_id) tuples for versions that are present in this versioned
             file, but not used by the corresponding inventory.
         """
+        # store the current task in instance variables.
+        self.planned_revisions = planned_revisions
+        self.revision_versions = revision_versions
         wrong_parents = {}
         dangling_file_versions = set()
         for num, revision_id in enumerate(self.planned_revisions):



More information about the bazaar-commits mailing list