~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/reconcile.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
27
27
 
28
28
 
29
29
from bzrlib import (
30
 
    cleanup,
31
30
    errors,
32
31
    ui,
 
32
    repository,
 
33
    repofmt,
33
34
    )
34
 
from bzrlib.trace import mutter
 
35
from bzrlib.trace import mutter, note
35
36
from bzrlib.tsort import topo_sort
36
37
from bzrlib.versionedfile import AdapterFactory, FulltextContentFactory
37
38
 
96
97
    def _reconcile_repository(self):
97
98
        self.repo = self.bzrdir.find_repository()
98
99
        ui.ui_factory.note('Reconciling repository %s' %
99
 
            self.repo.user_url)
 
100
            self.repo.bzrdir.root_transport.base)
100
101
        self.pb.update("Reconciling repository", 0, 1)
101
102
        repo_reconciler = self.repo.reconcile(thorough=True)
102
103
        self.inconsistent_parents = repo_reconciler.inconsistent_parents
119
120
        self.branch = a_branch
120
121
 
121
122
    def reconcile(self):
122
 
        operation = cleanup.OperationWithCleanups(self._reconcile)
123
 
        self.add_cleanup = operation.add_cleanup
124
 
        operation.run_simple()
125
 
 
126
 
    def _reconcile(self):
127
123
        self.branch.lock_write()
128
 
        self.add_cleanup(self.branch.unlock)
129
 
        self.pb = ui.ui_factory.nested_progress_bar()
130
 
        self.add_cleanup(self.pb.finished)
131
 
        self._reconcile_steps()
 
124
        try:
 
125
            self.pb = ui.ui_factory.nested_progress_bar()
 
126
            try:
 
127
                self._reconcile_steps()
 
128
            finally:
 
129
                self.pb.finished()
 
130
        finally:
 
131
            self.branch.unlock()
132
132
 
133
133
    def _reconcile_steps(self):
134
134
        self._reconcile_revision_history()
192
192
        garbage_inventories: The number of inventory objects without revisions
193
193
                             that were garbage collected.
194
194
        """
195
 
        operation = cleanup.OperationWithCleanups(self._reconcile)
196
 
        self.add_cleanup = operation.add_cleanup
197
 
        operation.run_simple()
198
 
 
199
 
    def _reconcile(self):
200
195
        self.repo.lock_write()
201
 
        self.add_cleanup(self.repo.unlock)
202
 
        self.pb = ui.ui_factory.nested_progress_bar()
203
 
        self.add_cleanup(self.pb.finished)
204
 
        self._reconcile_steps()
 
196
        try:
 
197
            self.pb = ui.ui_factory.nested_progress_bar()
 
198
            try:
 
199
                self._reconcile_steps()
 
200
            finally:
 
201
                self.pb.finished()
 
202
        finally:
 
203
            self.repo.unlock()
205
204
 
206
205
    def _reconcile_steps(self):
207
206
        """Perform the steps to reconcile this repository."""
503
502
        collection = self.repo._pack_collection
504
503
        collection.ensure_loaded()
505
504
        collection.lock_names()
506
 
        self.add_cleanup(collection._unlock_names)
507
 
        packs = collection.all_packs()
508
 
        all_revisions = self.repo.all_revision_ids()
509
 
        total_inventories = len(list(
510
 
            collection.inventory_index.combined_index.iter_all_entries()))
511
 
        if len(all_revisions):
512
 
            new_pack =  self.repo._reconcile_pack(collection, packs,
513
 
                ".reconcile", all_revisions, self.pb)
514
 
            if new_pack is not None:
 
505
        try:
 
506
            packs = collection.all_packs()
 
507
            all_revisions = self.repo.all_revision_ids()
 
508
            total_inventories = len(list(
 
509
                collection.inventory_index.combined_index.iter_all_entries()))
 
510
            if len(all_revisions):
 
511
                new_pack =  self.repo._reconcile_pack(collection, packs,
 
512
                    ".reconcile", all_revisions, self.pb)
 
513
                if new_pack is not None:
 
514
                    self._discard_and_save(packs)
 
515
            else:
 
516
                # only make a new pack when there is data to copy.
515
517
                self._discard_and_save(packs)
516
 
        else:
517
 
            # only make a new pack when there is data to copy.
518
 
            self._discard_and_save(packs)
519
 
        self.garbage_inventories = total_inventories - len(list(
520
 
            collection.inventory_index.combined_index.iter_all_entries()))
 
518
            self.garbage_inventories = total_inventories - len(list(
 
519
                collection.inventory_index.combined_index.iter_all_entries()))
 
520
        finally:
 
521
            collection._unlock_names()
521
522
 
522
523
    def _discard_and_save(self, packs):
523
524
        """Discard some packs from the repository.