Success with most tests, proceeding to more corner cases

This commit is contained in:
2022-03-20 03:19:36 +01:00
parent 08302d2680
commit 16f5894ac5

View File

@@ -17,24 +17,67 @@ set -o pipefail
LOG_LEVEL="${LOG_LEVEL:-1}" # 7 = debug -> 0 = emergency
rl::rdlink() {
local normalized=
info "Processing... $@"
normalized="$(rl::normalize "${1:-}")"
rl::quicklink "${normalized}"
}
local subject=
rl::canon() {
info "Canonicalize path... $@"
info "pwd: $(pwd)"
info "Processing... $@"
subject="$(rl::normalize "${1:-}")" || true
# Follow multiple symlinks
while subject="$(rl::quicklink "${subject}")" ; do : ; done
subject="$(rl::canon "${subject}")" || true
printf "${subject}\n"
}
rl::quicklink() {
info "Quick rdlink... ${1:-}"
readlink "${1:-}" || printf "${1:-}\n"
subject=
work=
info "Quicklink... ${1:-}"
# Check if current candidate is a symlink
if ! subject=$(readlink -- "${1:-}"); then
printf -- "${1:-}\n"
return 1
fi
info " - symlink ${1} -> ${subject}"
# relative target; append root
if [[ "${subject}" != "/"* ]]; then
work="$(rl::canon "$(dirname -- "${1:-}")")"
subject="${work}/${subject}"
info " - relative link resolved: ${subject}"
fi
printf "${subject}\n"
return 0
}
rl::canon() {
local subject=
local work=
local bname=
info "Canonicalize path... ${1:-}"
if work="$(cd "${1:-}" >/dev/null 2>&1 && pwd -P)" ; then
subject="${work}"
info " - directory: ${subject}"
elif work="$(cd "$(dirname -- "${1:-}")" >/dev/null 2>&1 && pwd -P)" ; then
bname="$(basename -- "${1:-}")"
subject="${work}${bname:+"/${bname}"}"
info " - parent: ${subject}"
else
info " - no hit"
subject="${1:-}"
fi
printf "${subject}\n"
}
rl::normalize() {
info "Normalizing... ${1:-}"
printf "${1:-}\n"
printf -- "${1:-}\n"
}
rl::main() {