Unverified Commit 08c79128 by Edward Thomson Committed by GitHub

Merge pull request #5766 from lhchavez/cgraph-generation-cmp

commit-graph: Introduce `git_commit_list_generation_cmp`
parents 2370e491 6f544140
...@@ -12,6 +12,24 @@ ...@@ -12,6 +12,24 @@
#include "odb.h" #include "odb.h"
#include "commit.h" #include "commit.h"
int git_commit_list_generation_cmp(const void *a, const void *b)
{
uint32_t generation_a = ((git_commit_list_node *) a)->generation;
uint32_t generation_b = ((git_commit_list_node *) b)->generation;
if (!generation_a || !generation_b) {
/* Fall back to comparing by timestamps if at least one commit lacks a generation. */
return git_commit_list_time_cmp(a, b);
}
if (generation_a < generation_b)
return 1;
if (generation_a > generation_b)
return -1;
return 0;
}
int git_commit_list_time_cmp(const void *a, const void *b) int git_commit_list_time_cmp(const void *a, const void *b)
{ {
int64_t time_a = ((git_commit_list_node *) a)->time; int64_t time_a = ((git_commit_list_node *) a)->time;
......
...@@ -46,6 +46,7 @@ typedef struct git_commit_list { ...@@ -46,6 +46,7 @@ typedef struct git_commit_list {
} git_commit_list; } git_commit_list;
git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk); git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
int git_commit_list_generation_cmp(const void *a, const void *b);
int git_commit_list_time_cmp(const void *a, const void *b); int git_commit_list_time_cmp(const void *a, const void *b);
void git_commit_list_free(git_commit_list **list_p); void git_commit_list_free(git_commit_list **list_p);
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p); git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
......
...@@ -43,7 +43,7 @@ static int mark_parents(git_revwalk *walk, git_commit_list_node *one, ...@@ -43,7 +43,7 @@ static int mark_parents(git_revwalk *walk, git_commit_list_node *one,
return 0; return 0;
} }
if (git_pqueue_init(&list, 0, 2, git_commit_list_time_cmp) < 0) if (git_pqueue_init(&list, 0, 2, git_commit_list_generation_cmp) < 0)
return -1; return -1;
if (git_commit_list_parse(walk, one) < 0) if (git_commit_list_parse(walk, one) < 0)
......
...@@ -387,7 +387,7 @@ static int paint_down_to_common( ...@@ -387,7 +387,7 @@ static int paint_down_to_common(
int error; int error;
unsigned int i; unsigned int i;
if (git_pqueue_init(&list, 0, twos->length * 2, git_commit_list_time_cmp) < 0) if (git_pqueue_init(&list, 0, twos->length * 2, git_commit_list_generation_cmp) < 0)
return -1; return -1;
one->flags |= PARENT1; one->flags |= PARENT1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment