cat-file tests: test messaging on bad objects/paths

Add tests for the output that's emitted when we disambiguate
<obj>:<path> in cat-file. This gives us a baseline for improving these
messages.

For e.g. "git blame" we'll emit:

    $ git blame HEAD:foo
    fatal: no such path 'HEAD:foo' in HEAD

But cat-file doesn't disambiguate these two cases, and just gives the
rather unhelpful:

    $ git cat-file --textconv HEAD:foo
    fatal: Not a valid object name HEAD:foo

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2021-12-28 14:28:42 +01:00 committed by Junio C Hamano
parent ddf8420b59
commit 68c69f90c8

View File

@ -19,6 +19,48 @@ test_expect_success 'setup ' '
GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
'
test_expect_success 'usage: <bad rev>' '
cat >expect <<-\EOF &&
fatal: Not a valid object name HEAD2
EOF
test_must_fail git cat-file --textconv HEAD2 2>actual &&
test_cmp expect actual
'
test_expect_success 'usage: <bad rev>:<bad path>' '
cat >expect <<-\EOF &&
fatal: Not a valid object name HEAD2:two.bin
EOF
test_must_fail git cat-file --textconv HEAD2:two.bin 2>actual &&
test_cmp expect actual
'
test_expect_success 'usage: <rev>:<bad path>' '
cat >expect <<-\EOF &&
fatal: Not a valid object name HEAD:two.bin
EOF
test_must_fail git cat-file --textconv HEAD:two.bin 2>actual &&
test_cmp expect actual
'
test_expect_success 'usage: <rev> with no <path>' '
cat >expect <<-\EOF &&
fatal: git cat-file --textconv HEAD: <object> must be <sha1:path>
EOF
test_must_fail git cat-file --textconv HEAD 2>actual &&
test_cmp expect actual
'
test_expect_success 'usage: <bad rev>:<good (in HEAD) path>' '
cat >expect <<-\EOF &&
fatal: Not a valid object name HEAD2:one.bin
EOF
test_must_fail git cat-file --textconv HEAD2:one.bin 2>actual &&
test_cmp expect actual
'
cat >expected <<EOF
bin: test version 2
EOF