1
0
mirror of https://github.com/sstephenson/bats.git synced 2024-11-17 11:42:33 +01:00

bats: Refactor resolve_link, abs_dirname

Under Bash 3.2.57(1)-release and 4.4.12(1)-release on a MacBook Pro with
a 2.9GHz Intel Core i5 CPU and 8GB 1867MHz DDR3 RAM, this shaves off
O(0.4s) from the current test suite.

Before the change:

  46 tests, 0 failures

  real    0m4.392s
  user    0m2.489s
  sys     0m1.467s

After the change:

  real    0m3.980s
  user    0m2.312s
  sys     0m1.233s
This commit is contained in:
Mike Bland 2017-03-16 12:14:34 -04:00
parent 6beea07a0b
commit cdc55ad7ea
No known key found for this signature in database
GPG Key ID: 5121C73A6E07384B

View File

@ -26,18 +26,29 @@ help() {
echo echo
} }
BATS_READLINK=
resolve_link() { resolve_link() {
$(type -p greadlink readlink | head -1) "$1" if [[ -z "$BATS_READLINK" ]]; then
if command -v 'greadlink' >/dev/null; then
BATS_READLINK='greadlink'
elif command -v 'readlink' >/dev/null; then
BATS_READLINK='readlink'
else
BATS_READLINK='true'
fi
fi
"$BATS_READLINK" "$1" || return 0
} }
abs_dirname() { abs_dirname() {
local cwd="$(pwd)" local cwd="$PWD"
local path="$1" local path="$1"
while [ -n "$path" ]; do while [ -n "$path" ]; do
cd "${path%/*}" cd "${path%/*}"
local name="${path##*/}" local name="${path##*/}"
path="$(resolve_link "$name" || true)" path="$(resolve_link "$name")"
done done
pwd pwd