/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to viz/linegraph.py

  • Committer: Gary van der Merwe
  • Date: 2007-09-20 20:42:57 UTC
  • mto: (256.2.54 gtk)
  • mto: This revision was merged to the branch mainline in revision 289.
  • Revision ID: garyvdm@gmail.com-20070920204257-qmc1duu3vh4jy2gf
Performance improvements.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    mainline = branch.revision_history()
40
40
    graph_parents = branch.repository.get_revision_graph(start)
41
41
    graph_children = {}
42
 
    for revid in graph_parents.keys():
 
42
    for revid in graph_parents.iterkeys():
43
43
        graph_children[revid] = []
44
44
 
45
45
    merge_sorted_revisions = merge_sort(
49
49
        generate_revno=True)
50
50
    
51
51
    revid_index = {}
52
 
    revno_index = {}
53
52
    branch_lines = {}
54
53
    linegraph = []    
55
54
    
60
59
                     end_of_merge)) in enumerate(merge_sorted_revisions):
61
60
        
62
61
        revid_index[revid] = rev_index
63
 
        revno_index[revno_sequence] = rev_index
64
62
        
65
63
        branch_id = revno_sequence[0:-1]
66
64
        
67
65
        branch_line = None
68
66
        if branch_id not in branch_lines:
69
 
            branch_line = {"line_type": "branch_line",
70
 
                           "branch_id": branch_id,
 
67
            branch_line = {"branch_id": branch_id,
71
68
                           "rev_indexes": [],
72
69
                           "min_index": rev_index,
73
70
                           "max_index": 0}
100
97
    branch_ids.sort(branch_id_cmp)
101
98
    lines = []
102
99
    columns = []
 
100
    empty_column = [False for i in range(len(graph_parents))]
 
101
    
 
102
    
103
103
    
104
104
    for branch_id in branch_ids:
105
105
        branch_line = branch_lines[branch_id]
106
106
        
107
 
        append_line(columns, branch_line)
108
 
        branch_id = branch_line["branch_id"]
 
107
        branch_line["col_index"] = append_line(columns,
 
108
                                               (branch_line["min_index"],
 
109
                                                branch_line["max_index"]),
 
110
                                               empty_column)
109
111
        color = reduce(lambda x, y: x+y, branch_id, 0)
110
112
        col_index = branch_line["col_index"]
111
113
        node = (col_index, color)        
125
127
                    parent_index = revid_index[parent_revid]
126
128
                    parent_revno = merge_sorted_revisions[parent_index][3]
127
129
                    parent_branch_id = parent_revno[0:-1]
128
 
                    line = {"line_type": "inter_branch_line",
129
 
                            "min_index": rev_index,
130
 
                            "max_index": parent_index}
131
 
                    lines.append(line)
 
130
                    col_index = None
132
131
                    if branch_id != parent_branch_id and \
133
132
                                    parent_index - rev_index > 1:
134
 
                        append_line(columns, line)
 
133
                        col_index = append_line(columns,
 
134
                                                (rev_index+1, parent_index),
 
135
                                                empty_column)
 
136
                    lines.append((rev_index, parent_index, col_index))
135
137
    
136
 
    for line in lines:
137
 
        parent_index = line["max_index"]
 
138
    for (child_index, parent_index, line_col_index) in lines:
 
139
        child_col_index = linegraph[child_index][1][0]
 
140
        
138
141
        parent_node = linegraph[parent_index][1]
139
142
        parent_col_index = parent_node[0]
140
143
        color = parent_node[1]
141
144
        
142
 
        child_index = line["min_index"]
143
 
        child_col_index = linegraph[child_index][1][0]
144
 
        
145
 
        if "col_index" in line:
146
 
            line_col_index = line["col_index"]
 
145
        if line_col_index:
147
146
            linegraph[child_index][2].append(
148
147
                (child_col_index,
149
148
                 line_col_index,
171
170
    
172
171
    return (linegraph, revid_index)
173
172
 
174
 
def append_line(columns, line):
 
173
def append_line(columns, line, empty_column):
 
174
    line_range = range(line[0], line[1]+1)
175
175
    for col_index, column in enumerate(columns):
176
176
        has_overlaping_line = False
177
 
        for col_line in column:
178
 
            if not (col_line["min_index"] >= line["max_index"] or \
179
 
                    col_line["max_index"] <=  line["min_index"]):
 
177
        for row_index in line_range:
 
178
            if column[row_index]:
180
179
                has_overlaping_line = True
181
180
                break
182
181
        if not has_overlaping_line:
183
182
            break
184
183
    else:
185
184
        col_index = len(columns)
186
 
        columns.append([])
187
 
    line["col_index"] = col_index
188
 
    columns[col_index].append(line)
 
185
        column = list(empty_column)
 
186
        columns.append(column)
189
187
    
190
 
 
 
188
    for row_index in line_range:
 
189
        column[row_index] = True
 
190
    return col_index
191
191
 
192
192
def same_branch(a, b):
193
193
    """Return whether we think revisions a and b are on the same branch."""