diff options
author | Scott J. Goldman <scottjg@github.com> | 2012-11-29 06:27:43 +0400 |
---|---|---|
committer | Scott J. Goldman <scottjg@github.com> | 2012-11-29 06:54:57 +0400 |
commit | 0984c8768d36c73adeabe0229960e651531edf17 (patch) | |
tree | d8002b68a51c99f4c57b6bd26c1d4a0eee13bdbb /src/merge.c | |
parent | c6d03c958fc5604c8a00c9a512ec342caa3e43ef (diff) |
Rename git_count_ahead_behind -> git_graph_ahead_behind
Moved it into graph.{c,h} which i created for the new "graph"
functions namespace. Also adjusted the function prototype
to use `size_t` and `const git_oid *`.
Diffstat (limited to 'src/merge.c')
-rw-r--r-- | src/merge.c | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/src/merge.c b/src/merge.c index 96d2168ba..323b7b877 100644 --- a/src/merge.c +++ b/src/merge.c @@ -241,85 +241,3 @@ int git_merge__bases_many(git_commit_list **out, git_revwalk *walk, git_commit_l *out = result; return 0; } - -static int count_ahead_behind(git_commit_list_node *one, git_commit_list_node *two, - int *ahead, int *behind) -{ - git_commit_list_node *commit; - git_pqueue pq; - int i; - *ahead = 0; - *behind = 0; - - if (git_pqueue_init(&pq, 2, git_commit_list_time_cmp) < 0) - return -1; - if (git_pqueue_insert(&pq, one) < 0) - return -1; - if (git_pqueue_insert(&pq, two) < 0) - return -1; - - while ((commit = git_pqueue_pop(&pq)) != NULL) { - if (commit->flags & RESULT || - (commit->flags & (PARENT1 | PARENT2)) == (PARENT1 | PARENT2)) - continue; - else if (commit->flags & PARENT1) - (*behind)++; - else if (commit->flags & PARENT2) - (*ahead)++; - - for (i = 0; i < commit->out_degree; i++) { - git_commit_list_node *p = commit->parents[i]; - if (git_pqueue_insert(&pq, p) < 0) - return -1; - } - commit->flags |= RESULT; - } - - return 0; -} - -int git_count_ahead_behind(int *ahead, int *behind, git_repository *repo, git_oid *one, - git_oid *two) -{ - git_revwalk *walk; - git_vector list; - struct git_commit_list *result = NULL; - git_commit_list_node *commit1, *commit2; - void *contents[1]; - - if (git_revwalk_new(&walk, repo) < 0) - return -1; - - commit2 = commit_lookup(walk, two); - if (commit2 == NULL) - goto on_error; - - /* This is just one value, so we can do it on the stack */ - memset(&list, 0x0, sizeof(git_vector)); - contents[0] = commit2; - list.length = 1; - list.contents = contents; - - commit1 = commit_lookup(walk, one); - if (commit1 == NULL) - goto on_error; - - if (git_merge__bases_many(&result, walk, commit1, &list) < 0) - goto on_error; - if (count_ahead_behind(commit1, commit2, ahead, behind) < 0) - goto on_error; - - if (!result) { - git_revwalk_free(walk); - return GIT_ENOTFOUND; - } - - git_commit_list_free(&result); - git_revwalk_free(walk); - - return 0; - -on_error: - git_revwalk_free(walk); - return -1; -} |