~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_repository/test_refresh_data.py

(jelmer) Add stub for ControlDir.find_branch_format,
 fix some tests against foreign formats. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Tests for Repository.refresh_data."""
18
18
 
19
19
from bzrlib import (
20
 
    errors,
21
20
    repository,
22
21
    )
23
 
from bzrlib.tests import TestSkipped
24
22
from bzrlib.tests.per_repository import TestCaseWithRepository
25
23
 
26
24
 
61
59
        else:
62
60
            # This is ok too.
63
61
            pass
64
 
 
65
 
    def fetch_new_revision_into_concurrent_instance(self, repo, token):
66
 
        """Create a new revision (revid 'new-rev') and fetch it into a
67
 
        concurrent instance of repo.
68
 
        """
69
 
        source = self.make_branch_and_memory_tree('source')
70
 
        source.lock_write()
71
 
        self.addCleanup(source.unlock)
72
 
        source.add([''], ['root-id'])
73
 
        revid = source.commit('foo', rev_id='new-rev')
74
 
        # Force data reading on weaves/knits
75
 
        repo.all_revision_ids()
76
 
        repo.revisions.keys()
77
 
        repo.inventories.keys()
78
 
        # server repo is the instance a smart server might hold for this
79
 
        # repository.
80
 
        server_repo = repo.bzrdir.open_repository()
81
 
        try:
82
 
            server_repo.lock_write(token)
83
 
        except errors.TokenLockingNotSupported:
84
 
            raise TestSkipped('Cannot concurrently insert into repo format %r'
85
 
                % self.repository_format)
86
 
        try:
87
 
            server_repo.fetch(source.branch.repository, revid)
88
 
        finally:
89
 
            server_repo.unlock()
90
 
 
91
 
    def test_refresh_data_after_fetch_new_data_visible(self):
92
 
        repo = self.make_repository('target')
93
 
        token = repo.lock_write().repository_token
94
 
        self.addCleanup(repo.unlock)
95
 
        self.fetch_new_revision_into_concurrent_instance(repo, token)
96
 
        repo.refresh_data()
97
 
        self.assertNotEqual({}, repo.get_graph().get_parent_map(['new-rev']))
98
 
 
99
 
    def test_refresh_data_after_fetch_new_data_visible_in_write_group(self):
100
 
        tree = self.make_branch_and_memory_tree('target')
101
 
        tree.lock_write()
102
 
        self.addCleanup(tree.unlock)
103
 
        tree.add([''], ['root-id'])
104
 
        tree.commit('foo', rev_id='commit-in-target')
105
 
        repo = tree.branch.repository
106
 
        token = repo.lock_write().repository_token
107
 
        self.addCleanup(repo.unlock)
108
 
        repo.start_write_group()
109
 
        self.addCleanup(repo.abort_write_group)
110
 
        self.fetch_new_revision_into_concurrent_instance(repo, token)
111
 
        # Call refresh_data.  It either fails with IsInWriteGroupError, or it
112
 
        # succeeds and the new revisions are visible.
113
 
        try:
114
 
            repo.refresh_data()
115
 
        except repository.IsInWriteGroupError:
116
 
            pass
117
 
        else:
118
 
            self.assertEqual(
119
 
                ['commit-in-target', 'new-rev'],
120
 
                sorted(repo.all_revision_ids()))