~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repofmt/pack_repo.py

  • Committer: Andrew Bennetts
  • Date: 2011-05-04 03:43:03 UTC
  • mto: This revision was merged to the branch mainline in revision 5839.
  • Revision ID: andrew.bennetts@canonical.com-20110504034303-urnokits2dcybaqt
Add test for calling add_fallback_repository after _make_parents_provider, and make it work.

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
from bzrlib.lock import LogicalLockResult
54
54
from bzrlib.repository import (
55
55
    CommitBuilder,
56
 
    _FallbacksList,
 
56
    _LazyListJoin,
57
57
    MetaDirRepository,
58
58
    MetaDirRepositoryFormat,
59
59
    RepositoryFormat,
1661
1661
        self._commit_builder_class = _commit_builder_class
1662
1662
        self._serializer = _serializer
1663
1663
        self._reconcile_fixes_text_parents = True
 
1664
        if self._format.supports_external_lookups:
 
1665
            self._unstacked_provider = graph.CachingParentsProvider(
 
1666
                self._make_parents_provider_unstacked())
 
1667
            self._unstacked_provider.disable_cache()
 
1668
        else:
 
1669
            self._unstacked_provider = graph.CachingParentsProvider(self)
1664
1670
 
1665
1671
    @needs_read_lock
1666
1672
    def _all_revision_ids(self):
1673
1679
 
1674
1680
    def _make_parents_provider(self):
1675
1681
        if not self._format.supports_external_lookups:
1676
 
            provider = self
1677
 
        else:
1678
 
            provider = graph.StackedParentsProvider(_FallbacksList(self))
1679
 
        return graph.CachingParentsProvider(provider)
 
1682
            return self._unstacked_provider
 
1683
        return graph.StackedParentsProvider(_LazyListJoin(
 
1684
            [self._unstacked_provider], self._fallback_repositories))
1680
1685
 
1681
1686
    def _refresh_data(self):
1682
1687
        if not self.is_locked():
1683
1688
            return
1684
1689
        self._pack_collection.reload_pack_names()
 
1690
        self._unstacked_provider.disable_cache()
 
1691
        self._unstacked_provider.enable_cache()
1685
1692
 
1686
1693
    def _start_write_group(self):
1687
1694
        self._pack_collection._start_write_group()
1735
1742
            if 'relock' in debug.debug_flags and self._prev_lock == 'w':
1736
1743
                note('%r was write locked again', self)
1737
1744
            self._prev_lock = 'w'
 
1745
            self._unstacked_provider.enable_cache()
1738
1746
            for repo in self._fallback_repositories:
1739
1747
                # Writes don't affect fallback repos
1740
1748
                repo.lock_read()
1755
1763
            if 'relock' in debug.debug_flags and self._prev_lock == 'r':
1756
1764
                note('%r was read locked again', self)
1757
1765
            self._prev_lock = 'r'
 
1766
            self._unstacked_provider.enable_cache()
1758
1767
            for repo in self._fallback_repositories:
1759
1768
                repo.lock_read()
1760
1769
            self._refresh_data()
1793
1802
        if self._write_lock_count == 1 and self._write_group is not None:
1794
1803
            self.abort_write_group()
1795
1804
            self._transaction = None
 
1805
            self._unstacked_provider.disable_cache()
1796
1806
            self._write_lock_count = 0
1797
1807
            raise errors.BzrError(
1798
1808
                'Must end write group before releasing write lock on %s'
1807
1817
            self.control_files.unlock()
1808
1818
 
1809
1819
        if not self.is_locked():
 
1820
            self._unstacked_provider.disable_cache()
1810
1821
            for repo in self._fallback_repositories:
1811
1822
                repo.unlock()
1812
1823