/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 16:36:11 UTC
  • mto: (256.2.54 gtk)
  • mto: This revision was merged to the branch mainline in revision 289.
  • Revision ID: garyvdm@gmail.com-20070920163611-kdmedfbvo45n8jx0
Add support for lines that go between branches.

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
        
67
67
        branch_line = None
68
68
        if branch_id not in branch_lines:
69
 
            branch_line = {}
 
69
            branch_line = {"line_type": "branch_line",
 
70
                           "branch_id": branch_id,
 
71
                           "rev_indexes": [],
 
72
                           "min_index": index,
 
73
                           "max_index": 0}
70
74
            branch_lines[branch_id] = branch_line
71
 
            branch_line["rev_indexes"] = []
72
 
            branch_line["min_index"] = index - 1            
73
 
            branch_line["max_index"] = 0
74
75
        else:
75
76
            branch_line = branch_lines[branch_id]
76
77
        branch_line["rev_indexes"].append(index)
90
91
 
91
92
    branch_ids = branch_lines.keys()
92
93
    branch_ids.sort()
 
94
    #branch_ids.reverse()
 
95
    inter_branch_lines = {}
 
96
    all_lines = []
 
97
    
 
98
    for branch_id in branch_ids:
 
99
        branch_line = branch_lines[branch_id]
 
100
        branch_parent_revno = None
 
101
        all_lines.append(branch_line)
 
102
        
 
103
        for rev_index in branch_line["rev_indexes"]:
 
104
            (sequence_number,
 
105
                 revid,
 
106
                 merge_depth,
 
107
                 revno_sequence,
 
108
                 end_of_merge) = merge_sorted_revisions[rev_index]
 
109
            for parent_revid in graph_parents[revid]:
 
110
                if parent_revid in revid_index:
 
111
                    parent_index = revid_index[parent_revid]
 
112
                    if parent_index - rev_index > 1:
 
113
                        parent_revno = merge_sorted_revisions[parent_index][3]
 
114
                        parent_branch_id = parent_revno[0:-1]
 
115
                        if branch_id != parent_branch_id:
 
116
                            inter_branch_line = {"line_type": "inter_branch_line",
 
117
                                                 "min_index": rev_index,
 
118
                                                 "max_index": parent_index,
 
119
                                                 "child_branch_id": branch_id,
 
120
                                                 "parent_branch_id": parent_branch_id}
 
121
                            inter_branch_lines[(rev_index, parent_index)] = \
 
122
                                                                inter_branch_line
 
123
                            all_lines.append (inter_branch_line)
 
124
    
93
125
    columns = []
94
 
    
95
 
    for branch_id in branch_ids:
96
 
        branch_line = branch_lines[branch_id]
97
 
        if len(branch_id) >= 2:
98
 
            branch_parent_revno = branch_id[0:-1]
99
 
            if branch_parent_revno in revno_index:
100
 
                branch_line["max_index"] = revno_index[branch_parent_revno]
101
 
        
102
 
        col_index = None
103
 
        start_col_index = 0
104
 
        if branch_id:
105
 
            start_col_index = branch_lines[branch_id[0:-2]]["col_index"]+1
106
 
        for col_search_index in range(start_col_index,len(columns)):
107
 
            column = columns[col_search_index]
108
 
            clashing_lines = []
109
 
            for line in column:
110
 
                if (line["min_index"] <= branch_line["min_index"] and \
111
 
                    line["max_index"] >  branch_line["min_index"]) or \
112
 
                   (line["max_index"] >= branch_line["max_index"] and \
113
 
                    line["min_index"] <  branch_line["max_index"]):
114
 
                        clashing_lines.append(line)
115
 
            
116
 
            if not clashing_lines:
117
 
                col_index = col_search_index
 
126
    for line in all_lines:
 
127
        for col_index, column in enumerate(columns):
 
128
            has_overlaping_line = False
 
