/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 tools/time_graph.py

  • Committer: v.ladeuil+lp at free
  • Date: 2006-10-12 14:29:32 UTC
  • mto: (2145.1.1 keepalive)
  • mto: This revision was merged to the branch mainline in revision 2146.
  • Revision ID: v.ladeuil+lp@free.fr-20061012142932-7221fe16d2b48fa3
Shuffle http related test code. Hopefully it ends up at the right place :)

* bzrlib/tests/HttpServer.py: 
New file. bzrlib.tests.ChrootedTestCase use HttpServer. So the
class can't be defined in bzrlib.tests.HTTPUtils because it
creates a circular dependency (bzrlib.tests.HTTPUtils needs to
import bzrlib.tests).

* bzrlib/transport/http/_urllib.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/_pycurl.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/__init__.py: 
Transfer all test related code to either bzrlib.tests.HttpServer
and bzrlib.tests.HTTPUtils.
Fix all use of TransportNotPossible and InvalidURL by prefixing it
by 'errors.' (this seems to be the preferred way in the rest of
bzr).
Get rid of unused imports.

* bzrlib/tests/test_transport.py:
(ReadonlyDecoratorTransportTest.test_local_parameters,
FakeNFSDecoratorTests.test_http_parameters): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_sftp_transport.py:
(set_test_transport_to_sftp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_selftest.py:
(TestTestCaseWithTransport.test_get_readonly_url_http): Use
HttpServer from bzrlib.tests.HttpServer instead of
bzrlib.transport.http.

* bzrlib/tests/test_repository.py: 
Does *not* use HttpServer.

* bzrlib/tests/test_http.py: 
Build on top of bzrlib.tests.HttpServer and bzrlib.tests.HTTPUtils
instead of bzrlib.transport.http.

* bzrlib/tests/test_bzrdir.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_http.py:
(HTTPBranchTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_branch.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/__init__.py:
(ChrootedTestCase.setUp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
import random
3
 
import os
4
 
import time
5
 
import sys
6
 
import optparse
7
 
from bzrlib import (
8
 
    branch,
9
 
    commands,
10
 
    graph,
11
 
    ui,
12
 
    trace,
13
 
    _known_graph_py,
14
 
    _known_graph_pyx,
15
 
    )
16
 
from bzrlib.ui import text
17
 
 
18
 
p = optparse.OptionParser()
19
 
p.add_option('--quick', default=False, action='store_true')
20
 
p.add_option('--max-combinations', default=500, type=int)
21
 
p.add_option('--lsprof', default=None, type=str)
22
 
opts, args = p.parse_args(sys.argv[1:])
23
 
 
24
 
trace.enable_default_logging()
25
 
ui.ui_factory = text.TextUIFactory()
26
 
 
27
 
begin = time.clock()
28
 
if len(args) >= 1:
29
 
    b = branch.Branch.open(args[0])
30
 
else:
31
 
    b = branch.Branch.open('.')
32
 
b.lock_read()
33
 
try:
34
 
    g = b.repository.get_graph()
35
 
    parent_map = dict(p for p in g.iter_ancestry([b.last_revision()])
36
 
                         if p[1] is not None)
37
 
finally:
38
 
    b.unlock()
39
 
end = time.clock()
40
 
 
41
 
print 'Found %d nodes, loaded in %.3fs' % (len(parent_map), end - begin)
42
 
 
43
 
def all_heads_comp(g, combinations):
44
 
    h = []
45
 
    pb = ui.ui_factory.nested_progress_bar()
46
 
    try:
47
 
        for idx, combo in enumerate(combinations):
48
 
            if idx & 0x1f == 0:
49
 
                pb.update('proc', idx, len(combinations))
50
 
            h.append(g.heads(combo))
51
 
    finally:
52
 
        pb.finished()
53
 
    return h
54
 
 
55
 
combinations = []
56
 
# parents = parent_map.keys()
57
 
# for p1 in parents:
58
 
#     for p2 in random.sample(parents, 10):
59
 
#         combinations.append((p1, p2))
60
 
# Times for random sampling of 10x1150 of bzrtools
61
 
#   Graph        KnownGraph
62
 
#   96.1s   vs   25.7s  :)
63
 
# Times for 500 'merge parents' from bzr.dev
64
 
#   25.6s   vs   45.0s  :(
65
 
 
66
 
for revision_id, parent_ids in parent_map.iteritems():
67
 
    if parent_ids is not None and len(parent_ids) > 1:
68
 
        combinations.append(parent_ids)
69
 
# The largest portion of the graph that has to be walked for a heads() check
70
 
# combinations = [('john@arbash-meinel.com-20090312021943-tu6tcog48aiujx4s',
71
 
#                  'john@arbash-meinel.com-20090312130552-09xa2xsitf6rilzc')]
72
 
if opts.max_combinations > 0 and len(combinations) > opts.max_combinations:
73
 
    combinations = random.sample(combinations, opts.max_combinations)
74
 
 
75
 
print '      %d combinations' % (len(combinations),)
76
 
 
77
 
def combi_graph(graph_klass, comb):
78
 
    # DEBUG
79
 
    graph._counters[1] = 0
80
 
    graph._counters[2] = 0
81
 
 
82
 
    begin = time.clock()
83
 
    g = graph_klass(parent_map)
84
 
    if opts.lsprof is not None:
85
 
        heads = commands.apply_lsprofiled(opts.lsprof, all_heads_comp, g, comb)
86
 
    else:
87
 
        heads = all_heads_comp(g, comb)
88
 
    end = time.clock()
89
 
    return dict(elapsed=(end - begin), graph=g, heads=heads)
90
 
 
91
 
def report(name, g):
92
 
    print '%s: %.3fs' % (name, g['elapsed'])
93
 
    counters_used = False
94
 
    for c in graph._counters:
95
 
        if c:
96
 
            counters_used = True
97
 
    if counters_used:
98
 
        print '  %s' % (graph._counters,)
99
 
 
100
 
known_python = combi_graph(_known_graph_py.KnownGraph, combinations)
101
 
report('Known', known_python)
102
 
 
103
 
known_pyrex = combi_graph(_known_graph_pyx.KnownGraph, combinations)
104
 
report('Known (pyx)', known_pyrex)
105
 
 
106
 
def _simple_graph(parent_map):
107
 
    return graph.Graph(graph.DictParentsProvider(parent_map))
108
 
 
109
 
if opts.quick:
110
 
    if known_python['heads'] != known_pyrex['heads']:
111
 
        import pdb; pdb.set_trace()
112
 
    print 'ratio: %.1f:1 faster' % (
113
 
        known_python['elapsed'] / known_pyrex['elapsed'],)
114
 
else:
115
 
    orig = combi_graph(_simple_graph, combinations)
116
 
    report('Orig', orig)
117
 
 
118
 
    if orig['heads'] != known_pyrex['heads']:
119
 
        import pdb; pdb.set_trace()
120
 
 
121
 
    print 'ratio: %.1f:1 faster' % (
122
 
        orig['elapsed'] / known_pyrex['elapsed'],)