commit-reach(get_octopus_merge_bases): pass on "missing commits" errors

The `merge_bases_many()` function was just taught to indicate parsing
errors, and now the `repo_get_merge_bases()` function (which is also
surfaced via the `get_merge_bases()` macro) is aware of that, too.

Naturally, the callers need to be adjusted now, too.

Next step: adjust `repo_get_merge_bases_many()`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin
2024-02-28 09:44:15 +00:00
committed by Junio C Hamano
parent 76e2a09999
commit f87056ce40
5 changed files with 26 additions and 15 deletions

View File

@@ -175,24 +175,26 @@ static int merge_bases_many(struct repository *r,
return 0;
}
struct commit_list *get_octopus_merge_bases(struct commit_list *in)
int get_octopus_merge_bases(struct commit_list *in, struct commit_list **result)
{
struct commit_list *i, *j, *k, *ret = NULL;
struct commit_list *i, *j, *k;
if (!in)
return ret;
return 0;
commit_list_insert(in->item, &ret);
commit_list_insert(in->item, result);
for (i = in->next; i; i = i->next) {
struct commit_list *new_commits = NULL, *end = NULL;
for (j = ret; j; j = j->next) {
for (j = *result; j; j = j->next) {
struct commit_list *bases = NULL;
if (repo_get_merge_bases(the_repository, i->item,
j->item, &bases) < 0) {
free_commit_list(bases);
return NULL;
free_commit_list(*result);
*result = NULL;
return -1;
}
if (!new_commits)
new_commits = bases;
@@ -201,10 +203,10 @@ struct commit_list *get_octopus_merge_bases(struct commit_list *in)
for (k = bases; k; k = k->next)
end = k;
}
free_commit_list(ret);
ret = new_commits;
free_commit_list(*result);
*result = new_commits;
}
return ret;
return 0;
}
static int remove_redundant_no_gen(struct repository *r,