cache-tree: allow writing in-memory index as tree

The function `write_in_core_index_as_tree()` takes a repository and
writes its index into a tree object. What this function cannot do though
is to take an _arbitrary_ in-memory index.

Introduce a new `struct index_state` parameter so that the caller can
pass a different index than the one belonging to the repository. This
will be used in a subsequent commit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2026-03-02 13:13:10 +01:00 committed by Junio C Hamano
parent 48f6d92328
commit a021e4f92c
3 changed files with 6 additions and 4 deletions

View File

@ -891,7 +891,8 @@ static int merge_working_tree(const struct checkout_opts *opts,
0); 0);
init_ui_merge_options(&o, the_repository); init_ui_merge_options(&o, the_repository);
o.verbosity = 0; o.verbosity = 0;
work = write_in_core_index_as_tree(the_repository); work = write_in_core_index_as_tree(the_repository,
the_repository->index);


ret = reset_tree(new_tree, ret = reset_tree(new_tree,
opts, 1, opts, 1,

View File

@ -723,11 +723,11 @@ static int write_index_as_tree_internal(struct object_id *oid,
return 0; return 0;
} }


struct tree* write_in_core_index_as_tree(struct repository *repo) { struct tree *write_in_core_index_as_tree(struct repository *repo,
struct index_state *index_state) {
struct object_id o; struct object_id o;
int was_valid, ret; int was_valid, ret;


struct index_state *index_state = repo->index;
was_valid = index_state->cache_tree && was_valid = index_state->cache_tree &&
cache_tree_fully_valid(index_state->cache_tree); cache_tree_fully_valid(index_state->cache_tree);



View File

@ -47,7 +47,8 @@ int cache_tree_verify(struct repository *, struct index_state *);
#define WRITE_TREE_UNMERGED_INDEX (-2) #define WRITE_TREE_UNMERGED_INDEX (-2)
#define WRITE_TREE_PREFIX_ERROR (-3) #define WRITE_TREE_PREFIX_ERROR (-3)


struct tree* write_in_core_index_as_tree(struct repository *repo); struct tree *write_in_core_index_as_tree(struct repository *repo,
struct index_state *index_state);
int write_index_as_tree(struct object_id *oid, struct index_state *index_state, const char *index_path, int flags, const char *prefix); int write_index_as_tree(struct object_id *oid, struct index_state *index_state, const char *index_path, int flags, const char *prefix);
void prime_cache_tree(struct repository *, struct index_state *, struct tree *); void prime_cache_tree(struct repository *, struct index_state *, struct tree *);