~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/benchmarks/bench_bundle.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-10-16 10:03:21 UTC
  • mfrom: (1988.4.6 dotted-revno-input.)
  • Revision ID: pqm@pqm.ubuntu.com-20061016100321-c4951c9fc020dbd0
(Robert Collins) Output dotted decimal revision numbers during log, and accept them as revision specifiers.

Show diffs side-by-side

added added

removed removed

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