/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: Robert Collins
  • Date: 2007-11-16 01:28:59 UTC
  • mto: This revision was merged to the branch mainline in revision 3015.
  • Revision ID: robertc@robertcollins.net-20071116012859-909bq5as99bj7hx2
Change check and reconcile to use the new _generate_text_key_index rather
than a _RevisionTextVersionCache in calculating the correct per-file
parent information. This exposed some test errors which got changed, and
reporting some aspects of inventory-text mismatches become harder to
report (but easier to calculate for when we do start correcting it).

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
        # maps (file-id, version) -> sha1; used by InventoryFile._check
57
57
        self.checked_texts = {}
58
58
        self.checked_weaves = {}
59
 
        self.revision_versions = _mod_repository._RevisionTextVersionCache(
60
 
            self.repository)
61
 
        self.unreferenced_ancestors = set()
 
59
        self.unreferenced_versions = set()
62
60
        self.inconsistent_parents = []
63
 
        self.dangling_versions = set()
64
61
 
65
62
    def check(self):
66
63
        self.repository.lock_read()
81
78
                revno += 1
82
79
                self.check_one_rev(rev_id)
83
80
            # check_weaves is done after the revision scan so that
84
 
            # revision_versions is pre-populated
 
81
            # revision index is known to be valid.
85
82
            self.check_weaves()
86
83
        finally:
87
84
            self.progress.finished()
113
110
        note('%6d file-ids', len(self.checked_weaves))
114
111
        note('%6d unique file texts', self.checked_text_cnt)
115
112
        note('%6d repeated file texts', self.repeated_text_cnt)
116
 
        note('%6d unreferenced text ancestors',
117
 
             len(self.unreferenced_ancestors))
 
113
        note('%6d unreferenced text versions',
 
114
             len(self.unreferenced_versions))
118
115
        if self.missing_inventory_sha_cnt:
119
116
            note('%6d revisions are missing inventory_sha1',
120
117
                 self.missing_inventory_sha_cnt)
135
132
                    for linker in linkers:
136
133
                        note('       * %s', linker)
137
134
            if verbose:
138
 
                for file_id, revision_id in self.unreferenced_ancestors:
139
 
                    log_error('unreferenced ancestor: {%s} in %s', revision_id,
 
135
                for file_id, revision_id in self.unreferenced_versions:
 
136
                    log_error('unreferenced version: {%s} in %s', revision_id,
140
137
                        file_id)
141
138
        if len(self.inconsistent_parents):
142
139
            note('%6d inconsistent parents', len(self.inconsistent_parents))
157
154
                        '       %s has wrong parents in index: '
158
155
                        '%r should be %r',
159
156
                        revision_id, index_parents, actual_parents)
160
 
        if self.dangling_versions:
161
 
            note('%6d file versions are not referenced by their inventory',
162
 
                 len(self.dangling_versions))
163
157
 
164
158
    def check_one_rev(self, rev_id):
165
159
        """Check one revision.
216
210
            # No progress here, because it looks ugly.
217
211
            w.check()
218
212
            result = weave_checker.check_file_version_parents(w, weave_id,
219
 
                self.planned_revisions, self.revision_versions)
220
 
            bad_parents, dangling_versions = result
 
213
                self.planned_revisions)
 
214
            bad_parents, unused_versions = result
221
215
            bad_parents = bad_parents.items()
222
 
            for revision_id, (weave_parents,correct_parents) in bad_parents:
 
216
            for revision_id, (weave_parents, correct_parents) in bad_parents:
223
217
                self.inconsistent_parents.append(
224
218
                    (revision_id, weave_id, weave_parents, correct_parents))
225
 
                if weave_parents is None:
226
 
                    weave_parents = []
227
 
                unreferenced_parents = set(weave_parents)-set(correct_parents)
228
 
                for unreferenced_parent in unreferenced_parents:
229
 
                    self.unreferenced_ancestors.add(
230
 
                        (weave_id, unreferenced_parent))
231
 
            self.dangling_versions.update(dangling_versions)
 
219
            for revision_id in unused_versions:
 
220
                self.unreferenced_versions.add((weave_id, revision_id))
232
221
            self.checked_weaves[weave_id] = True
233
222
 
234
223
    def _check_revision_tree(self, rev_id):
235
224
        tree = self.repository.revision_tree(rev_id)
236
 
        self.revision_versions.add_revision_text_versions(tree)
237
225
        inv = tree.inventory
238
226
        seen_ids = {}
239
227
        for file_id in inv: