rust_version: support rustup; see #418

pull/436/head
romkatv 5 years ago
parent 2b307eefd8
commit ddecb91a0f

@ -2329,12 +2329,10 @@ prompt_rust_version() {
dir=${dir:h}
done
fi
local rustc=$commands[rustc] so
local rustc=${commands[rustc]:A} toolchain deps=()
if (( $+commands[ldd] )); then
if _p9k_cache_stat_get $0_so $rustc; then
so=$_p9k_cache_val[1]
else
local line match
if ! _p9k_cache_stat_get $0_so $rustc; then
local line match so
for line in "${(@f)$(ldd $rustc 2>/dev/null)}"; do
[[ $line == (#b)[[:space:]]#librustc_driver[^[:space:]]#.so' => '(*)' (0x'[[:xdigit:]]#')' ]] || continue
so=$match[1]
@ -2342,8 +2340,36 @@ prompt_rust_version() {
done
_p9k_cache_stat_set "$so"
fi
deps+=$_p9k_cache_val[1]
fi
if (( $+commands[rustup] )); then
local rustup=${commands[rustup]:A}
local rustup_home=${RUSTUP_HOME:-~/.rustup}
local cfg=($rustup_home/settings.toml(.N))
deps+=($cfg $rustup_home/update-hashes/*(.N))
if [[ -z ${toolchain::=$RUSTUP_TOOLCHAIN} ]]; then
if ! _p9k_cache_stat_get $0_overrides $rustup $cfg; then
local lines=(${(f)"$(rustup override list 2>/dev/null)"})
local keys=(/ ${lines%%[[:space:]]#[^[:space:]]#})
local vals=(_ ${lines##*[[:space:]]})
_p9k_cache_stat_set ${keys:^vals}
fi
local -A overrides=($_p9k_cache_val)
local dir=$_p9k_pwd_a
while true; do
if (( $+overrides[$dir] )); then
toolchain=$overrides[$dir]
break
fi
if [[ -r $dir/rust-toolchain ]]; then
{ toolchain="$(<$dir/rust-toolchain)" } 2>/dev/null
break
fi
dir=${dir:h}
done
fi
fi
if ! _p9k_cache_stat_get $0_v $rustc $so; then
if ! _p9k_cache_stat_get $0_v$toolchain $rustc $deps; then
_p9k_cache_stat_set "$($rustc --version 2>/dev/null)"
fi
local v=${${_p9k_cache_val[1]#rustc }%% *}

Loading…
Cancel
Save