lix/lib/lowerlayers.sh

37 lines
1.1 KiB
Bash

#!/bin/sh -e
#. "$LIXROOT/libs/reverse.sh"
# errors out if a dependency was not resolved or if the LAYERMAX is exceeded.
lowerlayers() { # <resolved dependencies> [<bootstrap directory>]
layers="$2"
layercount="0"
maxlayers=${LAYERMAX:-100}
layers="$(echo "$1" | reverse | while read line; do
[ "$line" ] || continue;
dep="$(echo "$line" | awk '{ print $1 }')"
ver="$(echo "$line" | awk '{ print $2 }')"
dir="$(lyr upperdir lix/$dep/$ver/fs)"
# only warn on missing dependencies if a bootstrap directory was
# provided. it's possible the dependency is in the bootstrap.
[ "$2" ] && logfn="wrn possible" || logfn="err"
[ "$ver" ] && [ -d "$dir" ] \
&& printf "$dir:" \
|| $logfn "missing dependency: $dep $ver"
layercount="$(expr $layercount + 1)"
[ "$layercount" -le "$maxlayers" ] \
|| err "overlayfs can't handle more than $maxlayers lower directories!"
done)$layers"
[ "$?" -eq 0 ] || exit $? # error codes weren't bubbling up... :/
# strip possible trailing colon and echo.
echo "${layers%:}"
}