68
68
if branch_id not in branch_lines:
69
branch_line = {"line_type": "branch_line",
70
"branch_id": branch_id,
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
75
76
branch_line = branch_lines[branch_id]
76
77
branch_line["rev_indexes"].append(index)
91
92
branch_ids = branch_lines.keys()
95
inter_branch_lines = {}
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)
103
for rev_index in branch_line["rev_indexes"]:
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)] = \
123
all_lines.append (inter_branch_line)
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]
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]
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)
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
134
if not has_overlaping_line:
121
137
col_index = len(columns)
122
138
columns.append([])
124
columns[col_index].append(branch_line)
125
branch_line["col_index"] = col_index
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)
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"]
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(
172
inter_branch_line_col_index,
174
for line_part_index in range(child_index+1,
176
linegraph[line_part_index][2].append(
177
(inter_branch_line_col_index,
178
inter_branch_line_col_index,
181
linegraph[rev_index-1][2].append(
182
(inter_branch_line_col_index,
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]
191
branch_lines[child_branch_id]["col_index"]
154
193
linegraph[child_index][2].append(
155
194
(child_col_index,
158
197
for line_part_index in range(child_index+1, rev_index):
159
198
linegraph[line_part_index][2].append(
164
for line_part_index in range(child_index, rev_index-1):
165
linegraph[line_part_index][2].append(
170
linegraph[rev_index-1][2].append(
175
204
return (linegraph, revid_index)