Merge branch 'rs/commit-commit-stack'

Code clean-up to use the commit_stack API.

* rs/commit-commit-stack:
  commit: use commit_stack
This commit is contained in:
Junio C Hamano
2026-02-17 13:30:42 -08:00

View File

@@ -1014,9 +1014,7 @@ void sort_in_topological_order(struct commit_list **list, enum rev_sort_order so
}
struct rev_collect {
struct commit **commit;
int nr;
int alloc;
struct commit_stack stack;
unsigned int initial : 1;
};
@@ -1033,8 +1031,7 @@ static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
repo_parse_commit(the_repository, commit))
return;
ALLOC_GROW(revs->commit, revs->nr + 1, revs->alloc);
revs->commit[revs->nr++] = commit;
commit_stack_push(&revs->stack, commit);
commit->object.flags |= TMP_MARK;
}
@@ -1059,7 +1056,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
struct object_id oid;
struct rev_collect revs;
struct commit_list *bases = NULL;
int i;
size_t i;
struct commit *ret = NULL;
char *full_refname;
@@ -1073,19 +1070,19 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
die("Ambiguous refname: '%s'", refname);
}
memset(&revs, 0, sizeof(revs));
commit_stack_init(&revs.stack);
revs.initial = 1;
refs_for_each_reflog_ent(get_main_ref_store(the_repository),
full_refname, collect_one_reflog_ent, &revs);
if (!revs.nr)
if (!revs.stack.nr)
add_one_commit(&oid, &revs);
for (i = 0; i < revs.nr; i++)
revs.commit[i]->object.flags &= ~TMP_MARK;
for (i = 0; i < revs.stack.nr; i++)
revs.stack.items[i]->object.flags &= ~TMP_MARK;
if (repo_get_merge_bases_many(the_repository, commit, revs.nr,
revs.commit, &bases) < 0)
if (repo_get_merge_bases_many(the_repository, commit, revs.stack.nr,
revs.stack.items, &bases) < 0)
exit(128);
/*
@@ -1096,16 +1093,16 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
goto cleanup_return;
/* And the found one must be one of the reflog entries */
for (i = 0; i < revs.nr; i++)
if (&bases->item->object == &revs.commit[i]->object)
for (i = 0; i < revs.stack.nr; i++)
if (&bases->item->object == &revs.stack.items[i]->object)
break; /* found */
if (revs.nr <= i)
if (revs.stack.nr <= i)
goto cleanup_return;
ret = bases->item;
cleanup_return:
free(revs.commit);
commit_stack_clear(&revs.stack);
commit_list_free(bases);
free(full_refname);
return ret;