From 89b5f1d9c5e64c9e232fa1ebe0ea407c8773b79a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Wed, 25 Apr 2012 22:35:27 +0200 Subject: [PATCH 1/3] sequencer: export commit_list_append() This function can be used in other parts of git. Give it a new home in commit.c. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- commit.c | 27 +++++++++++++++++++++++++++ commit.h | 2 ++ sequencer.c | 27 --------------------------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/commit.c b/commit.c index b80a45281..8361acb6c 100644 --- a/commit.c +++ b/commit.c @@ -1214,3 +1214,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; +} diff --git a/commit.h b/commit.h index f8d250d6f..bd17770e8 100644 --- a/commit.h +++ b/commit.h @@ -53,6 +53,8 @@ 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); diff --git a/sequencer.c b/sequencer.c index 4307364b2..ac6c8238e 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) { From 2e7da8e9f436f58730c087144763d3e45b6572c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Wed, 25 Apr 2012 22:35:41 +0200 Subject: [PATCH 2/3] revision: append to list instead of insert and reverse By using commit_list_insert(), we added new items to the top of the list and, since this is not the order we want, reversed it afterwards. Simplify this process by adding new items at the bottom instead, getting rid of the reversal step. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- revision.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/revision.c b/revision.c index 92095f5fc..c1934ba3c 100644 --- a/revision.c +++ b/revision.c @@ -2066,6 +2066,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; @@ -2076,12 +2077,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); From a81a7fbc1a423b112158c2d8647ee80caba108ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Wed, 25 Apr 2012 22:35:54 +0200 Subject: [PATCH 3/3] commit: remove commit_list_reverse() The function commit_list_reverse() is not used anymore; delete it. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- commit.c | 15 --------------- commit.h | 1 - 2 files changed, 16 deletions(-) diff --git a/commit.c b/commit.c index 8361acb6c..9ed36c7db 100644 --- a/commit.c +++ b/commit.c @@ -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; diff --git a/commit.h b/commit.h index bd17770e8..ccaa20b26 100644 --- a/commit.h +++ b/commit.h @@ -59,7 +59,6 @@ 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);