rebase: refactor can_fast_forward into goto tower
Before, can_fast_forward was written with an if-else statement. However, in the future, we may be adding more termination cases which would lead to deeply nested if statements. Refactor to use a goto tower so that future cases can be easily inserted. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c9efc21683
commit
2b318aa6c3
@ -1264,20 +1264,25 @@ static int can_fast_forward(struct commit *onto, struct object_id *head_oid,
|
||||
struct object_id *merge_base)
|
||||
{
|
||||
struct commit *head = lookup_commit(the_repository, head_oid);
|
||||
struct commit_list *merge_bases;
|
||||
int res;
|
||||
struct commit_list *merge_bases = NULL;
|
||||
int res = 0;
|
||||
|
||||
if (!head)
|
||||
return 0;
|
||||
goto done;
|
||||
|
||||
merge_bases = get_merge_bases(onto, head);
|
||||
if (merge_bases && !merge_bases->next) {
|
||||
oidcpy(merge_base, &merge_bases->item->object.oid);
|
||||
res = oideq(merge_base, &onto->object.oid);
|
||||
} else {
|
||||
if (!merge_bases || merge_bases->next) {
|
||||
oidcpy(merge_base, &null_oid);
|
||||
res = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
oidcpy(merge_base, &merge_bases->item->object.oid);
|
||||
if (!oideq(merge_base, &onto->object.oid))
|
||||
goto done;
|
||||
|
||||
res = 1;
|
||||
|
||||
done:
|
||||
free_commit_list(merge_bases);
|
||||
return res && is_linear_history(onto, head);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user