~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to dotgraph.py

  • Committer: Aaron Bentley
  • Date: 2005-09-01 16:06:54 UTC
  • Revision ID: abentley@panoramicfeedback.com-20050901160654-fd146b4530a92ee4
Clustered the branch revision history

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
        Exception.__init__(self, "Can't find dot!")
13
13
 
14
14
class Node(object):
15
 
    def __init__(self, name, color=None, label=None, rev_id=None):
 
15
    def __init__(self, name, color=None, label=None, rev_id=None,
 
16
                 cluster=None):
16
17
        self.name = name
17
18
        self.color = color
18
19
        self.label = label
19
20
        self.committer = None
20
21
        self.rev_id = rev_id
21
22
        self.node_style = []
 
23
        self.cluster = cluster
22
24
 
23
25
    def get_committer(self):
24
26
        if self.committer is not None:
70
72
    defined = set()
71
73
    yield "digraph G\n"
72
74
    yield "{\n"
 
75
    clusters = set()
 
76
    def rel_appropriate(start, end, cluster):
 
77
        if cluster is None:
 
78
            return start.cluster is None or end.cluster is None
 
79
        else:
 
80
            return start.cluster==cluster and end.cluster==cluster
 
81
 
73
82
    for (start, end) in relations:
74
 
        if start.name not in defined:
75
 
            defined.add(start.name)
76
 
            my_def = start.define()
77
 
            if my_def is not None:
78
 
                yield "    %s;\n" % my_def
79
 
        if end.name not in defined:
80
 
            defined.add(end.name)
81
 
            my_def = end.define()
82
 
            if my_def is not None:
83
 
                yield "    %s;\n" % my_def
84
 
 
85
 
        yield "    %s->%s;\n" % (start.name, end.name)
 
83
        if start.cluster is not None:
 
84
            clusters.add(start.cluster)
 
85
        if end.cluster is not None:
 
86
            clusters.add(end.cluster)
 
87
    clusters = list(clusters)
 
88
    clusters.append(None)
 
89
    for index, cluster in enumerate(clusters):
 
90
        if cluster is not None:
 
91
            yield "subgraph cluster_%s\n" % index
 
92
            yield "{\n"
 
93
            yield '    label="%s"\n' % cluster
 
94
        for (start, end) in relations:
 
95
            if start.name not in defined and start.cluster == cluster:
 
96
                defined.add(start.name)
 
97
                my_def = start.define()
 
98
                if my_def is not None:
 
99
                    yield "    %s;\n" % my_def
 
100
            if end.name not in defined and end.cluster == cluster:
 
101
                defined.add(end.name)
 
102
                my_def = end.define()
 
103
                if my_def is not None:
 
104
                    yield "    %s;\n" % my_def
 
105
            if rel_appropriate(start, end, cluster):
 
106
                yield "    %s->%s;\n" % (start.name, end.name)
 
107
        if cluster is not None:
 
108
            yield "}\n"
86
109
    yield "}\n"
87
110
 
88
 
def invoke_dot(input, out_file=None, file_type='svg'):
 
111
def invoke_dot(input, out_file=None, file_type='svg', antialias=None):
89
112
    cmdline = ['dot', '-T%s' % file_type]
90
113
    if out_file is not None:
91
114
        cmdline.extend(('-o', out_file))