]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t6300: don't run cat-file on non-existent object
authorĐoàn Trần Công Danh <congdanhqx@gmail.com>
Sat, 21 Aug 2021 01:36:33 +0000 (08:36 +0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 Aug 2021 18:45:53 +0000 (11:45 -0700)
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>
t/t6300-for-each-ref.sh

index 9e0214076b4d7efd3522a8b7d68f6fe297666cd1..ad9620efeb87a633013b473fe1314c1375679d00 100755 (executable)
@@ -59,18 +59,23 @@ test_atom() {
        # Automatically test "contents:size" atom after testing "contents"
        if test "$2" = "contents"
        then
-               case $(git cat-file -t "$ref") in
-               tag)
-                       # We cannot use $3 as it expects sanitize_pgp to run
-                       expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
-               tree | blob)
-                       expect='' ;;
-               commit)
-                       expect=$(printf '%s' "$3" | wc -c) ;;
-               esac
-               # Leave $expect unquoted to lose possible leading whitespaces
-               echo $expect >expected
+               # 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)
+                               # We cannot use $3 as it expects sanitize_pgp to run
+                               expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
+                       tree | blob)
+                               expect="" ;;
+                       commit)
+                               : "use the calculated expect" ;;
+                       *)
+                               BUG "unknown object type" ;;
+                       esac &&
+                       # Leave $expect unquoted to lose possible leading whitespaces
+                       echo $expect >expected &&
                        git for-each-ref --format="%(contents:size)" "$ref" >actual &&
                        test_cmp expected actual
                '