mirror of
https://github.com/git/git.git
synced 2026-01-10 10:13:33 +00:00
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:
committed by
Junio C Hamano
parent
76e2a09999
commit
f87056ce40
@@ -74,13 +74,17 @@ static int handle_independent(int count, const char **args)
|
|||||||
static int handle_octopus(int count, const char **args, int show_all)
|
static int handle_octopus(int count, const char **args, int show_all)
|
||||||
{
|
{
|
||||||
struct commit_list *revs = NULL;
|
struct commit_list *revs = NULL;
|
||||||
struct commit_list *result, *rev;
|
struct commit_list *result = NULL, *rev;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = count - 1; i >= 0; i--)
|
for (i = count - 1; i >= 0; i--)
|
||||||
commit_list_insert(get_commit_reference(args[i]), &revs);
|
commit_list_insert(get_commit_reference(args[i]), &revs);
|
||||||
|
|
||||||
result = get_octopus_merge_bases(revs);
|
if (get_octopus_merge_bases(revs, &result) < 0) {
|
||||||
|
free_commit_list(revs);
|
||||||
|
free_commit_list(result);
|
||||||
|
return 128;
|
||||||
|
}
|
||||||
free_commit_list(revs);
|
free_commit_list(revs);
|
||||||
reduce_heads_replace(&result);
|
reduce_heads_replace(&result);
|
||||||
|
|
||||||
|
|||||||
@@ -1523,7 +1523,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|||||||
} else {
|
} else {
|
||||||
struct commit_list *list = remoteheads;
|
struct commit_list *list = remoteheads;
|
||||||
commit_list_insert(head_commit, &list);
|
commit_list_insert(head_commit, &list);
|
||||||
common = get_octopus_merge_bases(list);
|
if (get_octopus_merge_bases(list, &common) < 0) {
|
||||||
|
free(list);
|
||||||
|
ret = 2;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
free(list);
|
free(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -815,7 +815,7 @@ static int get_octopus_merge_base(struct object_id *merge_base,
|
|||||||
const struct object_id *merge_head,
|
const struct object_id *merge_head,
|
||||||
const struct object_id *fork_point)
|
const struct object_id *fork_point)
|
||||||
{
|
{
|
||||||
struct commit_list *revs = NULL, *result;
|
struct commit_list *revs = NULL, *result = NULL;
|
||||||
|
|
||||||
commit_list_insert(lookup_commit_reference(the_repository, curr_head),
|
commit_list_insert(lookup_commit_reference(the_repository, curr_head),
|
||||||
&revs);
|
&revs);
|
||||||
@@ -825,7 +825,8 @@ static int get_octopus_merge_base(struct object_id *merge_base,
|
|||||||
commit_list_insert(lookup_commit_reference(the_repository, fork_point),
|
commit_list_insert(lookup_commit_reference(the_repository, fork_point),
|
||||||
&revs);
|
&revs);
|
||||||
|
|
||||||
result = get_octopus_merge_bases(revs);
|
if (get_octopus_merge_bases(revs, &result) < 0)
|
||||||
|
exit(128);
|
||||||
free_commit_list(revs);
|
free_commit_list(revs);
|
||||||
reduce_heads_replace(&result);
|
reduce_heads_replace(&result);
|
||||||
|
|
||||||
|
|||||||
@@ -175,24 +175,26 @@ static int merge_bases_many(struct repository *r,
|
|||||||
return 0;
|
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)
|
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) {
|
for (i = in->next; i; i = i->next) {
|
||||||
struct commit_list *new_commits = NULL, *end = NULL;
|
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;
|
struct commit_list *bases = NULL;
|
||||||
if (repo_get_merge_bases(the_repository, i->item,
|
if (repo_get_merge_bases(the_repository, i->item,
|
||||||
j->item, &bases) < 0) {
|
j->item, &bases) < 0) {
|
||||||
free_commit_list(bases);
|
free_commit_list(bases);
|
||||||
return NULL;
|
free_commit_list(*result);
|
||||||
|
*result = NULL;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
if (!new_commits)
|
if (!new_commits)
|
||||||
new_commits = bases;
|
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)
|
for (k = bases; k; k = k->next)
|
||||||
end = k;
|
end = k;
|
||||||
}
|
}
|
||||||
free_commit_list(ret);
|
free_commit_list(*result);
|
||||||
ret = new_commits;
|
*result = new_commits;
|
||||||
}
|
}
|
||||||
return ret;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remove_redundant_no_gen(struct repository *r,
|
static int remove_redundant_no_gen(struct repository *r,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ struct commit_list *repo_get_merge_bases_many_dirty(struct repository *r,
|
|||||||
struct commit *one, int n,
|
struct commit *one, int n,
|
||||||
struct commit **twos);
|
struct commit **twos);
|
||||||
|
|
||||||
struct commit_list *get_octopus_merge_bases(struct commit_list *in);
|
int get_octopus_merge_bases(struct commit_list *in, struct commit_list **result);
|
||||||
|
|
||||||
int repo_is_descendant_of(struct repository *r,
|
int repo_is_descendant_of(struct repository *r,
|
||||||
struct commit *commit,
|
struct commit *commit,
|
||||||
|
|||||||
Reference in New Issue
Block a user