diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-07-08 20:23:07 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-07-08 20:23:07 +0200 |
commit | 7f5ad0ca8d1d7db7a21755af34251714d86b2ec1 (patch) | |
tree | 8b71767227de1c77adf50c36cc9f0d567046c9ba /read-cache.c | |
parent | Merge branch 'ks/t4205-test-describe-with-abbrev-fix' (diff) | |
parent | commit -a -m: allow the top-level tree to become empty again (diff) | |
download | git-7f5ad0ca8d1d7db7a21755af34251714d86b2ec1.tar.xz git-7f5ad0ca8d1d7db7a21755af34251714d86b2ec1.zip |
Merge branch 'js/empty-index-fixes'
A few places failed to differenciate the case where the index is
truly empty (nothing added) and we haven't yet read from the
on-disk index file, which have been corrected.
* js/empty-index-fixes:
commit -a -m: allow the top-level tree to become empty again
split-index: accept that a base index can be empty
do_read_index(): always mark index as initialized unless erroring out
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/read-cache.c b/read-cache.c index b9a995e5a1..27703e1446 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2236,6 +2236,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) if (fd < 0) { if (!must_exist && errno == ENOENT) { set_new_index_sparsity(istate); + istate->initialized = 1; return 0; } die_errno(_("%s: index file open failed"), path); @@ -2405,12 +2406,14 @@ int read_index_from(struct index_state *istate, const char *path, base_oid_hex = oid_to_hex(&split_index->base_oid); base_path = xstrfmt("%s/sharedindex.%s", gitdir, base_oid_hex); - trace2_region_enter_printf("index", "shared/do_read_index", - the_repository, "%s", base_path); - ret = do_read_index(split_index->base, base_path, 0); - trace2_region_leave_printf("index", "shared/do_read_index", - the_repository, "%s", base_path); - if (!ret) { + if (file_exists(base_path)) { + trace2_region_enter_printf("index", "shared/do_read_index", + the_repository, "%s", base_path); + + ret = do_read_index(split_index->base, base_path, 0); + trace2_region_leave_printf("index", "shared/do_read_index", + the_repository, "%s", base_path); + } else { char *path_copy = xstrdup(path); char *base_path2 = xstrfmt("%s/sharedindex.%s", dirname(path_copy), base_oid_hex); |