/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/benchmarks/bench_bundle.py

Merge reviews.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006 by Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
 
4
# it under the terms of the GNU General Public License version 2 as published by
 
5
# the Free Software Foundation.
7
6
#
8
7
# This program is distributed in the hope that it will be useful,
9
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
11
#
13
12
# You should have received a copy of the GNU General Public License
14
13
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
15
 
17
16
"""Tests for bzr bundle performance."""
18
17
 
21
20
import shutil
22
21
 
23
22
from bzrlib import bzrdir
 
23
from bzrlib.add import smart_add
24
24
from bzrlib.benchmarks import Benchmark
25
25
from bzrlib.branch import Branch
 
26
from bzrlib.bundle import read_bundle
26
27
from bzrlib.bundle.apply_bundle import install_bundle
27
 
from bzrlib.bundle.serializer import read_bundle, write_bundle
 
28
from bzrlib.bundle.serializer import write_bundle
28
29
from bzrlib.revision import NULL_REVISION
29
30
from bzrlib.revisionspec import RevisionSpec
30
31
from bzrlib.workingtree import WorkingTree
32
33
 
33
34
class BundleBenchmark(Benchmark):
34
35
    """Benchmarks for bzr bundle performance and bzr merge with a bundle."""
35
 
 
 
36
   
36
37
    def test_create_bundle_known_kernel_like_tree(self):
37
38
        """Create a bundle for a kernel sized tree with no ignored, unknowns,
38
39
        or added and one commit.
39
 
        """
 
40
        """ 
40
41
        self.make_kernel_like_committed_tree()
41
 
        self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
 
42
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
42
43
 
43
44
    def test_create_bundle_many_commit_tree (self):
44
 
        """Create a bundle for a tree with many commits but no changes."""
 
45
        """Create a bundle for a tree with many commits but no changes.""" 
45
46
        self.make_many_commit_tree()
46
 
        self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
 
47
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
47
48
 
48
49
    def test_create_bundle_heavily_merged_tree(self):
49
 
        """Create a bundle for a heavily merged tree."""
 
50
        """Create a bundle for a heavily merged tree.""" 
50
51
        self.make_heavily_merged_tree()
51
 
        self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
52
 
 
 
52
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
 
53
        
53
54
    def test_apply_bundle_known_kernel_like_tree(self):
54
55
        """Create a bundle for a kernel sized tree with no ignored, unknowns,
55
56
        or added and one commit.
56
 
        """
 
57
        """ 
57
58
        tree = self.make_kernel_like_committed_tree('tree')
58
59
 
59
60
        f = open('bundle', 'wb')
65
66
 
66
67
        tree2 = self.make_branch_and_tree('branch_a')
67
68
        os.chdir('branch_a')
68
 
        self.time(self.run_bzr, ['merge', '../bundle'])
69
 
 
70
 
 
 
69
        self.time(self.run_bzr, 'merge', '../bundle')
 
70
 
71
71
class BundleLibraryLevelWriteBenchmark(Benchmark):
72
72
    """ Benchmarks for the write_bundle library function. """
73
73
 
74
74
    def _time_read_write(self):
 
75
        print "timing"
75
76
        branch, relpath = Branch.open_containing("a")
76
77
        revision_history = branch.revision_history()
77
78
        bundle_text = StringIO()
 
79
        print "starting write bundle"
78
80
        self.time(write_bundle, branch.repository, revision_history[-1],
79
81
                  NULL_REVISION, bundle_text)
 
82
        print "stopped writing bundle"
80
83
        bundle_text.seek(0)
81
84
        target_tree = self.make_branch_and_tree('b')
 
85
        print "starting reading bundle"
82
86
        bundle = self.time(read_bundle, bundle_text)
 
87
        print "starting installing bundle"
83
88
        self.time(install_bundle, target_tree.branch.repository, bundle)
84
89
 
85
90
    def test_few_files_small_tree_1_revision(self):
94
99
        self.commit_some_revisions(tree, files[:5], 100, 1)
95
100
        self._time_read_write()
96
101
 
 
102
    def test_few_files_small_tree_1000_revision(self):
 
103
        os.mkdir("a")
 
104
        tree, files = self.create_with_commits(5, 1, directory_name="a")
 
105
        self.commit_some_revisions(tree, files[:5], 1000, 1)
 
106
        self._time_read_write()
 
107
 
97
108
    def test_few_files_moderate_tree_1_revision(self):
98
109
        os.mkdir("a")
99
110
        tree, files = self.create_with_commits(100, 1, directory_name="a")
106
117
        self.commit_some_revisions(tree, files[:5], 100, 1)
107
118
        self._time_read_write()
108
119
 
 
120
    def test_few_files_moderate_tree_1000_revision(self):
 
121
        os.mkdir("a")
 
122
        tree, files = self.create_with_commits(100, 1, directory_name="a")
 
123
        self.commit_some_revisions(tree, files[:5], 1000, 1)
 
124
        self._time_read_write()
 
125
 
109
126
    def test_some_files_moderate_tree_1_revision(self):
110
127
        os.mkdir("a")
111
128
        tree, files = self.create_with_commits(100, 1, directory_name="a")
112
129
        self.commit_some_revisions(tree, files[:100], 1, 1)
113
130
        self._time_read_write()
114
131
 
 
132
    def test_some_files_moderate_tree_100_revision(self):
 
133
        os.mkdir("a")
 
134
        tree, files = self.create_with_commits(100, 1, directory_name="a")
 
135
        self.commit_some_revisions(tree, files[:100], 100, 1)
 
136
        self._time_read_write()
 
