]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t: use portable wrapper for readlink(1)
authorJeff King <peff@peff.net>
Fri, 18 Jun 2021 16:32:22 +0000 (12:32 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sat, 19 Jun 2021 06:26:05 +0000 (15:26 +0900)
Not all systems have a readlink program available for use by the shell.
This causes t3210 to fail on at least AIX. Let's provide a perl
one-liner to do the same thing, and use it there.

I also updated calls in t9802. Nobody reported failure there, but it's
the same issue. Presumably nobody actually tests with p4 on AIX in the
first place (if it is even available there).

I left the use of readlink in the "--valgrind" setup in test-lib.sh, as
valgrind isn't available on exotic platforms anyway (and I didn't want
to increase dependencies between test-lib.sh and test-lib-functions.sh).

There's one other curious case. Commit d2addc3b96 (t7800: readlink may
not be available, 2016-05-31) fixed a similar case. We can't use our
wrapper function there, though, as it's inside a sub-script triggered by
Git. It uses a slightly different technique ("ls" piped to "sed"). I
chose not to use that here as it gives confusing "ls -l" output if the
file is unexpectedly not a symlink (which is OK for its limited use, but
potentially confusing for general use within the test suite). The perl
version emits the empty string.

Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3210-pack-refs.sh
t/t9802-git-p4-filetype.sh
t/test-lib-functions.sh

index 3b7cdc56ec841a482607b141caec0f84ad33b43d..577f32dc71ff2ccf0f34c01b060fd82b87c566f9 100755 (executable)
@@ -253,7 +253,7 @@ test_expect_success SYMLINKS 'pack symlinked packed-refs' '
        git for-each-ref >all-refs-packed &&
        test_cmp all-refs-before all-refs-packed &&
        test -h .git/packed-refs &&
-       test "$(readlink .git/packed-refs)" = "my-deviant-packed-refs"
+       test "$(test_readlink .git/packed-refs)" = "my-deviant-packed-refs"
 '
 
 test_done
index 94edebe272691a72768cea14c1185c26113aad14..19073c6e9f8485f4d76c46cafd9c0a98c0fbce96 100755 (executable)
@@ -263,7 +263,7 @@ test_expect_success SYMLINKS 'ensure p4 symlink parsed correctly' '
        (
                cd "$git" &&
                test -L symlink &&
-               test $(readlink symlink) = symlink-target
+               test $(test_readlink symlink) = symlink-target
        )
 '
 
@@ -329,7 +329,7 @@ test_expect_success SYMLINKS 'empty symlink target' '
        git p4 clone --dest="$git" //depot@all &&
        (
                cd "$git" &&
-               test $(readlink empty-symlink) = target2
+               test $(test_readlink empty-symlink) = target2
        )
 '
 
index b823c140271037b9f8c03b6670e3133d2cc9d0c1..661f376077d327175136f20934e6d054c5a4a151 100644 (file)
@@ -1692,3 +1692,9 @@ test_region () {
 
        return 0
 }
+
+# Print the destination of symlink(s) provided as arguments. Basically
+# the same as the readlink command, but it's not available everywhere.
+test_readlink () {
+       perl -le 'print readlink($_) for @ARGV' "$@"
+}