diff --git a/commit.c b/commit.c index f53429c0ac3..dc08a47b073 100644 --- a/commit.c +++ b/commit.c @@ -563,6 +563,17 @@ struct commit_list *copy_commit_list(struct commit_list *list) return head; } +struct commit_list *reverse_commit_list(struct commit_list *list) +{ + struct commit_list *next = NULL, *current, *backup; + for (current = list; current; current = backup) { + backup = current->next; + current->next = next; + next = current; + } + return next; +} + void free_commit_list(struct commit_list *list) { while (list) diff --git a/commit.h b/commit.h index 5467786c7be..3e9139a0004 100644 --- a/commit.h +++ b/commit.h @@ -177,6 +177,9 @@ void commit_list_sort_by_date(struct commit_list **list); /* Shallow copy of the input list */ struct commit_list *copy_commit_list(struct commit_list *list); +/* Modify list in-place to reverse it, returning new head; list will be tail */ +struct commit_list *reverse_commit_list(struct commit_list *list); + void free_commit_list(struct commit_list *list); struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */ diff --git a/merge-recursive.c b/merge-recursive.c index f736a0f6323..b052974f191 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -3517,17 +3517,6 @@ static int merge_trees_internal(struct merge_options *opt, return clean; } -static struct commit_list *reverse_commit_list(struct commit_list *list) -{ - struct commit_list *next = NULL, *current, *backup; - for (current = list; current; current = backup) { - backup = current->next; - current->next = next; - next = current; - } - return next; -} - /* * Merge the commits h1 and h2, returning a flag (int) indicating the * cleanness of the merge. Also, if opt->priv->call_depth, create a