Signed-off-by: Max Kirillov <max@xxxxxxxxxx> --- combine-diff.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/combine-diff.c b/combine-diff.c index 8eb7278..a236bb5 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -22,6 +22,28 @@ static int compare_paths(const struct combine_diff_path *one, two->path, strlen(two->path), two->mode); } +static void insert_path(struct combine_diff_path **pos, const char* path, int n, int num_parent, struct diff_filepair *queue_item) +{ + int len; + struct combine_diff_path *p; + + len = strlen(path); + p = xmalloc(combine_diff_path_size(num_parent, len)); + p->path = (char *) &(p->parent[num_parent]); + memcpy(p->path, path, len); + p->path[len] = 0; + p->next = *pos; + memset(p->parent, 0, + sizeof(p->parent[0]) * num_parent); + + hashcpy(p->oid.hash, queue_item->two->sha1); + p->mode = queue_item->two->mode; + hashcpy(p->parent[n].oid.hash, queue_item->one->sha1); + p->parent[n].mode = queue_item->one->mode; + p->parent[n].status = queue_item->status; + *pos = p; +} + static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, int n, int num_parent) { struct diff_queue_struct *q = &diff_queued_diff; @@ -30,27 +52,10 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, if (!n) { for (i = 0; i < q->nr; i++) { - int len; - const char *path; if (diff_unmodified_pair(q->queue[i])) continue; - path = q->queue[i]->two->path; - len = strlen(path); - p = xmalloc(combine_diff_path_size(num_parent, len)); - p->path = (char *) &(p->parent[num_parent]); - memcpy(p->path, path, len); - p->path[len] = 0; - p->next = NULL; - memset(p->parent, 0, - sizeof(p->parent[0]) * num_parent); - - hashcpy(p->oid.hash, q->queue[i]->two->sha1); - p->mode = q->queue[i]->two->mode; - hashcpy(p->parent[n].oid.hash, q->queue[i]->one->sha1); - p->parent[n].mode = q->queue[i]->one->mode; - p->parent[n].status = q->queue[i]->status; - *tail = p; - tail = &p->next; + insert_path(tail, q->queue[i]->two->path, n, num_parent, q->queue[i]); + tail = &(*tail)->next; } return curr; } -- 2.3.4.2801.g3d0809b -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html