зеркало из https://github.com/microsoft/git.git
Merge branch 'tb/midx-no-bitmap-for-no-objects'
When there is no object to write .bitmap file for, "git multi-pack-index" triggered an error, instead of just skipping, which has been corrected. * tb/midx-no-bitmap-for-no-objects: midx: prevent writing a .bitmap without any objects
This commit is contained in:
Коммит
9b7e531f94
9
midx.c
9
midx.c
|
@ -1077,6 +1077,9 @@ static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
|
|||
char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash));
|
||||
int ret;
|
||||
|
||||
if (!ctx->entries_nr)
|
||||
BUG("cannot write a bitmap without any objects");
|
||||
|
||||
if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
|
||||
options |= BITMAP_OPT_HASH_CACHE;
|
||||
|
||||
|
@ -1401,6 +1404,12 @@ static int write_midx_internal(const char *object_dir,
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!ctx.entries_nr) {
|
||||
if (flags & MIDX_WRITE_BITMAP)
|
||||
warning(_("refusing to write multi-pack .bitmap without any objects"));
|
||||
flags &= ~(MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP);
|
||||
}
|
||||
|
||||
cf = init_chunkfile(f);
|
||||
|
||||
add_chunk(cf, MIDX_CHUNKID_PACKNAMES, pack_name_concat_len,
|
||||
|
|
|
@ -266,6 +266,28 @@ test_expect_success 'hash-cache values are propagated from pack bitmaps' '
|
|||
)
|
||||
'
|
||||
|
||||
test_expect_success 'no .bitmap is written without any objects' '
|
||||
rm -fr repo &&
|
||||
git init repo &&
|
||||
test_when_finished "rm -fr repo" &&
|
||||
(
|
||||
cd repo &&
|
||||
|
||||
empty="$(git pack-objects $objdir/pack/pack </dev/null)" &&
|
||||
cat >packs <<-EOF &&
|
||||
pack-$empty.idx
|
||||
EOF
|
||||
|
||||
git multi-pack-index write --bitmap --stdin-packs \
|
||||
<packs 2>err &&
|
||||
|
||||
grep "bitmap without any objects" err &&
|
||||
|
||||
test_path_is_file $midx &&
|
||||
test_path_is_missing $midx-$(midx_checksum $objdir).bitmap
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'graceful fallback when missing reverse index' '
|
||||
rm -fr repo &&
|
||||
git init repo &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче