bash/core/30_loader.bash
raw ยท 1640 bytes
rbash-reload() {
_RBASH_LOADED=
_RBASH_MERGE_START=1
mkdir -p "$RBASH_CACHE_DIR"
rm -f "$RBASH_MERGED"
: > "$RBASH_MERGED" || {
echo "rbash: failed to write merged cache: $RBASH_MERGED" >&2
_RBASH_MERGE_START=
return 1
}
# shellcheck source=/dev/null
source "$RBASH_CONFIG"
_RBASH_MERGE_START=
_RBASH_LOADED=1
}
__rbash_autoload() {
if [ -n "${_RBASH_LOADED:-}" ]; then
return 0
fi
if [ -f "$RBASH_MERGED" ]; then
# shellcheck source=/dev/null
source "$RBASH_MERGED" && {
_RBASH_LOADED=1
return 0
}
echo "rbash: merged cache failed, rebuilding" >&2
rm -f "$RBASH_MERGED"
fi
rbash-reload
}
rbash_load() {
local rel="$1"
local url file
# Normal startup should not individually fetch sources.
# It should source RBASH_MERGED via __rbash_autoload.
if [ -z "${_RBASH_MERGE_START:-}" ]; then
__rbash_autoload
return 0
fi
echo "Load: $rel"
url="$(rbash_url "$rel")"
key="$(printf '%s' "$rel" | sed "s|^sources/||g" | grep -o '^[0-9]\+' || true)"
sig="${_RBASH_SOURCES_SUM["s$key"]}"
file="$(rbash_cache "$sig" "$url")" || {
echo " ..download failed" >&2
return 1
}
# shellcheck source=/dev/null
if source "$file"; then
{
printf 'echo "Load: %s"\n' "$rel"
cat "$file"
printf '\n'
} >> "$RBASH_MERGED"
else
echo " ..failed" >&2
printf 'echo "Skipped: %s. Use rbash-reload to try again."\n' "$rel" >> "$RBASH_MERGED"
fi
chmod 700 "$RBASH_MERGED"
}
rbash-run() {
local rel="$1"
local file
shift || true
echo "Getting: $rel"
file="$(rbash_cache "$(rbash_url "$rel")")" || return 1
"$file" "$@"
}