Success with most tests, proceeding to more corner cases
This commit is contained in:
63
rdlink.sh
63
rdlink.sh
@@ -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() {
|
||||
|
Reference in New Issue
Block a user