aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2026-03-02 13:13:10 +0100
committerJunio C Hamano <gitster@pobox.com>2026-03-03 15:09:36 -0800
commita021e4f92cbacdb028b3efa49f619b076e72c9a6 (patch)
tree552c7bb354106e9635e43f3098febc0224d34305
parent48f6d9232834be661f0d1dc4f187b324124ccbe0 (diff)
downloadgit-a021e4f92cbacdb028b3efa49f619b076e72c9a6.tar.xz
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>
-rw-r--r--builtin/checkout.c3
-rw-r--r--cache-tree.c4
-rw-r--r--cache-tree.h3
3 files changed, 6 insertions, 4 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c
index a8863277f2..f8b3a7b08c 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -891,7 +891,8 @@ static int merge_working_tree(const struct checkout_opts *opts,
0);
init_ui_merge_options(&o, the_repository);
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,
opts, 1,
diff --git a/cache-tree.c b/cache-tree.c
index 16c3a36b48..60bcc07c3b 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -723,11 +723,11 @@ static int write_index_as_tree_internal(struct object_id *oid,
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;
int was_valid, ret;
- struct index_state *index_state = repo->index;
was_valid = index_state->cache_tree &&
cache_tree_fully_valid(index_state->cache_tree);
diff --git a/cache-tree.h b/cache-tree.h
index b82c4963e7..f8bddae523 100644
--- a/cache-tree.h
+++ b/cache-tree.h
@@ -47,7 +47,8 @@ int cache_tree_verify(struct repository *, struct index_state *);
#define WRITE_TREE_UNMERGED_INDEX (-2)
#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);
void prime_cache_tree(struct repository *, struct index_state *, struct tree *);