mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
commit-reach(repo_get_merge_bases_many): pass on "missing commits" errors
The `merge_bases_many()` function was just taught to indicate parsing errors, and now the `repo_get_merge_bases_many()` function is aware of that, too. Naturally, there are a lot of callers that need to be adjusted now, too. Next stop: `repo_get_merge_bases_dirty()`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f87056ce40
commit
5317380521
7
bisect.c
7
bisect.c
|
@ -836,10 +836,11 @@ static void handle_skipped_merge_base(const struct object_id *mb)
|
||||||
static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int no_checkout)
|
static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int no_checkout)
|
||||||
{
|
{
|
||||||
enum bisect_error res = BISECT_OK;
|
enum bisect_error res = BISECT_OK;
|
||||||
struct commit_list *result;
|
struct commit_list *result = NULL;
|
||||||
|
|
||||||
result = repo_get_merge_bases_many(the_repository, rev[0], rev_nr - 1,
|
if (repo_get_merge_bases_many(the_repository, rev[0], rev_nr - 1,
|
||||||
rev + 1);
|
rev + 1, &result) < 0)
|
||||||
|
exit(128);
|
||||||
|
|
||||||
for (; result; result = result->next) {
|
for (; result; result = result->next) {
|
||||||
const struct object_id *mb = &result->item->object.oid;
|
const struct object_id *mb = &result->item->object.oid;
|
||||||
|
|
|
@ -1658,7 +1658,7 @@ static struct commit *get_base_commit(const char *base_commit,
|
||||||
struct branch *curr_branch = branch_get(NULL);
|
struct branch *curr_branch = branch_get(NULL);
|
||||||
const char *upstream = branch_get_upstream(curr_branch, NULL);
|
const char *upstream = branch_get_upstream(curr_branch, NULL);
|
||||||
if (upstream) {
|
if (upstream) {
|
||||||
struct commit_list *base_list;
|
struct commit_list *base_list = NULL;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
|
|
||||||
|
@ -1669,11 +1669,12 @@ static struct commit *get_base_commit(const char *base_commit,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
commit = lookup_commit_or_die(&oid, "upstream base");
|
commit = lookup_commit_or_die(&oid, "upstream base");
|
||||||
base_list = repo_get_merge_bases_many(the_repository,
|
if (repo_get_merge_bases_many(the_repository,
|
||||||
commit, total,
|
commit, total,
|
||||||
list);
|
list,
|
||||||
/* There should be one and only one merge base. */
|
&base_list) < 0 ||
|
||||||
if (!base_list || base_list->next) {
|
/* There should be one and only one merge base. */
|
||||||
|
!base_list || base_list->next) {
|
||||||
if (die_on_failure) {
|
if (die_on_failure) {
|
||||||
die(_("could not find exact merge base"));
|
die(_("could not find exact merge base"));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -461,17 +461,13 @@ static int get_merge_bases_many_0(struct repository *r,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct commit_list *repo_get_merge_bases_many(struct repository *r,
|
int repo_get_merge_bases_many(struct repository *r,
|
||||||
struct commit *one,
|
struct commit *one,
|
||||||
int n,
|
int n,
|
||||||
struct commit **twos)
|
struct commit **twos,
|
||||||
|
struct commit_list **result)
|
||||||
{
|
{
|
||||||
struct commit_list *result = NULL;
|
return get_merge_bases_many_0(r, one, n, twos, 1, result);
|
||||||
if (get_merge_bases_many_0(r, one, n, twos, 1, &result) < 0) {
|
|
||||||
free_commit_list(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct commit_list *repo_get_merge_bases_many_dirty(struct repository *r,
|
struct commit_list *repo_get_merge_bases_many_dirty(struct repository *r,
|
||||||
|
|
|
@ -13,9 +13,10 @@ int repo_get_merge_bases(struct repository *r,
|
||||||
struct commit *rev1,
|
struct commit *rev1,
|
||||||
struct commit *rev2,
|
struct commit *rev2,
|
||||||
struct commit_list **result);
|
struct commit_list **result);
|
||||||
struct commit_list *repo_get_merge_bases_many(struct repository *r,
|
int repo_get_merge_bases_many(struct repository *r,
|
||||||
struct commit *one, int n,
|
struct commit *one, int n,
|
||||||
struct commit **twos);
|
struct commit **twos,
|
||||||
|
struct commit_list **result);
|
||||||
/* To be used only when object flags after this call no longer matter */
|
/* To be used only when object flags after this call no longer matter */
|
||||||
struct commit_list *repo_get_merge_bases_many_dirty(struct repository *r,
|
struct commit_list *repo_get_merge_bases_many_dirty(struct repository *r,
|
||||||
struct commit *one, int n,
|
struct commit *one, int n,
|
||||||
|
|
7
commit.c
7
commit.c
|
@ -1052,7 +1052,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
|
||||||
{
|
{
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
struct rev_collect revs;
|
struct rev_collect revs;
|
||||||
struct commit_list *bases;
|
struct commit_list *bases = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct commit *ret = NULL;
|
struct commit *ret = NULL;
|
||||||
char *full_refname;
|
char *full_refname;
|
||||||
|
@ -1077,8 +1077,9 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
|
||||||
for (i = 0; i < revs.nr; i++)
|
for (i = 0; i < revs.nr; i++)
|
||||||
revs.commit[i]->object.flags &= ~TMP_MARK;
|
revs.commit[i]->object.flags &= ~TMP_MARK;
|
||||||
|
|
||||||
bases = repo_get_merge_bases_many(the_repository, commit, revs.nr,
|
if (repo_get_merge_bases_many(the_repository, commit, revs.nr,
|
||||||
revs.commit);
|
revs.commit, &bases) < 0)
|
||||||
|
exit(128);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There should be one and only one merge base, when we found
|
* There should be one and only one merge base, when we found
|
||||||
|
|
|
@ -115,9 +115,12 @@ int cmd__reach(int ac, const char **av)
|
||||||
else if (!strcmp(av[1], "is_descendant_of"))
|
else if (!strcmp(av[1], "is_descendant_of"))
|
||||||
printf("%s(A,X):%d\n", av[1], repo_is_descendant_of(r, A, X));
|
printf("%s(A,X):%d\n", av[1], repo_is_descendant_of(r, A, X));
|
||||||
else if (!strcmp(av[1], "get_merge_bases_many")) {
|
else if (!strcmp(av[1], "get_merge_bases_many")) {
|
||||||
struct commit_list *list = repo_get_merge_bases_many(the_repository,
|
struct commit_list *list = NULL;
|
||||||
A, X_nr,
|
if (repo_get_merge_bases_many(the_repository,
|
||||||
X_array);
|
A, X_nr,
|
||||||
|
X_array,
|
||||||
|
&list) < 0)
|
||||||
|
exit(128);
|
||||||
printf("%s(A,X):\n", av[1]);
|
printf("%s(A,X):\n", av[1]);
|
||||||
print_sorted_commit_ids(list);
|
print_sorted_commit_ids(list);
|
||||||
} else if (!strcmp(av[1], "reduce_heads")) {
|
} else if (!strcmp(av[1], "reduce_heads")) {
|
||||||
|
|
Loading…
Reference in a new issue