~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to dotgraph.py

  • Committer: Aaron Bentley
  • Date: 2005-09-23 00:02:14 UTC
  • mfrom: (189.1.2)
  • Revision ID: aaron.bentley@utoronto.ca-20050923000214-cb57e12afbd89378
Merged Meinel's HTML stuff

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
import errno
7
7
import tempfile
8
8
import shutil
 
9
import time
9
10
 
10
11
RSVG_OUTPUT_TYPES = ('png', 'jpg')
11
12
DOT_OUTPUT_TYPES = ('svg', 'svgz', 'gif', 'jpg', 'ps', 'fig', 'mif', 'png', 
21
22
 
22
23
class Node(object):
23
24
    def __init__(self, name, color=None, label=None, rev_id=None,
24
 
                 cluster=None, node_style=None):
 
25
                 cluster=None, node_style=None, date=None, message=None):
25
26
        self.name = name
26
27
        self.color = color
27
28
        self.label = label
31
32
            self.node_style = []
32
33
        self.cluster = cluster
33
34
        self.rank = None
 
35
        self.date = date
 
36
        self.message = message
34
37
        self.href = None
35
38
 
36
39
    def define(self):
46
49
        if label is not None:
47
50
            attributes.append('label="%s"' % label)
48
51
        attributes.append('shape="box"')
 
52
        tooltip = ''
 
53
        if self.message is not None:
 
54
            tooltip += self.message.replace('"', '\\"')
 
55
        # This makes the tooltip too long
 
56
        # if self.rev_id is not None:
 
57
        #     tooltip += ' revid:%s' % self.rev_id
 
58
        if tooltip:
 
59
            attributes.append('tooltip="%s"' % tooltip)
49
60
        if self.href is not None:
50
61
            attributes.append('href="%s"' % self.href)
 
62
        elif tooltip:
 
63
            attributes.append('href="#"')
51
64
        if len(attributes) > 0:
52
65
            return '%s[%s]' % (self.name, " ".join(attributes))
53
66
 
190
203
        dot_proc.stdin.write(line)
191
204
    dot_proc.stdin.close()
192
205
    return dot_proc.wait()
 
206
 
 
207
def invoke_dot_html(input, out_file):
 
208
    """\
 
209
    Produce an html file, which uses a .png file, and a cmap to provide
 
210
    annotated revisions.
 
211
    """
 
212
    tempdir = tempfile.mkdtemp()
 
213
    try:
 
214
        temp_dot = os.path.join(tempdir, 'temp.dot')
 
215
        status = invoke_dot(input, temp_dot, file_type='dot')
 
216
 
 
217
        dot = open(temp_dot)
 
218
        temp_file = os.path.join(tempdir, 'temp.cmapx')
 
219
        status = invoke_dot(dot, temp_file, 'cmapx')
 
220
 
 
221
        png_file = '.'.join(out_file.split('.')[:-1] + ['png'])
 
222
        dot.seek(0)
 
223
        status = invoke_dot(dot, png_file, 'png')
 
224
 
 
225
        png_relative = png_file.split('/')[-1]
 
226
        html = open(out_file, 'wb')
 
227
        w = html.write
 
228
        w('<html><head><title></title></head>\n')
 
229
        w('<body>\n')
 
230
        w('<img src="%s" usemap="#G" border=0/>' % png_relative)
 
231
        w(open(temp_file).read())
 
232
        w('</body></html>\n')
 
233
    finally:
 
234
        shutil.rmtree(tempdir)
 
235
    return status
 
236