/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.4 by John Arbash Meinel
[merge] bzr.dev
1
# Copyright (C) 2006 Canonical Ltd
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
2
#
3
# This program is free software; you can redistribute it and/or modify
2052.3.4 by John Arbash Meinel
[merge] bzr.dev
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.
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Tests for bzr bundle performance."""
18
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
19
from cStringIO import StringIO
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
20
import os
1908.8.3 by Carl Friedrich Bolz
(cfbolz, hpk): Add caching mechanism and add benchmark for bundle-reading.
21
import shutil
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
22
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
23
from bzrlib import bzrdir
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
24
from bzrlib.add import smart_add
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
25
from bzrlib.benchmarks import Benchmark
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
26
from bzrlib.branch import Branch
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
27
from bzrlib.bundle.apply_bundle import install_bundle
2095.2.1 by John Arbash Meinel
Fix imports for bundles.
28
from bzrlib.bundle.serializer import read_bundle, write_bundle
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
29
from bzrlib.revision import NULL_REVISION
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
30
from bzrlib.revisionspec import RevisionSpec
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
31
from bzrlib.workingtree import WorkingTree
32
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
33
34
class BundleBenchmark(Benchmark):
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
35
    """Benchmarks for bzr bundle performance and bzr merge with a bundle."""
1908.8.5 by holger krekel
route more creation code through cached_make
36
   
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
37
    def test_create_bundle_known_kernel_like_tree(self):
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
38
        """Create a bundle for a kernel sized tree with no ignored, unknowns,
39
        or added and one commit.
40
        """ 
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
41
        self.make_kernel_like_committed_tree()
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
42
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
43
44
    def test_create_bundle_many_commit_tree (self):
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
45
        """Create a bundle for a tree with many commits but no changes.""" 
46
        self.make_many_commit_tree()
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
47
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
48
49
    def test_create_bundle_heavily_merged_tree(self):
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
50
        """Create a bundle for a heavily merged tree.""" 
51
        self.make_heavily_merged_tree()
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
52
        self.time(self.run_bzr, 'bundle', '--revision', '..-1')
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
53
        
1908.3.3 by Carl Friedrich Bolz
Add benchmark for applying a benchmark and fix some formatting/typos.
54
    def test_apply_bundle_known_kernel_like_tree(self):
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
55
        """Create a bundle for a kernel sized tree with no ignored, unknowns,
56
        or added and one commit.
