~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/reconcile.py

  • Committer: Robert Collins
  • Date: 2007-08-05 09:59:13 UTC
  • mto: (2592.5.3 pack-repository)
  • mto: This revision was merged to the branch mainline in revision 2933.
  • Revision ID: robertc@robertcollins.net-20070805095913-oir8h97dm86v5ol7
Make reconcile work, and pass tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Reconcilers are able to fix some potential data errors in a branch."""
18
18
 
19
19
 
20
 
__all__ = ['reconcile', 'Reconciler', 'RepoReconciler', 'KnitReconciler']
 
20
__all__ = [
 
21
    'KnitReconciler',
 
22
    'PackReconciler',
 
23
    'reconcile',
 
24
    'Reconciler',
 
25
    'RepoReconciler',
 
26
    ]
21
27
 
22
28
 
23
29
from bzrlib import ui
77
83
class RepoReconciler(object):
78
84
    """Reconciler that reconciles a repository.
79
85
 
 
86
    The goal of repository reconciliation is to make any derived daata
 
87
    consistent with the core data committed by a user. This can involve 
 
88
    reindexing, or removing unreferenced data if that can interfere with
 
89
    queries in a given repository.
 
90
 
80
91
    Currently this consists of an inventory reweave with revision cross-checks.
81
92
    """
82
93
 
267
278
class KnitReconciler(RepoReconciler):
268
279
    """Reconciler that reconciles a knit format repository.
269
280
 
270
 
    This will detect garbage inventories and remove them.
271
 
 
272
 
    Inconsistent parentage is checked for in the revision weave.
 
281
    This will detect garbage inventories and remove them in thorough mode.
273
282
    """
274
283
 
275
284
    def _reconcile_steps(self):
337
346
        self.garbage_inventories = len(garbage)
338
347
        for revision_id in garbage:
339
348
            mutter('Garbage inventory {%s} found.', revision_id)
 
349
 
 
350
 
 
351
class PackReconciler(RepoReconciler):
 
352
    """Reconciler that reconciles a pack based repository.
 
353
 
 
354
    Garbage inventories do not affect ancestry queries, and removal is
 
355
    considerably more expensive as there is no separate versioned file for
 
356
    them, so they are not cleaned. In short it is currently a no-op.
 
357
 
 
358
    In future this may be a good place to hook in annotation cache checking,
 
359
    index recreation etc.
 
360
    """
 
361
 
 
362
    def _reconcile_steps(self):
 
363
        """Perform the steps to reconcile this repository."""
 
364
        if self.thorough:
 
365
            pass