commit: use commit_stack
Use commit_stack instead of open-coding it. Also convert the loop counter i to size_t to match the type of the nr member of struct commit_stack. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe committed
Feb 8, 2026 at 12:37 UTC
050566633ad0e168105687cdbdca36cd1add06d5
1 file changed
+13
-16
commit.c
+13
-16
@@ -1015,9 +1015,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so
1015
}
1016
1017
struct rev_collect {
1018
- struct commit **commit;
1019
- int nr;
1020
- int alloc;
1018
+ struct commit_stack stack;
1019
unsigned int initial : 1;
1020
};
1021
@@ -1034,8 +1032,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
1032
repo_parse_commit(the_repository, commit))
1033
return;
1034
1037
- ALLOC_GROW(revs->commit, revs->nr + 1, revs->alloc);
1038
- revs->commit[revs->nr++] = commit;
1035
+ commit_stack_push(&revs->stack, commit);
1036
commit->object.flags |= TMP_MARK;
1037
}
1038
@@ -1060,7 +1057,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
1057
struct object_id oid;
1058
struct rev_collect revs;
1059
struct commit_list *bases = NULL;
1063
- int i;
1060
+ size_t i;
1061
struct commit *ret = NULL;
1062
char *full_refname;
1063
@@ -1074,19 +1071,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
1071
die("Ambiguous refname: '%s'", refname);
1072
}
1073
1077
- memset(&revs, 0, sizeof(revs));
1074
+ commit_stack_init(&revs.stack);
1075
revs.initial = 1;
1076
refs_for_each_reflog_ent(get_main_ref_store(the_repository),
1077
full_refname, collect_one_reflog_ent, &revs);
1078
1082
- if (!revs.nr)
1079
+ if (!revs.stack.nr)
1080
add_one_commit(&oid, &revs);
1081
1085
- for (i = 0; i < revs.nr; i++)
1086
- revs.commit[i]->object.flags &= ~TMP_MARK;
1082
+ for (i = 0; i < revs.stack.nr; i++)
1083
+ revs.stack.items[i]->object.flags &= ~TMP_MARK;
1084
1088
- if (repo_get_merge_bases_many(the_repository, commit, revs.nr,
1089
- revs.commit, &bases) < 0)
1085
+ if (repo_get_merge_bases_many(the_repository, commit, revs.stack.nr,
1086
+ revs.stack.items, &bases) < 0)
1087
exit(128);
1088
1089
/*
@@ -1097,16 +1094,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
1094
goto cleanup_return;
1095
1096
/* And the found one must be one of the reflog entries */
1100
- for (i = 0; i < revs.nr; i++)
1101
- if (&bases->item->object == &revs.commit[i]->object)
1097
+ for (i = 0; i < revs.stack.nr; i++)
1098
+ if (&bases->item->object == &revs.stack.items[i]->object)
1099
break; /* found */
1103
- if (revs.nr <= i)
1100
+ if (revs.stack.nr <= i)
1101
goto cleanup_return;
1102
1103
ret = bases->item;
1104
1105
cleanup_return:
1109
- free(revs.commit);
1106
+ commit_stack_clear(&revs.stack);
1107
free_commit_list(bases);
1108
free(full_refname);
1109
return ret;