bash/core/40_sources.bash
raw ยท 2246 bytes
rbash_sources_json_url() {
printf '%s/%s/tree/%s/tree.json\n' \
"$RBASH_REMOTE" "$RBASH_REPO" "$RBASH_REF"
}
declare -gA _RBASH_DICT
rbash-list() {
_require_jq || return 1
local item key enabled_marker
echo "Available sources:"
while IFS= read -r item; do
key="$(printf '%s' "$item" | grep -o '^[0-9]\+' || true)"
[ -n "$key" ] && _RBASH_DICT["s$key"]="$item"
enabled_marker=" "
if grep -q -F "rbash_load \"sources/$item\"" "$RBASH_CONFIG"; then
enabled_marker="*"
fi
printf ' %s %s\n' "$enabled_marker" "$item"
done < <(
rbash_download "$(rbash_sources_json_url)" |
jq -r '
.[]
| select(.path == "bash/sources" or (.path | startswith("bash/sources/")))
| .path
| sub("^bash/sources/?"; "")
| select(length > 0)
'
)
}
r2ensource() {
rbash-list || return 1
local ids id selected tmp
local -a enable=()
read -r -p "Enter the script id XX, delimited by space: " ids
for id in $ids; do
selected="${_RBASH_DICT["s$id"]}"
if [ -z "$selected" ]; then
echo "No such id: $id" >&2
return 1
fi
if grep -q -F "rbash_load \"sources/$selected\"" "$RBASH_CONFIG"; then
echo "$selected is already enabled."
continue
fi
enable+=("$selected")
done
tmp="$(mktemp)"
cp "$RBASH_CONFIG" "$tmp"
for selected in "${enable[@]}"; do
echo "rbash_load \"sources/$selected\"" >> "$tmp"
echo "Enabling $selected"
done
sort -u "$tmp" > "$RBASH_CONFIG"
rm -f "$tmp"
rm -rf "$RBASH_CACHE_DIR"
}
r2dissource() {
local ids id tmp pattern
echo "Currently enabled sources:"
grep -E '^rbash_load "sources/' "$RBASH_CONFIG" |
sed 's/^rbash_load "sources\///; s/"$//' |
sed 's/^/ /'
read -r -p "Enter the script id XX, delimited by space: " ids
tmp="$(mktemp)"
cp "$RBASH_CONFIG" "$tmp"
for id in $ids; do
pattern="rbash_load \"sources/${id}_"
if ! grep -q -F "$pattern" "$tmp"; then
echo "No such id: $id" >&2
rm -f "$tmp"
return 1
fi
echo "Disabling $id"
grep -v -F "$pattern" "$tmp" > "$tmp.next"
mv "$tmp.next" "$tmp"
done
sort -u "$tmp" > "$RBASH_CONFIG"
rm -f "$tmp"
rm -rf "$RBASH_CACHE_DIR"
}