bash/core/40_sources.bash
raw ยท 2518 bytes
rbash_sources_list() {
printf '%s/%s/raw/master/bash/dist/sources.list\n' \
"$RBASH_REMOTE" "$RBASH_REPO"
}
declare -gA _RBASH_DICT
declare -gA _RBASH_SOURCES_SUM
rbash_sources_load() {
local hash path item key sources_list
_RBASH_DICT=()
_RBASH_SOURCES_SUM=()
sources_list=$(rbash_cache "$RBASH_SOURCES_SUM" "$(rbash_sources_list)" "sources.list")
while read -r hash path; do
[ -n "$hash" ] || continue
[ -n "$path" ] || continue
item="${path#sources/}"
key="$(printf '%s' "$item" | grep -o '^[0-9]\+' || true)"
[ -n "$key" ] || continue
_RBASH_DICT["s$key"]="$item"
_RBASH_SOURCES_SUM["s$key"]="$hash"
done < "$sources_list"
}
rbash-list() {
local key item enabled_marker
rbash_sources_load || return 1
echo "Available sources:"
while IFS= read -r key; do
item="${_RBASH_DICT[$key]}"
enabled_marker=" "
if grep -q -F "rbash_load \"sources/$item\"" "$RBASH_CONFIG"; then
enabled_marker="*"
fi
printf ' %s %s\n' "$enabled_marker" "$item"
done < <(printf '%s\n' "${!_RBASH_DICT[@]}" | sort -V)
}
r2ensource() {
if [ "$1" = "-f" ]; then
sources_list=$(rbash_cache -r "$RBASH_SOURCES_SUM" "$(rbash_sources_list)" "sources.list")
fi
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"
}