137
 
 
138
    def test_some_files_moderate_tree_1000_revision(self):
 
139
        os.mkdir("a")
 
140
        tree, files = self.create_with_commits(100, 1, directory_name="a")
 
141
        self.commit_some_revisions(tree, files[:100], 1000, 1)
 
142
        self._time_read_write()
 
143
 
115
144
    def test_few_files_big_tree_1_revision(self):
116
145
        os.mkdir("a")
117
146
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
118
147
        self.commit_some_revisions(tree, files[:5], 1, 1)
119
148
        self._time_read_write()
120
149
 
 
150
    def test_few_files_big_tree_100_revision(self):
 
151
        os.mkdir("a")
 
152
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
153
        self.commit_some_revisions(tree, files[:5], 100, 1)
 
154
        self._time_read_write()
 
155
 
 
156
    def test_few_files_big_tree_1000_revision(self):
 
157
        os.mkdir("a")
 
158
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
159
        self.commit_some_revisions(tree, files[:5], 1000, 1)
 
160
        self._time_read_write()
 
161
 
121
162
    def test_some_files_big_tree_1_revision(self):
122
163
        os.mkdir("a")
123
164
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
124
165
        self.commit_some_revisions(tree, files[:100], 1, 1)
125
166
        self._time_read_write()
126
167
 
 
168
    def test_some_files_big_tree_100_revision(self):
 
169
        os.mkdir("a")
 
170
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
171
        self.commit_some_revisions(tree, files[:100], 100, 1)
 
172
        self._time_read_write()
 
173
 
 
174
    def test_some_files_big_tree_1000_revision(self):
 
175
        os.mkdir("a")
 
176
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
177
        self.commit_some_revisions(tree, files[:100], 1000, 1)
 
178
        self._time_read_write()
 
179
 
 
180
    def test_many_files_big_tree_1_revision(self):
 
181
        os.mkdir("a")
 
182
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
183
        self.commit_some_revisions(tree, files[:1000], 1, 1)
 
184
        self._time_read_write()
 
185
 
 
186
    def test_many_files_big_tree_100_revision(self):
 
187
        os.mkdir("a")
 
188
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
189
        self.commit_some_revisions(tree, files[:1000], 100, 1)
 
190
        self._time_read_write()
 
191
 
 
192
    def test_many_files_big_tree_1000_revision(self):
 
193
        os.mkdir("a")
 
194
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
195
        self.commit_some_revisions(tree, files[:1000], 1000, 1)
 
196
        self._time_read_write()
127
197
 
128
198
class BundleLibraryLevelInstallBenchmark(Benchmark):
129
199
    """ Benchmarks for the install_bundle library function. """
169
239
        self.commit_some_revisions(tree, files[:100], 1, 1)
170
240
        self._time_read_write()
171
241
 
 
242
    def test_some_files_moderate_tree_100_revision(self):
 
243
        os.mkdir("a")
 
244
        tree, files = self.create_with_commits(100, 1, directory_name="a")
 
245
        self.commit_some_revisions(tree, files[:100], 100, 1)
 
246
        self._time_read_write()
 
247
 
172
248
    def test_few_files_big_tree_1_revision(self):
173
249
        os.mkdir("a")
174
250
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
175
251
        self.commit_some_revisions(tree, files[:5], 1, 1)
176
252
        self._time_read_write()
177
253
 
 
254
    def test_few_files_big_tree_100_revision(self):
 
255
        os.mkdir("a")
 
256
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
257
        self.commit_some_revisions(tree, files[:5], 100, 1)
 
258
        self._time_read_write()
 
259
 
178
260
    def test_some_files_big_tree_1_revision(self):
179
261
        os.mkdir("a")
180
262
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
181
263
        self.commit_some_revisions(tree, files[:100], 1, 1)
182
264
        self._time_read_write()
183
265
 
 
266
    def test_some_files_big_tree_100_revision(self):
 
267
        os.mkdir("a")
 
268
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
269
        self.commit_some_revisions(tree, files[:100], 100, 1)
 
270
        self._time_read_write()
 
271
 
 
272
    def test_many_files_big_tree_1_revision(self):
 
273
        os.mkdir("a")
 
274
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
275
        self.commit_some_revisions(tree, files[:1000], 1, 1)
 
276
        self._time_read_write()
 
277
 
 
278
    def test_many_files_big_tree_100_revision(self):
 
279
        os.mkdir("a")
 
280
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
 
281
        self.commit_some_revisions(tree, files[:1000], 100, 1)
 
282
        self._time_read_write()
 
283
 
184
284
 
185
285
if __name__ == '__main__':
186
 
    # USE the following if you want to regenerate the above test functions
 
286
    # USE the following if you want to regenerate the above test functions 
187
287
    for treesize, treesize_h in [(5, "small"), (100, "moderate"),
188
288
                                 (1000, "big")]:
189
 
        for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some")]:
 
289
        for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some"),
 
290
                                           (1000, "many")]:
190
291
            if bundlefiles > treesize:
191
292
                continue
192
 
            for num_revisions in [1, 100]:
193
 
                if (num_revisions >= 100 and
194
 
                        (bundlefiles >= 100 or treesize >= 1000)):
195
 
                    # Skip the 100x100x? tests.
196
 
                    # And the 100x?x1000
197
 
                    continue
 
293
            for num_revisions in [1, 100, 1000]:
198
294
                code = """\
199
295
    def test_%s_files_%s_tree_%s_revision(self):
200
296
        os.mkdir("a")
205
301
       treesize, bundlefiles, num_revisions)
206
302
                print code
207
303
 
 
304
 
 
305