Skip to content

Commit 526c03b

Browse files
Denton-Lgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 238bf1d commit 526c03b

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

builtin/rebase.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -899,21 +899,27 @@ static int can_fast_forward(struct commit *onto, struct object_id *head_oid,
899899
struct object_id *merge_base)
900900
{
901901
struct commit *head = lookup_commit(the_repository, head_oid);
902-
struct commit_list *merge_bases;
903-
int res;
902+
struct commit_list *merge_bases = NULL;
903+
int res = 0;
904904

905905
if (!head)
906-
return 0;
906+
goto done;
907907

908908
merge_bases = get_merge_bases(onto, head);
909-
if (merge_bases && !merge_bases->next) {
910-
oidcpy(merge_base, &merge_bases->item->object.oid);
911-
res = oideq(merge_base, &onto->object.oid);
912-
} else {
909+
if (!merge_bases || merge_bases->next) {
913910
oidcpy(merge_base, &null_oid);
914-
res = 0;
911+
goto done;
915912
}
916-
free_commit_list(merge_bases);
913+
914+
oidcpy(merge_base, &merge_bases->item->object.oid);
915+
if (!oideq(merge_base, &onto->object.oid))
916+
goto done;
917+
918+
res = 1;
919+
920+
done:
921+
if (merge_bases)
922+
free_commit_list(merge_bases);
917923
return res && is_linear_history(onto, head);
918924
}
919925

0 commit comments

Comments
 (0)