penguin/utils

my env utils

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