/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
1
# Copyright (C) 2006 by Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License version 2 as published by
5
# the Free Software Foundation.
6
#
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
# GNU General Public License for more details.
11
#
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
16
"""Tests for bzr bundle performance."""
17
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
18
from cStringIO import StringIO
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
19
import os
1908.8.3 by Carl Friedrich Bolz
(cfbolz, hpk): Add caching mechanism and add benchmark for bundle-reading.
20
import shutil
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
21
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
22
from bzrlib import bzrdir
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
23
from bzrlib.add import smart_add
1868.1.5 by Jan Balster
benchmarks for "bzr bundle --revision ..-1"
24
from bzrlib.benchmarks import Benchmark
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
25
from bzrlib.branch import Branch
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
26
from bzrlib.bundle import read_bundle
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
27
from bzrlib.bundle.apply_bundle import install_bundle
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
28
from bzrlib.bundle.serializer import 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.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
58
        tree = self.make_kernel_like_tree_committed('tree')
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
 
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
71
class BundleLibraryLevelWriteBenchmark(Benchmark):
72
    """ Benchmarks for the write_bundle library function. """
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
73
1908.3.8 by holger krekel
Explicitely generate test functions.
74
    def _time_read_write(self):
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
75
        print "timing"
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
76
        branch, relpath = Branch.open_containing("a")
1908.3.8 by holger krekel
Explicitely generate test functions.
77
        revision_history = branch.revision_history()
78
        bundle_text = StringIO()
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
79
        print "starting write bundle"
1908.3.8 by holger krekel
Explicitely generate test functions.
80
        self.time(write_bundle, branch.repository, revision_history[-1],
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
81
                  NULL_REVISION, bundle_text)
82
        print "stopped writing bundle"
1908.3.8 by holger krekel
Explicitely generate test functions.
83
        bundle_text.seek(0)
1908.3.15 by Carl Friedrich Bolz
Fix problems pointed out by John:
84
        target_tree = self.make_branch_and_tree('b')
85
        print "starting reading bundle"
86
        bundle = self.time(read_bundle, bundle_text)
87
        print "starting installing bundle"
88
        self.time(install_bundle, target_tree.branch.repository, bundle)
1908.3.8 by holger krekel
Explicitely generate test functions.
89
90
    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.
91
        os.mkdir("a")
92
        tree, files = self.create_with_commits(5, 1, directory_name="a")
93
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
94
        self._time_read_write()
95
96
    def test_few_files_small_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
97
        os.mkdir("a")
98
        tree, files = self.create_with_commits(5, 1, directory_name="a")
99
        self.commit_some_revisions(tree, files[:5], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
100
        self._time_read_write()
101
102
    def test_few_files_small_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
106
        self._time_read_write()
107
108
    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.
109
        os.mkdir("a")
110
        tree, files = self.create_with_commits(100, 1, directory_name="a")
111
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
112
        self._time_read_write()
113
114
    def test_few_files_moderate_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
115
        os.mkdir("a")
116
        tree, files = self.create_with_commits(100, 1, directory_name="a")
117
        self.commit_some_revisions(tree, files[:5], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
118
        self._time_read_write()
119
120
    def test_few_files_moderate_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
124
        self._time_read_write()
125
126
    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.
127
        os.mkdir("a")
128
        tree, files = self.create_with_commits(100, 1, directory_name="a")
129
        self.commit_some_revisions(tree, files[:100], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
130
        self._time_read_write()
131
132
    def test_some_files_moderate_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
133
        os.mkdir("a")
134
        tree, files = self.create_with_commits(100, 1, directory_name="a")
135
        self.commit_some_revisions(tree, files[:100], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
136
        self._time_read_write()
137
138
    def test_some_files_moderate_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
142
        self._time_read_write()
143
144
    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.
145
        os.mkdir("a")
146
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
147
        self.commit_some_revisions(tree, files[:5], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
148
        self._time_read_write()
149
150
    def test_few_files_big_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
151
        os.mkdir("a")
152
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
153
        self.commit_some_revisions(tree, files[:5], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
154
        self._time_read_write()
155
156
    def test_few_files_big_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
160
        self._time_read_write()
161
162
    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.
163
        os.mkdir("a")
164
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
165
        self.commit_some_revisions(tree, files[:100], 1, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
166
        self._time_read_write()
167
168
    def test_some_files_big_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
169
        os.mkdir("a")
170
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
171
        self.commit_some_revisions(tree, files[:100], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
172
        self._time_read_write()
173
174
    def test_some_files_big_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
178
        self._time_read_write()
179
180
    def test_many_files_big_tree_1_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
184
        self._time_read_write()
185
186
    def test_many_files_big_tree_500_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
187
        os.mkdir("a")
188
        tree, files = self.create_with_commits(1000, 1, directory_name="a")
189
        self.commit_some_revisions(tree, files[:1000], 500, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
190
        self._time_read_write()
191
192
    def test_many_files_big_tree_1000_revision(self):
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
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)
1908.3.8 by holger krekel
Explicitely generate test functions.
196
        self._time_read_write()
197
198
199
if __name__ == '__main__':
200
    # USE the following if you want to regenerate the above test functions 
1908.8.1 by Carl Friedrich Bolz
low level bundle tests.
201
    for treesize, treesize_h in [(5, "small"), (100, "moderate"),
202
                                 (1000, "big")]:
203
        for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some"),
204
                                           (1000, "many")]:
205
            if bundlefiles > treesize:
206
                continue
207
            for num_revisions in [1, 500, 1000]:
1908.3.8 by holger krekel
Explicitely generate test functions.
208
                code = """\
209
    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.
210
        os.mkdir("a")
211
        tree, files = self.create_with_commits(%s, 1, directory_name="a")
212
        self.commit_some_revisions(tree, files[:%s], %s, 1)
1908.3.8 by holger krekel
Explicitely generate test functions.
213
        self._time_read_write()
214
""" % (bundlefiles_h, treesize_h, num_revisions,
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
215
       treesize, bundlefiles, num_revisions)
1908.3.12 by Carl Friedrich Bolz
Fix docstrings and other things to be PEP 8 compatible. Removed caching of
216
                print code
1908.8.3 by Carl Friedrich Bolz
(cfbolz, hpk): Add caching mechanism and add benchmark for bundle-reading.
217
1908.3.14 by Carl Friedrich Bolz
Refactor the bundle benchmarks to use the existing helper functions.
218