common/config: implement set_prog_path() using 'type -P'
authorEric Biggers <ebiggers@google.com>
Sat, 6 May 2017 00:19:33 +0000 (17:19 -0700)
committerEryu Guan <eguan@redhat.com>
Mon, 8 May 2017 07:33:16 +0000 (15:33 +0800)
Bash's 'type -P' builtin is equivalent to 'which', but it's more
efficient because it doesn't involve executing an external binary.
Because set_prog_path() is executed 60+ times in common/config,
which is sourced by common/rc, which in turn is sourced by every
test, switching to 'type -P' actually can make a noticeable
performance improvement for short-running or skipped tests.  For
example:

Before:
    # time ./check generic/002
    ...
    Passed all 1 tests

    real    0m1.365s
    user    0m0.746s
    sys     0m0.644s

After:
    # time ./check generic/002
    ...
    Passed all 1 tests

    real    0m1.026s
    user    0m0.511s
    sys     0m0.470s

Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
common/config

index b29c0eb0e691d6cf50cda3ad77bf404a491823fc..8211356c385fc284c5ac3246a63c92dc4b46bff0 100644 (file)
@@ -96,12 +96,7 @@ export RECREATE_TEST_DEV=false
 # $1 = prog to look for
 set_prog_path()
 {
-    p=`which $1 2> /dev/null`
-    if [ -n "$p" -a -x "$p" ]; then
-        echo $p
-        return 0
-    fi
-    return 1
+       type -P $1
 }
 
 # Handle mkfs.btrfs which does (or does not) require -f to overwrite