Skip to content
  • Guilhem Moulin's avatar
    tests: Replace `which` calls with `command -v`. · cbc143bf
    Guilhem Moulin authored and Milan Broz's avatar Milan Broz committed
    AFAIK older versions of the POSIX Standard didn't specify a way to
    locate commands.  Many operating systems and distributions added a
    which(1) utility for that purpose, unfortunately without consistent
    behavior across the board.
    
    OTOH POSIX.1-2008 (or was it older?  POSIX.1-2001 mentions it too, but
    with a restriction: “On systems supporting the User Portability Utilities
    option”) specifies that `command -v` can be used for that purpose:
    
        https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/utilities/command.html
    
    Moreover the standard adds that if the argument is neither a valid
    utility, builtin, shell function nor alias then “no output shall be
    written and the exit status shall reflect that the name was not found”.
    It's therefore no longer needed to void the error output (spewing error
    messages was one of the inconsistent behavior of the different which(1)
    utilities).
    
    The upcoming Debian 12 (codename Bookworm) appears to have deprecated
    its which(1) utility (as a first step for its removal from the base
    system):
    
        $ which foo
        /usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
    
    In most places the deprecation notice isn't visible when running the
    test suite because most `which` calls run with the error output
    redirected to /dev/null, however this is not the case everywhere:
    
        https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.4.3/tests/integrity-compat-test#L333
        https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.4.3/tests/reencryption-compat-test2#L232
    
    This commit replaces all `which` calls from tests/* with `command -v`,
    and removes the error output redirection.
    cbc143bf