129
            for col_line in column:
 
130
                if not (col_line["min_index"] >= line["max_index"] or \
 
131
                        col_line["max_index"] <=  line["min_index"]):
 
132
                    has_overlaping_line = True
 
133
                    break
 
134
            if not has_overlaping_line:
118
135
                break
119
 
        
120
 
        if not col_index:
 
136
        else:
121
137
            col_index = len(columns)
122
138
            columns.append([])
123
 
        
124
 
        columns[col_index].append(branch_line)
125
 
        branch_line["col_index"] = col_index
126
 
 
127
 
 
128
 
    for branch_id in branch_ids:
129
 
        branch_line = branch_lines[branch_id]
 
139
        line["col_index"] = col_index
 
140
        columns[col_index].append(line)
 
141
 
 
142
    for branch_line in branch_lines.itervalues():
 
143
        branch_id = branch_line["branch_id"]
130
144
        color = reduce(lambda x, y: x+y, branch_id, 0)
131
145
        col_index = branch_line["col_index"]
132
146
        node = (col_index, color)
144
158
            for child_revid in children:
145
159
                if child_revid in revid_index:
146
160
                    child_index = revid_index[child_revid]
147
 
                    child_revno_sequence = \
 
161
                    inter_branch_line_id = (child_index, rev_index)
 
162
                    if inter_branch_line_id in inter_branch_lines:
 
163
                        inter_branch_line = \
 
164
                                    inter_branch_lines[inter_branch_line_id]
 
165
                        child_branch_id = inter_branch_line["child_branch_id"]
 
166
                        child_col_index = \
 
167
                                    branch_lines[child_branch_id]["col_index"]
 
168
                        inter_branch_line_col_index = \
 
169
                                                inter_branch_line["col_index"]
 
170
                        linegraph[child_index][2].append(
 
171
                            (child_col_index,
 
172
                             inter_branch_line_col_index,
 
173
                             color))
 
174
                        for line_part_index in range(child_index+1,
 
175
                                                     rev_index-1):
 
176
                            linegraph[line_part_index][2].append(
 
177
                                (inter_branch_line_col_index,   
 
178
                                 inter_branch_line_col_index,
 
179
                                 color))
 
180
 
 
181
                        linegraph[rev_index-1][2].append(
 
182
                            (inter_branch_line_col_index,
 
183
                             col_index,
 
184
                             color))
 
185
 
 
186
                    else:
 
187
                        child_revno_sequence = \
148
188
                                        merge_sorted_revisions[child_index][3]
149
 
                    child_merge_depth = merge_sorted_revisions[child_index][2]
150
 
                    child_branch_id = child_revno_sequence[0:-1]
151
 
                    child_col_index = branch_lines[child_branch_id]["col_index"]
152
 
                    if child_merge_depth < merge_depth:
153
 
                        #out from the child to line
 
189
                        child_branch_id = child_revno_sequence[0:-1]                    
 
190
                        child_col_index = \
 
191
                                    branch_lines[child_branch_id]["col_index"]
 
192
                        
154
193
                        linegraph[child_index][2].append(
155
194
                            (child_col_index,
156
195
                             col_index,
157
196
                             color))
158
197
                        for line_part_index in range(child_index+1, rev_index):
159
198
                            linegraph[line_part_index][2].append(
160
 
                                (col_index,
 
199
                                (col_index,   
161
200
                                 col_index,
162
201
                                 color))
163
 
                    else:
164
 
                        for line_part_index in range(child_index, rev_index-1):
165
 
                            linegraph[line_part_index][2].append(
166
 
                                (child_col_index,   
167
 
                                 child_col_index,
168
 
                                 color))
169
 
 
170
 
                        linegraph[rev_index-1][2].append(
171
 
                            (child_col_index,
172
 
                             col_index,
173
 
                             color))
 
202
                        
174
203
    
175
204
    return (linegraph, revid_index)
176
205