123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/usr/bin/env bash
- # Query the rvm key-value database for a specific key
- # allow system specific overrides + warnings / errors
- __rvm_db_system()
- {
- \typeset __key __message
- for __key in "${_system_name}_${_system_version}_$1" "${_system_name}_$1" "$1"
- do
- if __rvm_db "${__key}_error" __message
- then rvm_error "${__message}"
- fi
- if __rvm_db "${__key}_warn" __message
- then rvm_warn "${__message}"
- fi
- if __rvm_db "${__key}" "$2"
- then return 0
- fi
- done
- true # for OSX
- }
- # Query the rvm key-value database for a specific key
- # Allow overrides from user specifications in $rvm_user_path/db
- __rvm_db()
- {
- \typeset value key variable
- key="${1:-}"
- variable="${2:-}"
- value=""
- if [[ -f "$rvm_user_path/db" ]]
- then value="$( __rvm_db_ "$rvm_user_path/db" "$key" )"
- fi
- if [[ -z "$value" && -f "$rvm_path/config/db" ]]
- then value="$( __rvm_db_ "$rvm_path/config/db" "$key" )"
- fi
- [[ -n "$value" ]] || return 1
- if [[ -n "$variable" ]]
- then eval "$variable='$value'"
- else echo "$value"
- fi
- true # for OSX
- }
- __rvm_db_remove()
- {
- if
- [[ -f "$1" ]]
- then
- __rvm_sed -e "\#^$2=# d" -e '/^$/d' "$1" > "$1.new"
- \command \mv -f "$1.new" "$1"
- fi
- }
- __rvm_db_add()
- {
- \typeset __dir="${1%/*}"
- if [[ -f "${1}" ]]
- then __rvm_db_remove "${1}" "${2}"
- elif [[ ! -d "${__dir}" ]]
- then mkdir -p "${__dir}"
- fi
- printf "%b=%b\n" "$2" "$3" >> "$1"
- }
- __rvm_db_get()
- {
- if [[ -f "$1" ]]
- then __rvm_sed -n -e "\#^$2=# { s#^$2=##;; p; }" -e '/^$/d' < "$1"
- else echo -n ""
- fi
- }
- __rvm_db_()
- {
- \typeset __db __key __value
- __db="$1"
- __key="${2%%\?*}" # remove ?x=y from urls
- shift 2
- __value="$*"
- case "${__value}" in
- (unset|delete)
- __rvm_db_remove "${__db}" "${__key}"
- ;;
- ("")
- __rvm_db_get "${__db}" "${__key}"
- ;;
- (*)
- __rvm_db_add "${__db}" "${__key}" "${__value}"
- ;;
- esac
- }
|