/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_log.py

  • Committer: Aaron Bentley
  • Date: 2006-06-21 21:35:06 UTC
  • mfrom: (1803 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1804.
  • Revision ID: abentley@panoramicfeedback.com-20060621213506-e58c1f9dc1a6d6d2
Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from bzrlib.benchmarks import Benchmark
22
22
from bzrlib.log import log_formatter, show_log
23
23
from bzrlib.osutils import pathjoin
24
 
from StringIO import StringIO
 
24
from cStringIO import StringIO
25
25
from bzrlib.transform import TreeTransform
26
26
from bzrlib.workingtree import WorkingTree
27
27
 
 
28
class LinesDone(Exception):
 
29
    pass
 
30
 
 
31
class LineConsumer(object):
 
32
 
 
33
    def __init__(self, required_lines):
 
34
        self.required_lines = required_lines
 
35
 
 
36
    def write(self, text):
 
37
        self.required_lines -= text.count('\n')
 
38
        if self.required_lines < 0:
 
39
            raise LinesDone()
 
40
        
 
41
 
28
42
class LogBenchmark(Benchmark):
29
43
 
30
44
    def test_log(self):
31
 
        """Canonicalizing paths should be fast.""" 
 
45
        """Run log in a many-commit tree.""" 
32
46
        tree = self.make_many_commit_tree()
33
47
        lf = log_formatter('long', to_file=StringIO())
34
48
        self.time(show_log, tree.branch, lf, direction='reverse')
 
49
 
 
50
    def test_log_screenful(self):
 
51
        """Simulate log --long|less"""
 
52
        self.screenful_tester('long')
 
53
 
 
54
    def test_log_screenful_line(self):
 
55
        """Simulate log --line|less"""
 
56
        self.screenful_tester('line')
 
57
 
 
58
    def test_log_screenful_short(self):
 
59
        """Simulate log --short|less"""
 
60
        self.screenful_tester('short')
 
61
 
 
62
    def screenful_tester(self, formatter):
 
63
        """Run show_log, but stop after 25 lines are generated"""
 
64
        tree = self.make_many_commit_tree()
 
65
        def log_screenful():
 
66
            lf = log_formatter(formatter, to_file=LineConsumer(25))
 
67
            try:
 
68
                show_log(tree.branch, lf, direction='reverse')
 
69
            except LinesDone:
 
70
                pass
 
71
            else:
 
72
                raise Exception, "LinesDone not raised"
 
73
        self.time(log_screenful)
 
74
 
 
75
    def test_cmd_log(self):
 
76
        """Test execution of the log command.""" 
 
77
        tree = self.make_many_commit_tree()
 
78
        self.time(self.run_bzr, 'log', '-r', '-4..')
 
79
 
 
80
    def test_cmd_log_subprocess(self):
 
81
        """Text startup and execution of the log command.""" 
 
82
        tree = self.make_many_commit_tree()
 
83
        self.time(self.run_bzr_subprocess, 'log', '-r', '-4..')