hash-object: stop allowing unknown types
When passed the "--literally" option, hash-object will allow any arbitrary string for its "-t" type option. Such objects are only useful for testing or debugging, as they cannot be used in the normal way (e.g., you cannot fetch their contents!). Let's drop this feature, which will eventually let us simplify the object-writing code. This is technically backwards incompatible, but since such objects were never really functional, it seems unlikely that anybody will notice. We will retain the --literally flag, as it also instructs hash-object not to worry about other format issues (e.g., type-specific things that fsck would complain about). The documentation does not need to be updated, as it was always vague about which checks we're loosening (it uses only the phrase "any garbage"). The code change is a bit hard to verify from just the patch text. We can drop our local hash_literally() helper, but it was really just wrapping write_object_file_literally(). We now replace that with calling index_fd(), as we do for the non-literal code path, but dropping the INDEX_FORMAT_CHECK flag. This ends up being the same semantically as what the _literally() code path was doing (modulo handling unknown types, which is our goal). We'll be able to clean up these code paths a bit more in subsequent patches. The existing test is flipped to show that we now reject the unknown type. The additional "extra-long type" test is now redundant, as we bail early upon seeing a bogus type. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b5643b60ac
commit
65a6a79b42
@@ -248,15 +248,8 @@ test_expect_success 'hash-object complains about truncated type name' '
|
||||
test_must_fail git hash-object -t bl --stdin </dev/null
|
||||
'
|
||||
|
||||
test_expect_success '--literally' '
|
||||
t=1234567890 &&
|
||||
echo example | git hash-object -t $t --literally --stdin
|
||||
'
|
||||
|
||||
test_expect_success '--literally with extra-long type' '
|
||||
t=12345678901234567890123456789012345678901234567890 &&
|
||||
t="$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t" &&
|
||||
echo example | git hash-object -t $t --literally --stdin
|
||||
test_expect_success '--literally complains about non-standard types' '
|
||||
test_must_fail git hash-object -t bogus --literally --stdin
|
||||
'
|
||||
|
||||
test_expect_success '--stdin outside of repository (uses SHA-1)' '
|
||||
|
||||
Reference in New Issue
Block a user