~bzr-pqm/bzr/bzr.dev

5273.1.7 by Vincent Ladeuil
No more use of the get_transport imported *symbol*, all uses are through
1
# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
1714.1.6 by Robert Collins
Add commit benchmark source file.
2
#
3
# This program is free software; you can redistribute it and/or modify
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
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.
1714.1.6 by Robert Collins
Add commit benchmark source file.
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1714.1.6 by Robert Collins
Add commit benchmark source file.
16
17
"""Benchmarks of bzr commit."""
18
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
19
import os
1714.1.6 by Robert Collins
Add commit benchmark source file.
20
21
from bzrlib.benchmarks import Benchmark
1725.2.5 by Robert Collins
Bugfix create_branch_convenience at the root of a file system to not loop
22
from bzrlib.transport.memory import MemoryServer
1714.1.6 by Robert Collins
Add commit benchmark source file.
23
24
1714.1.7 by Robert Collins
Review feedback.
25
class CommitBenchmark(Benchmark):
2399.1.7 by John Arbash Meinel
Cleanup bzrlib/benchmarks/* so that everything at least has a valid doc string.
26
    """Benchmarks for ``bzr commit``"""
1714.1.6 by Robert Collins
Add commit benchmark source file.
27
28
    def test_commit_kernel_like_tree(self):
29
        """Commit of a fresh import of a clean kernel sized tree."""
1908.4.14 by John Arbash Meinel
Restore comment about using a memory server for .bzr/
30
        # uncomment this to run the benchmark with the repository in memory
31
        # not disk
32
        # self.transport_server = MemoryServer
33
        # self.make_kernel_like_tree(self.get_url())
1908.2.18 by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark
34
        tree = self.make_kernel_like_added_tree()
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
35
        self.time(self.run_bzr, ['commit', '-m', 'first post'])
1868.1.2 by Jan Balster
benchmark for "bzr commit single_file" in a kernel like tree
36
1908.2.7 by John Arbash Meinel
Update the benchmarks to actually use the cached trees
37
    def test_partial_commit_kernel_like_tree(self):
38
        """Commit of 1/8th of a fresh import of a clean kernel sized tree."""
1908.2.18 by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark
39
        tree = self.make_kernel_like_added_tree()
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
40
        self.time(self.run_bzr, ['commit', '-m', 'first post', '1'])
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
41
42
    def test_no_op_commit_in_kernel_like_tree(self):
43
        """Run commit --unchanged in a kernel sized tree"""
44
        tree = self.make_kernel_like_committed_tree()
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
45
        self.time(self.run_bzr, ['commit', '-m', 'no changes', '--unchanged'])
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
46
1908.4.13 by John Arbash Meinel
Clean up commit benchmarks now that caching is not always available
47
    def test_commit_one_in_kernel_like_tree(self):
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
48
        """Time committing a single change, when not directly specified"""
49
        tree = self.make_kernel_like_committed_tree()
50
51
        # working-tree is hardlinked, so replace a file and commit the change
52
        os.remove('4/4/4/4')
53
        open('4/4/4/4', 'wb').write('new contents\n')
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
54
        self.time(self.run_bzr, ['commit', '-m', 'second'])
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
55
1908.4.13 by John Arbash Meinel
Clean up commit benchmarks now that caching is not always available
56
    def test_partial_commit_one_in_kernel_like_tree(self):
57
        """Time committing a single change when it is directly specified"""
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
58
        tree = self.make_kernel_like_committed_tree()
59
60
        # working-tree is hardlinked, so replace a file and commit the change
61
        os.remove('4/4/4/4')
62
        open('4/4/4/4', 'wb').write('new contents\n')
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
63
        self.time(self.run_bzr, ['commit', '-m', 'second', '4/4/4/4'])
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
64
65
    def make_simple_tree(self):
66
        """A small, simple tree. No caching needed"""
67
        tree = self.make_branch_and_tree('.')
68
        self.build_tree(['a', 'b/', 'b/c'])
69
        tree.add(['a', 'b', 'b/c'])
70
        return tree
71
72
    def test_cmd_commit(self):
73
        """Test execution of simple commit"""
74
        tree = self.make_simple_tree()
2644.2.1 by Lukáš Lalinský
Fix deprecation warnings on benchmarks.
75
        self.time(self.run_bzr, ['commit', '-m', 'init simple tree'])
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
76
77
    def test_cmd_commit_subprocess(self):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
78
        """Text startup and execution of a simple commit."""
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
79
        tree = self.make_simple_tree()
80
        self.time(self.run_bzr_subprocess, 'commit', '-m', 'init simple tree')