57
        """ 
1908.10.1 by Carl Friedrich Bolz
Fix make_kernel_like_tree_committed, which does not exist any more :-(.
58
        tree = self.make_kernel_like_committed_tree('tree')
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
59
60
        f = open('bundle', 'wb')
1908.3.3 by Carl Friedrich Bolz
Add benchmark for applying a benchmark and fix some formatting/typos.
61
        try:
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
62
            write_bundle(tree.branch.repository, tree.last_revision(),
63
                         NULL_REVISION, f)
1908.3.3 by Carl Friedrich Bolz
Add benchmark for applying a benchmark and fix some formatting/typos.
64
        finally:
65
            f.close()
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
66
67
        tree2 = self.make_branch_and_tree('branch_a')
68
        os.chdir('branch_a')
1908.3.3 by Carl Friedrich Bolz
Add benchmark for applying a benchmark and fix some formatting/typos.
69
        self.time(self.run_bzr, 'merge', '../bundle')
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
70
 
2097.1.1 by John Arbash Meinel
Don't run 1000 revision bundle tests
71
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
72
class BundleLibraryLevelWriteBenchmark(Benchmark):
73
    """ Benchmarks for the write_bundle library function. """
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
74
1908.3.8 by holger krekel
Explicitely generate test functions.
75
    def _time_read_write(self):
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
76
        print "timing"
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
77
        branch, relpath = Branch.open_containing("a")
1908.3.8 by holger krekel
Explicitely generate test functions.
78
        revision_history = branch.revision_history()
79
        bundle_text = StringIO()
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
80
        print "starting write bundle"
1908.3.8 by holger krekel
Explicitely generate test functions.
81
        self.time(write_bundle, branch.repository, revision_history[-1],
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
82
                  NULL_REVISION, bundle_text)
83
        print "stopped writing bundle"
1908.3.8 by holger krekel
Explicitely generate test functions.
84
        bundle_text.seek(0)
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
85
        target_tree = self.make_branch_and_tree('b')
86
        print "starting reading bundle"
87
        bundle = self.time(read_bundle, bundle_text)
88
        print "starting installing bundle"
89
        self.time(install_bundle, target_tree.branch.repository, bundle)
1908.3.8 by holger krekel
Explicitely generate test functions.
90
91
    def test_few_files_small_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
92
        os.mkdir("a")
93
        tree, files = self.create_with_commits(5, 1, directory_name="a")
94
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
95
        self._time_read_write()
96
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
97
    def test_few_files_small_tree_100_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
98
        os.mkdir("a")
99
        tree, files = self.create_with_commits(5, 1, directory_name="a")
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
100
        self.commit_some_revisions(tree, files[:5], 100, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
101
        self._time_read_write()
102
103
    def test_few_files_moderate_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
104
        os.mkdir("a")
105
        tree, files = self.create_with_commits(100, 1, directory_name="a")
106
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
107
        self._time_read_write()
108
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
109
    def test_few_files_moderate_tree_100_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
110
        os.mkdir("a")
111
        tree, files = self.create_with_commits(100, 1, directory_name="a")
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
112
        self.commit_some_revisions(tree, files[:5], 100, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
113
        self._time_read_write()
114
115
    def test_some_files_moderate_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
116
        os.mkdir("a")
117
        tree, files = self.create_with_commits(100, 1, directory_name="a")
118
        self.commit_some_revisions(tree, files[:100], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
119
        self._time_read_write()
120
121
    def test_few_files_big_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
122
        os.mkdir("a")
123
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
124
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
125
        self._time_read_write()
126
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
127
    def test_few_files_big_tree_100_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
128
        os.mkdir("a")
129
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
130
        self.commit_some_revisions(tree, files[:5], 100, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
131
        self._time_read_write()
132
133
    def test_some_files_big_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
134
        os.mkdir("a")
135
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
136
        self.commit_some_revisions(tree, files[:100], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
137
        self._time_read_write()
138
139
140
1908.3.17 by Carl Friedrich Bolz
Fix bundle benchmarks: don't do install_bundle on too many revisions: takes way
141
class BundleLibraryLevelInstallBenchmark(Benchmark):
142
    """ Benchmarks for the install_bundle library function. """
143
144
    def _time_read_write(self):
145
        branch, relpath = Branch.open_containing("a")
146
        revision_history = branch.revision_history()
147
        bundle_text = StringIO()
148
        write_bundle(branch.repository, revision_history[-1],
149
                     NULL_REVISION, bundle_text)
150
        bundle_text.seek(0)
151
        target_tree = self.make_branch_and_tree('b')
152
        bundle = self.time(read_bundle, bundle_text)
153
        self.time(install_bundle, target_tree.branch.repository, bundle)
154
155
    def test_few_files_small_tree_1_revision(self):
156
        os.mkdir("a")
157
        tree, files = self.create_with_commits(5, 1, directory_name="a")
158
        self.commit_some_revisions(tree, files[:5], 1, 1)
159
        self._time_read_write()
160
161
    def test_few_files_small_tree_100_revision(self):
162
        os.mkdir("a")
163
        tree, files = self.create_with_commits(5, 1, directory_name="a")
164
        self.commit_some_revisions(tree, files[:5], 100, 1)
165
        self._time_read_write()
166
167
    def test_few_files_moderate_tree_1_revision(self):
168
        os.mkdir("a")
169
        tree, files = self.create_with_commits(100, 1, directory_name="a")
170
        self.commit_some_revisions(tree, files[:5], 1, 1)
171
        self._time_read_write()
172
173
    def test_few_files_moderate_tree_100_revision(self):
174
        os.mkdir("a")
175
        tree, files = self.create_with_commits(100, 1, directory_name="a")
176
        self.commit_some_revisions(tree, files[:5], 100, 1)
177
        self._time_read_write()
178
179
    def test_some_files_moderate_tree_1_revision(self):
180
        os.mkdir("a")
181
        tree, files = self.create_with_commits(100, 1, directory_name="a")
182
        self.commit_some_revisions(tree, files[:100], 1, 1)
183
        self._time_read_write()
184
185
    def test_few_files_big_tree_1_revision(self):
186
        os.mkdir("a")
187
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
188
        self.commit_some_revisions(tree, files[:5], 1, 1)
189
        self._time_read_write()
190
191
    def test_few_files_big_tree_100_revision(self):
192
        os.mkdir("a")
193
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
194
        self.commit_some_revisions(tree, files[:5], 100, 1)
195
        self._time_read_write()
196
197
    def test_some_files_big_tree_1_revision(self):
198
        os.mkdir("a")
199
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
200
        self.commit_some_revisions(tree, files[:100], 1, 1)
201
        self._time_read_write()
202
1908.3.8 by holger krekel
Explicitely generate test functions.
203
204
if __name__ == '__main__':
205
    # USE the following if you want to regenerate the above test functions 
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
206
    for treesize, treesize_h in [(5, "small"), (100, "moderate"),
207
                                 (1000, "big")]:
2097.1.1 by John Arbash Meinel
Don't run 1000 revision bundle tests
208
        for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some")]:
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
209
            if bundlefiles > treesize:
210
                continue
2097.1.1 by John Arbash Meinel
Don't run 1000 revision bundle tests
211
            for num_revisions in [1, 100]:
2097.1.2 by John Arbash Meinel
Skip the 100x100 bundle benchmarks
212
                if num_revisions == 100 and bundlefiles == 100:
213
                    # Skip the 100x100 tests.
214
                    continue
1908.3.8 by holger krekel
Explicitely generate test functions.
215
                code = """\
216
    def test_%s_files_%s_tree_%s_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
217
        os.mkdir("a")
218
        tree, files = self.create_with_commits(%s, 1, directory_name="a")
219
        self.commit_some_revisions(tree, files[:%s], %s, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
220
        self._time_read_write()
221
""" % (bundlefiles_h, treesize_h, num_revisions,
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
222
       treesize, bundlefiles, num_revisions)
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
223
                print code
1908.8.3 by Carl Friedrich Bolz
(cfbolz, hpk): Add caching mechanism and add benchmark for bundle-reading.
224