diff options
-rw-r--r-- | commit.c | 42 | ||||
-rw-r--r-- | commit.h | 3 | ||||
-rw-r--r-- | revision.c | 4 | ||||
-rw-r--r-- | sequencer.c | 27 |
4 files changed, 31 insertions, 45 deletions
@@ -361,21 +361,6 @@ struct commit_list *commit_list_insert(struct commit *item, struct commit_list * return new_list; } -void commit_list_reverse(struct commit_list **list_p) -{ - struct commit_list *prev = NULL, *curr = *list_p, *next; - - if (!list_p) - return; - while (curr) { - next = curr->next; - curr->next = prev; - prev = curr; - curr = next; - } - *list_p = prev; -} - unsigned commit_list_count(const struct commit_list *l) { unsigned c = 0; @@ -1214,3 +1199,30 @@ struct commit *get_merge_parent(const char *name) } return commit; } + +/* + * Append a commit to the end of the commit_list. + * + * next starts by pointing to the variable that holds the head of an + * empty commit_list, and is updated to point to the "next" field of + * the last item on the list as new commits are appended. + * + * Usage example: + * + * struct commit_list *list; + * struct commit_list **next = &list; + * + * next = commit_list_append(c1, next); + * next = commit_list_append(c2, next); + * assert(commit_list_count(list) == 2); + * return list; + */ +struct commit_list **commit_list_append(struct commit *commit, + struct commit_list **next) +{ + struct commit_list *new = xmalloc(sizeof(struct commit_list)); + new->item = commit; + *next = new; + new->next = NULL; + return &new->next; +} @@ -53,11 +53,12 @@ int find_commit_subject(const char *commit_buffer, const char **subject); struct commit_list *commit_list_insert(struct commit *item, struct commit_list **list); +struct commit_list **commit_list_append(struct commit *commit, + struct commit_list **next); unsigned commit_list_count(const struct commit_list *l); struct commit_list *commit_list_insert_by_date(struct commit *item, struct commit_list **list); void commit_list_sort_by_date(struct commit_list **list); -void commit_list_reverse(struct commit_list **list_p); void free_commit_list(struct commit_list *list); diff --git a/revision.c b/revision.c index e0e80f13ef..935e7a7ba4 100644 --- a/revision.c +++ b/revision.c @@ -2075,6 +2075,7 @@ int prepare_revision_walk(struct rev_info *revs) { int nr = revs->pending.nr; struct object_array_entry *e, *list; + struct commit_list **next = &revs->commits; e = list = revs->pending.objects; revs->pending.nr = 0; @@ -2085,12 +2086,11 @@ int prepare_revision_walk(struct rev_info *revs) if (commit) { if (!(commit->object.flags & SEEN)) { commit->object.flags |= SEEN; - commit_list_insert(commit, &revs->commits); + next = commit_list_append(commit, next); } } e++; } - commit_list_reverse(&revs->commits); commit_list_sort_by_date(&revs->commits); if (!revs->leak_pending) free(list); diff --git a/sequencer.c b/sequencer.c index cd11e340dd..81d8ace35f 100644 --- a/sequencer.c +++ b/sequencer.c @@ -468,33 +468,6 @@ static void read_and_refresh_cache(struct replay_opts *opts) rollback_lock_file(&index_lock); } -/* - * Append a commit to the end of the commit_list. - * - * next starts by pointing to the variable that holds the head of an - * empty commit_list, and is updated to point to the "next" field of - * the last item on the list as new commits are appended. - * - * Usage example: - * - * struct commit_list *list; - * struct commit_list **next = &list; - * - * next = commit_list_append(c1, next); - * next = commit_list_append(c2, next); - * assert(commit_list_count(list) == 2); - * return list; - */ -static struct commit_list **commit_list_append(struct commit *commit, - struct commit_list **next) -{ - struct commit_list *new = xmalloc(sizeof(struct commit_list)); - new->item = commit; - *next = new; - new->next = NULL; - return &new->next; -} - static int format_todo(struct strbuf *buf, struct commit_list *todo_list, struct replay_opts *opts) { |