mirror of
https://github.com/git/git.git
synced 2024-11-27 20:14:30 +08:00
commit: use mergesort() in commit_list_sort_by_date()
Replace the insertion sort in commit_list_sort_by_date() with a call to the generic mergesort function. This sets the stage for using commit_list_sort_by_date() for larger lists, as shown in the next patch. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0db71e0fa9
commit
46905893b2
29
commit.c
29
commit.c
@ -7,6 +7,7 @@
|
|||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "notes.h"
|
#include "notes.h"
|
||||||
#include "gpg-interface.h"
|
#include "gpg-interface.h"
|
||||||
|
#include "mergesort.h"
|
||||||
|
|
||||||
int save_commit_buffer = 1;
|
int save_commit_buffer = 1;
|
||||||
|
|
||||||
@ -390,15 +391,31 @@ struct commit_list * commit_list_insert_by_date(struct commit *item, struct comm
|
|||||||
return commit_list_insert(item, pp);
|
return commit_list_insert(item, pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int commit_list_compare_by_date(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
unsigned long a_date = ((const struct commit_list *)a)->item->date;
|
||||||
|
unsigned long b_date = ((const struct commit_list *)b)->item->date;
|
||||||
|
if (a_date < b_date)
|
||||||
|
return 1;
|
||||||
|
if (a_date > b_date)
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *commit_list_get_next(const void *a)
|
||||||
|
{
|
||||||
|
return ((const struct commit_list *)a)->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void commit_list_set_next(void *a, void *next)
|
||||||
|
{
|
||||||
|
((struct commit_list *)a)->next = next;
|
||||||
|
}
|
||||||
|
|
||||||
void commit_list_sort_by_date(struct commit_list **list)
|
void commit_list_sort_by_date(struct commit_list **list)
|
||||||
{
|
{
|
||||||
struct commit_list *ret = NULL;
|
*list = mergesort(*list, commit_list_get_next, commit_list_set_next,
|
||||||
while (*list) {
|
commit_list_compare_by_date);
|
||||||
commit_list_insert_by_date((*list)->item, &ret);
|
|
||||||
*list = (*list)->next;
|
|
||||||
}
|
|
||||||
*list = ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct commit *pop_most_recent_commit(struct commit_list **list,
|
struct commit *pop_most_recent_commit(struct commit_list **list,
|
||||||
|
Loading…
Reference in New Issue
Block a user