16
16
"""Tests for bzr bundle performance."""
21
from StringIO import StringIO
20
from cStringIO import StringIO
23
22
from bzrlib.benchmarks import Benchmark
24
from bzrlib.workingtree import WorkingTree
25
23
from bzrlib.branch import Branch
24
from bzrlib.bundle import read_bundle
26
25
from bzrlib.bundle.serializer import write_bundle
27
from bzrlib.bundle import read_bundle
28
26
from bzrlib.revisionspec import RevisionSpec
30
# if set, creation of test trees will be globally cached (even across test runs)
31
#CACHEDIR = os.path.expanduser("~/.bazaar/devtemp")
34
def cached_make(maker, *args):
39
if not os.path.exists(CACHEDIR):
42
cache_name = "_".join([maker.__name__] + [str(x) for x in args])
43
if not os.path.exists(cache_name):
50
shutil.rmtree(cache_name)
54
for subdir in os.listdir(cache_name):
55
shutil.copytree(os.path.join(cache_name, subdir),
56
os.path.join(olddir, subdir))
27
from bzrlib.workingtree import WorkingTree
60
30
class BundleBenchmark(Benchmark):
31
"""The bundle tests should (also) be done at a lower level with
32
direct call to the bzrlib.
62
The bundle tests should (also) be done at a lower level with
63
direct call to the bzrlib."""
65
def make_kernel_like_tree_committed(self):
66
cached_make(self.make_kernel_like_tree)
35
def make_kernel_like_tree_committed(self):
36
self.make_kernel_like_tree_added()
68
37
self.run_bzr('commit', '-m', 'initial import')
70
39
def test_create_bundle_known_kernel_like_tree(self):
72
Create a bundle for a kernel sized tree with no ignored, unknowns,
73
or added and one commit."""
74
cached_make(self.make_kernel_like_tree_committed)
40
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
41
or added and one commit.
43
self.make_kernel_like_tree_committed()
75
44
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
77
46
def test_create_bundle_many_commit_tree (self):
79
Create a bundle for a tree with many commits but no changes."""
80
cached_make(self.make_many_commit_tree)
47
"""Create a bundle for a tree with many commits but no changes."""
48
self.make_many_commit_tree()
81
49
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
83
51
def test_create_bundle_heavily_merged_tree(self):
85
Create a bundle for a heavily merged tree."""
86
cached_make(self.make_heavily_merged_tree)
52
"""Create a bundle for a heavily merged tree."""
53
self.make_heavily_merged_tree()
87
54
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
89
56
def test_apply_bundle_known_kernel_like_tree(self):
91
Create a bundle for a kernel sized tree with no ignored, unknowns,
92
or added and one commit."""
93
cached_make(self.make_kernel_like_tree_committed)
57
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
58
or added and one commit.
60
self.make_kernel_like_tree_committed()
94
61
f = file('../bundle', 'wb')
96
63
f.write(self.run_bzr('bundle', '--revision', '..-1')[0])
155
122
self.time(read_bundle, bundle_text)
157
124
def test_few_files_small_tree_1_revision(self):
158
cached_make(self.make_parametrized_tree, 5, 1, 5)
125
self.make_parametrized_tree(5, 1, 5)
159
126
self._time_read_write()
161
128
def test_few_files_small_tree_500_revision(self):
162
cached_make(self.make_parametrized_tree, 5, 500, 5)
129
self.make_parametrized_tree(5, 500, 5)
163
130
self._time_read_write()
165
132
def test_few_files_small_tree_1000_revision(self):
166
cached_make(self.make_parametrized_tree, 5, 1000, 5)
133
self.make_parametrized_tree(5, 1000, 5)
167
134
self._time_read_write()
169
136
def test_few_files_moderate_tree_1_revision(self):
170
cached_make(self.make_parametrized_tree, 100, 1, 5)
137
self.make_parametrized_tree(100, 1, 5)
171
138
self._time_read_write()
173
140
def test_few_files_moderate_tree_500_revision(self):
174
cached_make(self.make_parametrized_tree, 100, 500, 5)
141
self.make_parametrized_tree(100, 500, 5)
175
142
self._time_read_write()
177
144
def test_few_files_moderate_tree_1000_revision(self):
178
cached_make(self.make_parametrized_tree, 100, 1000, 5)
145
self.make_parametrized_tree(100, 1000, 5)
179
146
self._time_read_write()
181
148
def test_some_files_moderate_tree_1_revision(self):
182
cached_make(self.make_parametrized_tree, 100, 1, 100)
149
self.make_parametrized_tree(100, 1, 100)
183
150
self._time_read_write()
185
152
def test_some_files_moderate_tree_500_revision(self):
186
cached_make(self.make_parametrized_tree, 100, 500, 100)
153
self.make_parametrized_tree(100, 500, 100)
187
154
self._time_read_write()
189
156
def test_some_files_moderate_tree_1000_revision(self):
190
cached_make(self.make_parametrized_tree, 100, 1000, 100)
157
self.make_parametrized_tree(100, 1000, 100)
191
158
self._time_read_write()
193
160
def test_few_files_big_tree_1_revision(self):
194
cached_make(self.make_parametrized_tree, 1000, 1, 5)
161
self.make_parametrized_tree(1000, 1, 5)
195
162
self._time_read_write()
197
164
def test_few_files_big_tree_500_revision(self):
198
cached_make(self.make_parametrized_tree, 1000, 500, 5)
165
self.make_parametrized_tree(1000, 500, 5)
199
166
self._time_read_write()
201
168
def test_few_files_big_tree_1000_revision(self):
202
cached_make(self.make_parametrized_tree, 1000, 1000, 5)
169
self.make_parametrized_tree(1000, 1000, 5)
203
170
self._time_read_write()
205
172
def test_some_files_big_tree_1_revision(self):
206
cached_make(self.make_parametrized_tree, 1000, 1, 100)
173
self.make_parametrized_tree(1000, 1, 100)
207
174
self._time_read_write()
209
176
def test_some_files_big_tree_500_revision(self):
210
cached_make(self.make_parametrized_tree, 1000, 500, 100)
177
self.make_parametrized_tree(1000, 500, 100)
211
178
self._time_read_write()
213
180
def test_some_files_big_tree_1000_revision(self):
214
cached_make(self.make_parametrized_tree, 1000, 1000, 100)
181
self.make_parametrized_tree(1000, 1000, 100)
215
182
self._time_read_write()
217
184
def test_many_files_big_tree_1_revision(self):
218
cached_make(self.make_parametrized_tree, 1000, 1, 1000)
185
self.make_parametrized_tree(1000, 1, 1000)
219
186
self._time_read_write()
221
188
def test_many_files_big_tree_500_revision(self):
222
cached_make(self.make_parametrized_tree, 1000, 500, 1000)
189
self.make_parametrized_tree(1000, 500, 1000)
223
190
self._time_read_write()
225
192
def test_many_files_big_tree_1000_revision(self):
226
cached_make(self.make_parametrized_tree, 1000, 1000, 1000)
193
self.make_parametrized_tree(1000, 1000, 1000)
227
194
self._time_read_write()