71
73
class BundleLibraryLevelBenchmark(Benchmark):
73
def make_parametrized_tree(self, num_files, num_revisions,
75
"""Create a tree with given parameters. Always creates 2 levels of
76
directories with the given number of files. Then the given number of
77
revisions are created, changing some lines in one files in each
78
revision. Only num_files_in_bundle files are changed in these
81
:param num_files: number of files in tree
82
:param num_revisions: number of revisions
83
:param num_files_in_bundle: number of files changed in the revisions
88
for outer in range(num_files // 64 + 1):
89
directories.append("%s/" % outer)
90
for middle in range(8):
91
prefix = "%s/%s/" % (outer, middle)
92
directories.append(prefix)
93
for filename in range(min(8, num_files - count)):
95
files.append(prefix + str(filename))
97
self.build_tree(directories + files)
99
self.run_bzr('add', d)
100
self.run_bzr('commit', '-m', 'initial repo layout')
102
affected_files = files[:num_files_in_bundle]
104
for changes_file in range(num_revisions // num_files_in_bundle + 1):
105
for f in affected_files:
107
if count >= num_revisions:
109
content = "\n".join([str(i) for i in range(changes_file)] +
110
[str(changes_file)] * 5) + "\n"
111
self.build_tree_contents([(f, content)])
112
self.run_bzr("commit", '-m', 'some changes')
113
assert count >= num_revisions
115
75
def _time_read_write(self):
116
branch, relpath = Branch.open_containing(".")
76
branch, relpath = Branch.open_containing("a")
117
77
revision_history = branch.revision_history()
118
78
bundle_text = StringIO()
119
79
self.time(write_bundle, branch.repository, revision_history[-1],
122
82
self.time(read_bundle, bundle_text)
124
84
def test_few_files_small_tree_1_revision(self):
125
self.make_parametrized_tree(5, 1, 5)
86
tree, files = self.create_with_commits(5, 1, directory_name="a")
87
self.commit_some_revisions(tree, files[:5], 1, 1)
126
88
self._time_read_write()
128
90
def test_few_files_small_tree_500_revision(self):
129
self.make_parametrized_tree(5, 500, 5)
92
tree, files = self.create_with_commits(5, 1, directory_name="a")
93
self.commit_some_revisions(tree, files[:5], 500, 1)
130
94
self._time_read_write()
132
96
def test_few_files_small_tree_1000_revision(self):
133
self.make_parametrized_tree(5, 1000, 5)
98
tree, files = self.create_with_commits(5, 1, directory_name="a")
99
self.commit_some_revisions(tree, files[:5], 1000, 1)
134
100
self._time_read_write()
136
102
def test_few_files_moderate_tree_1_revision(self):
137
self.make_parametrized_tree(100, 1, 5)
104
tree, files = self.create_with_commits(100, 1, directory_name="a")
105
self.commit_some_revisions(tree, files[:5], 1, 1)
138
106
self._time_read_write()
140
108
def test_few_files_moderate_tree_500_revision(self):
141
self.make_parametrized_tree(100, 500, 5)
110
tree, files = self.create_with_commits(100, 1, directory_name="a")
111
self.commit_some_revisions(tree, files[:5], 500, 1)
142
112
self._time_read_write()
144
114
def test_few_files_moderate_tree_1000_revision(self):
145
self.make_parametrized_tree(100, 1000, 5)
116
tree, files = self.create_with_commits(100, 1, directory_name="a")
117
self.commit_some_revisions(tree, files[:5], 1000, 1)
146
118
self._time_read_write()
148
120
def test_some_files_moderate_tree_1_revision(self):
149
self.make_parametrized_tree(100, 1, 100)
122
tree, files = self.create_with_commits(100, 1, directory_name="a")
123
self.commit_some_revisions(tree, files[:100], 1, 1)
150
124
self._time_read_write()
152
126
def test_some_files_moderate_tree_500_revision(self):
153
self.make_parametrized_tree(100, 500, 100)
128
tree, files = self.create_with_commits(100, 1, directory_name="a")
129
self.commit_some_revisions(tree, files[:100], 500, 1)
154
130
self._time_read_write()
156
132
def test_some_files_moderate_tree_1000_revision(self):
157
self.make_parametrized_tree(100, 1000, 100)
134
tree, files = self.create_with_commits(100, 1, directory_name="a")
135
self.commit_some_revisions(tree, files[:100], 1000, 1)
158
136
self._time_read_write()
160
138
def test_few_files_big_tree_1_revision(self):
161
self.make_parametrized_tree(1000, 1, 5)
140
tree, files = self.create_with_commits(1000, 1, directory_name="a")
141
self.commit_some_revisions(tree, files[:5], 1, 1)
162
142
self._time_read_write()
164
144
def test_few_files_big_tree_500_revision(self):
165
self.make_parametrized_tree(1000, 500, 5)
146
tree, files = self.create_with_commits(1000, 1, directory_name="a")
147
self.commit_some_revisions(tree, files[:5], 500, 1)
166
148
self._time_read_write()
168
150
def test_few_files_big_tree_1000_revision(self):
169
self.make_parametrized_tree(1000, 1000, 5)
152
tree, files = self.create_with_commits(1000, 1, directory_name="a")
153
self.commit_some_revisions(tree, files[:5], 1000, 1)
170
154
self._time_read_write()
172
156
def test_some_files_big_tree_1_revision(self):
173
self.make_parametrized_tree(1000, 1, 100)
158
tree, files = self.create_with_commits(1000, 1, directory_name="a")
159
self.commit_some_revisions(tree, files[:100], 1, 1)
174
160
self._time_read_write()
176
162
def test_some_files_big_tree_500_revision(self):
177
self.make_parametrized_tree(1000, 500, 100)
164
tree, files = self.create_with_commits(1000, 1, directory_name="a")
165
self.commit_some_revisions(tree, files[:100], 500, 1)
178
166
self._time_read_write()
180
168
def test_some_files_big_tree_1000_revision(self):
181
self.make_parametrized_tree(1000, 1000, 100)
170
tree, files = self.create_with_commits(1000, 1, directory_name="a")
171
self.commit_some_revisions(tree, files[:100], 1000, 1)
182
172
self._time_read_write()
184
174
def test_many_files_big_tree_1_revision(self):
185
self.make_parametrized_tree(1000, 1, 1000)
176
tree, files = self.create_with_commits(1000, 1, directory_name="a")
177
self.commit_some_revisions(tree, files[:1000], 1, 1)
186
178
self._time_read_write()
188
180
def test_many_files_big_tree_500_revision(self):
189
self.make_parametrized_tree(1000, 500, 1000)
182
tree, files = self.create_with_commits(1000, 1, directory_name="a")
183
self.commit_some_revisions(tree, files[:1000], 500, 1)
190
184
self._time_read_write()
192
186
def test_many_files_big_tree_1000_revision(self):
193
self.make_parametrized_tree(1000, 1000, 1000)
188
tree, files = self.create_with_commits(1000, 1, directory_name="a")
189
self.commit_some_revisions(tree, files[:1000], 1000, 1)
194
190
self._time_read_write()