1
# Copyright (C) 2009, 2010 Canonical Ltd
1
# Copyright (C) 2009 Canonical Ltd
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
45
45
self.addCleanup(repo.unlock)
46
46
repo.refresh_data()
48
def test_refresh_data_in_write_group(self):
49
# refresh_data may either succeed or raise IsInWriteGroupError during a
48
def test_refresh_data_in_write_group_errors(self):
51
49
repo = self.make_repository('.')
53
51
self.addCleanup(repo.unlock)
54
52
repo.start_write_group()
55
53
self.addCleanup(repo.abort_write_group)
58
except repository.IsInWriteGroupError:
54
# No flow control anticipated, BzrError is enough
55
self.assertRaises(errors.BzrError, repo.refresh_data)
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')
57
def test_refresh_data_after_fetch_new_data_visible(self):
58
source = self.make_branch_and_tree('source')
59
revid = source.commit('foo')
60
repo = self.make_repository('target')
61
token = repo.lock_write()
62
self.addCleanup(repo.unlock)
74
63
# Force data reading on weaves/knits
75
repo.all_revision_ids()
76
64
repo.revisions.keys()
77
65
repo.inventories.keys()
78
66
# server repo is the instance a smart server might hold for this
87
75
server_repo.fetch(source.branch.repository, revid)
89
77
server_repo.unlock()
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
78
repo.refresh_data()
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()))
79
self.assertNotEqual({}, repo.get_graph().get_parent_map([revid]))