graph: rename new_mapping
to old_mapping
The change I'm about to make requires being able to inspect the mapping array that was used to render the last GRAPH_COLLAPSING line while rendering a GRAPH_COMMIT line. The `new_mapping` array currently exists as a pre-allocated space for computing the next `mapping` array during `graph_output_collapsing_line()`, but we can repurpose it to let us see the previous `mapping` state. To support this use it will make more sense if this array is named `old_mapping`, as it will contain the mapping data for the previous line we rendered, at the point we're rendering a commit line. Signed-off-by: James Coglan <jcoglan@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
d62893ecc1
commit
0195285b95
54
graph.c
54
graph.c
@ -259,7 +259,7 @@ struct git_graph {
|
|||||||
/*
|
/*
|
||||||
* The maximum number of columns that can be stored in the columns
|
* The maximum number of columns that can be stored in the columns
|
||||||
* and new_columns arrays. This is also half the number of entries
|
* and new_columns arrays. This is also half the number of entries
|
||||||
* that can be stored in the mapping and new_mapping arrays.
|
* that can be stored in the mapping and old_mapping arrays.
|
||||||
*/
|
*/
|
||||||
int column_capacity;
|
int column_capacity;
|
||||||
/*
|
/*
|
||||||
@ -302,7 +302,7 @@ struct git_graph {
|
|||||||
* of the git_graph simply so we don't have to allocate a new
|
* of the git_graph simply so we don't have to allocate a new
|
||||||
* temporary array each time we have to output a collapsing line.
|
* temporary array each time we have to output a collapsing line.
|
||||||
*/
|
*/
|
||||||
int *new_mapping;
|
int *old_mapping;
|
||||||
/*
|
/*
|
||||||
* The current default column color being used. This is
|
* The current default column color being used. This is
|
||||||
* stored as an index into the array column_colors.
|
* stored as an index into the array column_colors.
|
||||||
@ -388,7 +388,7 @@ struct git_graph *graph_init(struct rev_info *opt)
|
|||||||
ALLOC_ARRAY(graph->columns, graph->column_capacity);
|
ALLOC_ARRAY(graph->columns, graph->column_capacity);
|
||||||
ALLOC_ARRAY(graph->new_columns, graph->column_capacity);
|
ALLOC_ARRAY(graph->new_columns, graph->column_capacity);
|
||||||
ALLOC_ARRAY(graph->mapping, 2 * graph->column_capacity);
|
ALLOC_ARRAY(graph->mapping, 2 * graph->column_capacity);
|
||||||
ALLOC_ARRAY(graph->new_mapping, 2 * graph->column_capacity);
|
ALLOC_ARRAY(graph->old_mapping, 2 * graph->column_capacity);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The diff output prefix callback, with this we can make
|
* The diff output prefix callback, with this we can make
|
||||||
@ -418,7 +418,7 @@ static void graph_ensure_capacity(struct git_graph *graph, int num_columns)
|
|||||||
REALLOC_ARRAY(graph->columns, graph->column_capacity);
|
REALLOC_ARRAY(graph->columns, graph->column_capacity);
|
||||||
REALLOC_ARRAY(graph->new_columns, graph->column_capacity);
|
REALLOC_ARRAY(graph->new_columns, graph->column_capacity);
|
||||||
REALLOC_ARRAY(graph->mapping, graph->column_capacity * 2);
|
REALLOC_ARRAY(graph->mapping, graph->column_capacity * 2);
|
||||||
REALLOC_ARRAY(graph->new_mapping, graph->column_capacity * 2);
|
REALLOC_ARRAY(graph->old_mapping, graph->column_capacity * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1116,13 +1116,18 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
int horizontal_edge_target = -1;
|
int horizontal_edge_target = -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear out the new_mapping array
|
* Swap the mapping and old_mapping arrays
|
||||||
|
*/
|
||||||
|
SWAP(graph->mapping, graph->old_mapping);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear out the mapping array
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < graph->mapping_size; i++)
|
for (i = 0; i < graph->mapping_size; i++)
|
||||||
graph->new_mapping[i] = -1;
|
graph->mapping[i] = -1;
|
||||||
|
|
||||||
for (i = 0; i < graph->mapping_size; i++) {
|
for (i = 0; i < graph->mapping_size; i++) {
|
||||||
int target = graph->mapping[i];
|
int target = graph->old_mapping[i];
|
||||||
if (target < 0)
|
if (target < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1143,14 +1148,14 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
* This column is already in the
|
* This column is already in the
|
||||||
* correct place
|
* correct place
|
||||||
*/
|
*/
|
||||||
assert(graph->new_mapping[i] == -1);
|
assert(graph->mapping[i] == -1);
|
||||||
graph->new_mapping[i] = target;
|
graph->mapping[i] = target;
|
||||||
} else if (graph->new_mapping[i - 1] < 0) {
|
} else if (graph->mapping[i - 1] < 0) {
|
||||||
/*
|
/*
|
||||||
* Nothing is to the left.
|
* Nothing is to the left.
|
||||||
* Move to the left by one
|
* Move to the left by one
|
||||||
*/
|
*/
|
||||||
graph->new_mapping[i - 1] = target;
|
graph->mapping[i - 1] = target;
|
||||||
/*
|
/*
|
||||||
* If there isn't already an edge moving horizontally
|
* If there isn't already an edge moving horizontally
|
||||||
* select this one.
|
* select this one.
|
||||||
@ -1166,9 +1171,9 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
* line.
|
* line.
|
||||||
*/
|
*/
|
||||||
for (j = (target * 2)+3; j < (i - 2); j += 2)
|
for (j = (target * 2)+3; j < (i - 2); j += 2)
|
||||||
graph->new_mapping[j] = target;
|
graph->mapping[j] = target;
|
||||||
}
|
}
|
||||||
} else if (graph->new_mapping[i - 1] == target) {
|
} else if (graph->mapping[i - 1] == target) {
|
||||||
/*
|
/*
|
||||||
* There is a branch line to our left
|
* There is a branch line to our left
|
||||||
* already, and it is our target. We
|
* already, and it is our target. We
|
||||||
@ -1176,7 +1181,7 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
* the same parent commit.
|
* the same parent commit.
|
||||||
*
|
*
|
||||||
* We don't have to add anything to the
|
* We don't have to add anything to the
|
||||||
* output or new_mapping, since the
|
* output or mapping, since the
|
||||||
* existing branch line has already taken
|
* existing branch line has already taken
|
||||||
* care of it.
|
* care of it.
|
||||||
*/
|
*/
|
||||||
@ -1192,10 +1197,10 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
* The branch to the left of that space
|
* The branch to the left of that space
|
||||||
* should be our eventual target.
|
* should be our eventual target.
|
||||||
*/
|
*/
|
||||||
assert(graph->new_mapping[i - 1] > target);
|
assert(graph->mapping[i - 1] > target);
|
||||||
assert(graph->new_mapping[i - 2] < 0);
|
assert(graph->mapping[i - 2] < 0);
|
||||||
assert(graph->new_mapping[i - 3] == target);
|
assert(graph->mapping[i - 3] == target);
|
||||||
graph->new_mapping[i - 2] = target;
|
graph->mapping[i - 2] = target;
|
||||||
/*
|
/*
|
||||||
* Mark this branch as the horizontal edge to
|
* Mark this branch as the horizontal edge to
|
||||||
* prevent any other edges from moving
|
* prevent any other edges from moving
|
||||||
@ -1209,14 +1214,14 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
/*
|
/*
|
||||||
* The new mapping may be 1 smaller than the old mapping
|
* The new mapping may be 1 smaller than the old mapping
|
||||||
*/
|
*/
|
||||||
if (graph->new_mapping[graph->mapping_size - 1] < 0)
|
if (graph->mapping[graph->mapping_size - 1] < 0)
|
||||||
graph->mapping_size--;
|
graph->mapping_size--;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Output out a line based on the new mapping info
|
* Output out a line based on the new mapping info
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < graph->mapping_size; i++) {
|
for (i = 0; i < graph->mapping_size; i++) {
|
||||||
int target = graph->new_mapping[i];
|
int target = graph->mapping[i];
|
||||||
if (target < 0)
|
if (target < 0)
|
||||||
graph_line_addch(line, ' ');
|
graph_line_addch(line, ' ');
|
||||||
else if (target * 2 == i)
|
else if (target * 2 == i)
|
||||||
@ -1229,22 +1234,17 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l
|
|||||||
* won't continue into the next line.
|
* won't continue into the next line.
|
||||||
*/
|
*/
|
||||||
if (i != (target * 2)+3)
|
if (i != (target * 2)+3)
|
||||||
graph->new_mapping[i] = -1;
|
graph->mapping[i] = -1;
|
||||||
used_horizontal = 1;
|
used_horizontal = 1;
|
||||||
graph_line_write_column(line, &graph->new_columns[target], '_');
|
graph_line_write_column(line, &graph->new_columns[target], '_');
|
||||||
} else {
|
} else {
|
||||||
if (used_horizontal && i < horizontal_edge)
|
if (used_horizontal && i < horizontal_edge)
|
||||||
graph->new_mapping[i] = -1;
|
graph->mapping[i] = -1;
|
||||||
graph_line_write_column(line, &graph->new_columns[target], '/');
|
graph_line_write_column(line, &graph->new_columns[target], '/');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Swap mapping and new_mapping
|
|
||||||
*/
|
|
||||||
SWAP(graph->mapping, graph->new_mapping);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If graph->mapping indicates that all of the branch lines
|
* If graph->mapping indicates that all of the branch lines
|
||||||
* are already in the correct positions, we are done.
|
* are already in the correct positions, we are done.
|
||||||
|
Reference in New Issue
Block a user