penguin/utils

my env utils

bash/core/30_loader.bash

raw ยท 1654 bytes

rbash-reload() {
	_RBASH_LOADED=
	_RBASH_MERGE_START=1

	if [ "$1" = "-f" ]; then
		rm -rf "$RBASH_CACHE_DIR"
	fi

	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" "$@"
}