Merge branch 'rs/commit-list-append'
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()
This commit is contained in:
42
commit.c
42
commit.c
@ -361,21 +361,6 @@ struct commit_list *commit_list_insert(struct commit *item, struct commit_list *
|
|||||||
return new_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 commit_list_count(const struct commit_list *l)
|
||||||
{
|
{
|
||||||
unsigned c = 0;
|
unsigned c = 0;
|
||||||
@ -1214,3 +1199,30 @@ struct commit *get_merge_parent(const char *name)
|
|||||||
}
|
}
|
||||||
return commit;
|
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;
|
||||||
|
}
|
||||||
|
3
commit.h
3
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 *commit_list_insert(struct commit *item,
|
||||||
struct commit_list **list);
|
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);
|
unsigned commit_list_count(const struct commit_list *l);
|
||||||
struct commit_list *commit_list_insert_by_date(struct commit *item,
|
struct commit_list *commit_list_insert_by_date(struct commit *item,
|
||||||
struct commit_list **list);
|
struct commit_list **list);
|
||||||
void commit_list_sort_by_date(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);
|
void free_commit_list(struct commit_list *list);
|
||||||
|
|
||||||
|
@ -2075,6 +2075,7 @@ int prepare_revision_walk(struct rev_info *revs)
|
|||||||
{
|
{
|
||||||
int nr = revs->pending.nr;
|
int nr = revs->pending.nr;
|
||||||
struct object_array_entry *e, *list;
|
struct object_array_entry *e, *list;
|
||||||
|
struct commit_list **next = &revs->commits;
|
||||||
|
|
||||||
e = list = revs->pending.objects;
|
e = list = revs->pending.objects;
|
||||||
revs->pending.nr = 0;
|
revs->pending.nr = 0;
|
||||||
@ -2085,12 +2086,11 @@ int prepare_revision_walk(struct rev_info *revs)
|
|||||||
if (commit) {
|
if (commit) {
|
||||||
if (!(commit->object.flags & SEEN)) {
|
if (!(commit->object.flags & SEEN)) {
|
||||||
commit->object.flags |= SEEN;
|
commit->object.flags |= SEEN;
|
||||||
commit_list_insert(commit, &revs->commits);
|
next = commit_list_append(commit, next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e++;
|
e++;
|
||||||
}
|
}
|
||||||
commit_list_reverse(&revs->commits);
|
|
||||||
commit_list_sort_by_date(&revs->commits);
|
commit_list_sort_by_date(&revs->commits);
|
||||||
if (!revs->leak_pending)
|
if (!revs->leak_pending)
|
||||||
free(list);
|
free(list);
|
||||||
|
27
sequencer.c
27
sequencer.c
@ -468,33 +468,6 @@ static void read_and_refresh_cache(struct replay_opts *opts)
|
|||||||
rollback_lock_file(&index_lock);
|
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,
|
static int format_todo(struct strbuf *buf, struct commit_list *todo_list,
|
||||||
struct replay_opts *opts)
|
struct replay_opts *opts)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user