summaryrefslogtreecommitdiff
path: root/pack-bitmap.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-06-03 21:30:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-06-03 21:30:35 (GMT)
commit091680472db4ab4604e79259233040a8d5762c06 (patch)
tree7905dcefc711731411f3d8a31f06bb0de0d6ad21 /pack-bitmap.c
parentd8c8dccbaafd35879493a95840ae52153f1d1136 (diff)
parent4090511e408a37091e7812bc1828a763a035e0a2 (diff)
downloadgit-091680472db4ab4604e79259233040a8d5762c06.zip
git-091680472db4ab4604e79259233040a8d5762c06.tar.gz
git-091680472db4ab4604e79259233040a8d5762c06.tar.bz2
Merge branch 'tb/midx-race-in-pack-objects'
The multi-pack-index code did not protect the packfile it is going to depend on from getting removed while in use, which has been corrected. * tb/midx-race-in-pack-objects: builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects builtin/pack-objects.c: ensure included `--stdin-packs` exist builtin/pack-objects.c: avoid redundant NULL check pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
Diffstat (limited to 'pack-bitmap.c')
-rw-r--r--pack-bitmap.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 6a7cdca..3613422 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -315,6 +315,8 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
struct stat st;
char *idx_name = midx_bitmap_filename(midx);
int fd = git_open(idx_name);
+ uint32_t i;
+ struct packed_git *preferred;
free(idx_name);
@@ -353,6 +355,20 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
warning(_("multi-pack bitmap is missing required reverse index"));
goto cleanup;
}
+
+ for (i = 0; i < bitmap_git->midx->num_packs; i++) {
+ if (prepare_midx_pack(the_repository, bitmap_git->midx, i))
+ die(_("could not open pack %s"),
+ bitmap_git->midx->pack_names[i]);
+ }
+
+ preferred = bitmap_git->midx->packs[midx_preferred_pack(bitmap_git)];
+ if (!is_pack_valid(preferred)) {
+ warning(_("preferred pack (%s) is invalid"),
+ preferred->pack_name);
+ goto cleanup;
+ }
+
return 0;
cleanup:
@@ -429,8 +445,6 @@ static int load_reverse_index(struct bitmap_index *bitmap_git)
* since we will need to make use of them in pack-objects.
*/
for (i = 0; i < bitmap_git->midx->num_packs; i++) {
- if (prepare_midx_pack(the_repository, bitmap_git->midx, i))
- die(_("load_reverse_index: could not open pack"));
ret = load_pack_revindex(bitmap_git->midx->packs[i]);
if (ret)
return ret;