Merge branch 'rs/commit-list-append'
authorJunio C Hamano <gitster@pobox.com>
Mon, 30 Apr 2012 00:51:30 +0000 (17:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Apr 2012 00:51:30 +0000 (17:51 -0700)
There is no need for "commit_list_reverse()" function that only invites
inefficient code.

By René Scharfe
* rs/commit-list-append:
commit: remove commit_list_reverse()
revision: append to list instead of insert and reverse
sequencer: export commit_list_append()

commit.c
commit.h
revision.c
sequencer.c
index b80a45281ccf4234b685954651db4249201e60db..9ed36c7db5ee0d2e820a01b27507c4ab0afe9663 100644 (file)
--- 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;
@@ -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;
+}
index f8d250d6f64cacf463d7fd9525759978f008bcca..ccaa20b2621bd3856f7eafbe1193a20326278ae3 100644 (file)
--- a/commit.h
+++ b/commit.h
@@ -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);
 
index e0e80f13ef12c28e7f791e4c7ca9519e3c5aecc0..935e7a7ba413668c95a6c3e846b9058be07f0425 100644 (file)
@@ -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);
index cd11e340dda2d3905df84d9187f70226affef08f..81d8ace35fa51f029cf78a4710a5668277a95af6 100644 (file)
@@ -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)
 {