~bzr-pqm/bzr/bzr.dev

0.1.76 by Martin Pool
Script that tries conversion from bzr inventory into weave file
1
#! /usr/bin/python
2
3
# Copyright (C) 2005 Canonical Ltd
4
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
9
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
14
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19
"""Experiment in converting existing bzr branches to weaves."""
20
21
22
import bzrlib.branch
887 by Martin Pool
- fix imports now weave has moved into bzrlib
23
from bzrlib.weave import Weave
24
from bzrlib.weavefile import write_weave
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
25
from bzrlib.progress import ProgressBar
0.1.87 by Martin Pool
Show profile when converting inventory too.
26
import tempfile
893 by Martin Pool
- Refactor weave calculation of inclusions
27
import hotshot, hotshot.stats
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
28
import sys
0.1.87 by Martin Pool
Show profile when converting inventory too.
29
30
def convert():
31
    WEAVE_NAME = "inventory.weave"
32
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
33
    pb = ProgressBar()
34
0.1.87 by Martin Pool
Show profile when converting inventory too.
35
    wf = Weave()
36
37
    b = bzrlib.branch.find_branch('.')
38
39
    parents = set()
40
    revno = 1
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
41
    rev_history = b.revision_history()
42
    for rev_id in rev_history:
43
        pb.update('converting inventory', revno, len(rev_history))
0.1.87 by Martin Pool
Show profile when converting inventory too.
44
        inv_xml = b.inventory_store[rev_id].readlines()
45
        weave_id = wf.add(parents, inv_xml)
890 by Martin Pool
- weave info should show minimal expression of parents
46
        parents = set([weave_id])       # always just one parent
0.1.87 by Martin Pool
Show profile when converting inventory too.
47
        revno += 1
48
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
49
    pb.update('write weave', None, None)
0.1.87 by Martin Pool
Show profile when converting inventory too.
50
    write_weave(wf, file(WEAVE_NAME, 'wb'))
51
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
52
    pb.clear()
53
54
55
def profile_convert(): 
56
    prof_f = tempfile.NamedTemporaryFile()
57
58
    prof = hotshot.Profile(prof_f.name)
59
60
    prof.runcall(convert) 
61
    prof.close()
62
63
    stats = hotshot.stats.load(prof_f.name)
64
    #stats.strip_dirs()
65
    stats.sort_stats('time')
66
    ## XXX: Might like to write to stderr or the trace file instead but
67
    ## print_stats seems hardcoded to stdout
68
    stats.print_stats(20)
0.1.87 by Martin Pool
Show profile when converting inventory too.
69
            
70
889 by Martin Pool
- show progress bar during inventory conversion to weave, and make profiling optional
71
if '-p' in sys.argv[1:]:
72
    profile_convert()
73
else:
74
    convert()
75