t6300: don't run cat-file on non-existent object

In t6300, some tests are guarded behind some prerequisites. Thus, objects created by those tests ain't available if those prerequisites are unsatistified. Attempting to run "cat-file" on those objects will run into failure. In fact, running t6300 in an environment without gpg(1), we'll see those warnings: fatal: Not a valid object name refs/tags/signed-empty fatal: Not a valid object name refs/tags/signed-short fatal: Not a valid object name refs/tags/signed-long Let's put those commands into the real tests, in order to: * skip their execution if prerequisites aren't satistified. * check their exit status code The expected value for objects with type: commit needs to be computed outside the test because we can't rely on "$3" there. Furthermore, to prevent the accidental usage of that computed expected value, BUG out on unknown object's type. Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Đoàn Trần Công Danh committed Aug 21, 2021 at 08:36 UTC 597fa8cb430179ec2b28e2d39a857af25717c98c
1 file changed +16 -11
t/t6300-for-each-ref.sh
+16 -11
@@ -59,18 +59,23 @@ test_atom() {
59 # Automatically test "contents:size" atom after testing "contents"
60 if test "$2" = "contents"
61 then
62 - case $(git cat-file -t "$ref") in
63 - tag)
64 - # We cannot use $3 as it expects sanitize_pgp to run
65 - expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
66 - tree | blob)
67 - expect='' ;;
68 - commit)
69 - expect=$(printf '%s' "$3" | wc -c) ;;
70 - esac
71 - # Leave $expect unquoted to lose possible leading whitespaces
72 - echo $expect >expected
62 + # for commit leg, $3 is changed there
63 + expect=$(printf '%s' "$3" | wc -c)
64 test_expect_${4:-success} $PREREQ "basic atom: $1 contents:size" '
65 + type=$(git cat-file -t "$ref") &&
66 + case $type in
67 + tag)
68 + # We cannot use $3 as it expects sanitize_pgp to run
69 + expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
70 + tree | blob)
71 + expect="" ;;
72 + commit)
73 + : "use the calculated expect" ;;
74 + *)
75 + BUG "unknown object type" ;;
76 + esac &&
77 + # Leave $expect unquoted to lose possible leading whitespaces
78 + echo $expect >expected &&
79 git for-each-ref --format="%(contents:size)" "$ref" >actual &&
80 test_cmp expected actual
81 '