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.
69
source = self.make_branch_and_memory_tree('source')
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()
77
repo.inventories.keys()
78
# server repo is the instance a smart server might hold for this
80
server_repo = repo.bzrdir.open_repository()
82
server_repo.lock_write(token)
83
except errors.TokenLockingNotSupported:
84
raise TestSkipped('Cannot concurrently insert into repo format %r'
85
% self.repository_format)
87
server_repo.fetch(source.branch.repository, revid)
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)
97
self.assertNotEqual({}, repo.get_graph().get_parent_map(['new-rev']))
99
def test_refresh_data_after_fetch_new_data_visible_in_write_group(self):
100
tree = self.make_branch_and_memory_tree('target')
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.
115
except repository.IsInWriteGroupError:
119
['commit-in-target', 'new-rev'],
120
sorted(repo.all_revision_ids()))