penguin/utils

my env utils

bash/core/30_loader.bash

raw ยท 1554 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")"
  file="$(rbash_cache "$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" "$@"
}