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>
This commit is contained in:
Đoàn Trần Công Danh 2021-08-21 08:36:33 +07:00 коммит произвёл Junio C Hamano
Родитель 225bc32a98
Коммит 597fa8cb43
1 изменённых файлов: 16 добавлений и 11 удалений

Просмотреть файл

@ -59,18 +59,23 @@ test_atom() {
# Automatically test "contents:size" atom after testing "contents" # Automatically test "contents:size" atom after testing "contents"
if test "$2" = "contents" if test "$2" = "contents"
then then
case $(git cat-file -t "$ref") in # for commit leg, $3 is changed there
expect=$(printf '%s' "$3" | wc -c)
test_expect_${4:-success} $PREREQ "basic atom: $1 contents:size" '
type=$(git cat-file -t "$ref") &&
case $type in
tag) tag)
# We cannot use $3 as it expects sanitize_pgp to run # We cannot use $3 as it expects sanitize_pgp to run
expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;; expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
tree | blob) tree | blob)
expect='' ;; expect="" ;;
commit) commit)
expect=$(printf '%s' "$3" | wc -c) ;; : "use the calculated expect" ;;
esac *)
BUG "unknown object type" ;;
esac &&
# Leave $expect unquoted to lose possible leading whitespaces # Leave $expect unquoted to lose possible leading whitespaces
echo $expect >expected echo $expect >expected &&
test_expect_${4:-success} $PREREQ "basic atom: $1 contents:size" '
git for-each-ref --format="%(contents:size)" "$ref" >actual && git for-each-ref --format="%(contents:size)" "$ref" >actual &&
test_cmp expected actual test_cmp expected actual
' '