mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
Merge branch 'ps/index-pack-outside-repo-fix' into maint-2.46
"git verify-pack" and "git index-pack" started dying outside a repository, which has been corrected. * ps/index-pack-outside-repo-fix: builtin/index-pack: fix segfaults when running outside of a repo
This commit is contained in:
commit
be344f3631
@ -1868,6 +1868,15 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
||||
if (!index_name && pack_name)
|
||||
index_name = derive_filename(pack_name, "pack", "idx", &index_name_buf);
|
||||
|
||||
/*
|
||||
* Packfiles and indices do not carry enough information to be able to
|
||||
* identify their object hash. So when we are neither in a repository
|
||||
* nor has the user told us which object hash to use we have no other
|
||||
* choice but to guess the object hash.
|
||||
*/
|
||||
if (!the_repository->hash_algo)
|
||||
repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
|
||||
|
||||
opts.flags &= ~(WRITE_REV | WRITE_REV_VERIFY);
|
||||
if (rev_index) {
|
||||
opts.flags |= verify ? WRITE_REV_VERIFY : WRITE_REV;
|
||||
|
@ -635,4 +635,43 @@ test_expect_success 'negative window clamps to 0' '
|
||||
check_deltas stderr = 0
|
||||
'
|
||||
|
||||
for hash in sha1 sha256
|
||||
do
|
||||
test_expect_success "verify-pack with $hash packfile" '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init --object-format=$hash repo &&
|
||||
test_commit -C repo initial &&
|
||||
git -C repo repack -ad &&
|
||||
git -C repo verify-pack "$(pwd)"/repo/.git/objects/pack/*.idx &&
|
||||
if test $hash = sha1
|
||||
then
|
||||
nongit git verify-pack "$(pwd)"/repo/.git/objects/pack/*.idx
|
||||
else
|
||||
# We have no way to identify the hash used by packfiles
|
||||
# or indices, so we always fall back to SHA1.
|
||||
nongit test_must_fail git verify-pack "$(pwd)"/repo/.git/objects/pack/*.idx &&
|
||||
# But with an explicit object format we should succeed.
|
||||
nongit git verify-pack --object-format=$hash "$(pwd)"/repo/.git/objects/pack/*.idx
|
||||
fi
|
||||
'
|
||||
|
||||
test_expect_success "index-pack outside of a $hash repository" '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init --object-format=$hash repo &&
|
||||
test_commit -C repo initial &&
|
||||
git -C repo repack -ad &&
|
||||
git -C repo index-pack --verify "$(pwd)"/repo/.git/objects/pack/*.pack &&
|
||||
if test $hash = sha1
|
||||
then
|
||||
nongit git index-pack --verify "$(pwd)"/repo/.git/objects/pack/*.pack
|
||||
else
|
||||
# We have no way to identify the hash used by packfiles
|
||||
# or indices, so we always fall back to SHA1.
|
||||
nongit test_must_fail git index-pack --verify "$(pwd)"/repo/.git/objects/pack/*.pack 2>err &&
|
||||
# But with an explicit object format we should succeed.
|
||||
nongit git index-pack --object-format=$hash --verify "$(pwd)"/repo/.git/objects/pack/*.pack
|
||||
fi
|
||||
'
|
||||
done
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user