mirror of
https://github.com/zdharma-continuum/zinit-annex-bin-gem-node.git
synced 2025-01-30 16:58:17 +01:00
85 lines
3.5 KiB
Bash
85 lines
3.5 KiB
Bash
# Copyright (c) 2019-2020 Sebastian Gniazdowski
|
|
# License MIT
|
|
|
|
emulate -LR zsh
|
|
setopt extendedglob noshortloops nullglob typesetsilent warncreateglobal
|
|
if [[ "$1" = plugin ]]; then
|
|
local type="$1" user="$2" plugin="$3" id_as="$4" dir="${5#%}" hook="$6"
|
|
else
|
|
local type="$1" url="$2" id_as="$3" dir="${4#%}" hook="$5"
|
|
fi
|
|
|
|
#
|
|
# sbin'' ice – creation of shims (the name borrowed from rbenv)
|
|
#
|
|
|
|
if (( ${+ICE[sbin]} )); then
|
|
local -a sbins=() srcdst=()
|
|
# sbins+=(${(s.;.)ICE2[sbin]})
|
|
sbins+=(${(s.;.)ICE[sbin]})
|
|
(( !$#sbins )) && sbins+=("")
|
|
local sbin
|
|
(
|
|
builtin cd -q "$dir" || return
|
|
for sbin in $sbins; do
|
|
integer set_gem_home=0 set_node_path=0 set_virtualenv=0 set_cwd=0 use_all_null=0 use_err_null=0 use_out_null=0 use_1=0
|
|
if [[ -z $sbin ]]; then
|
|
if [[ -f $dir/${id_as:t} ]]; then
|
|
sbin="$dir/${id_as:t}"
|
|
elif [[ -n $plugin && -f $dir/$plugin ]]; then
|
|
sbin="$dir/$plugin"
|
|
elif [[ -n $url && -f $dir/${url:t} ]]; then
|
|
sbin="$dir/${url:t}"
|
|
elif [[ -f $dir/**/($id_as:t|$plugin)(#qN[1].) ]]; then
|
|
sbin=($dir/**/($id_as:t|$plugin)(Nnon.))
|
|
sbin=$sbin[1]
|
|
else
|
|
local -a files
|
|
files=($dir/**/*(*Nnon:t))
|
|
if (( ${#files} )); then
|
|
sbin="${files[1]}"
|
|
else
|
|
+zi-log "{w} {b}bin-gem-node{rst}: The automatic-empty sbin ice didn't find any executable files"
|
|
break
|
|
fi
|
|
fi
|
|
fi
|
|
srcdst=(${(@s.=>.)${(@s.→.)${(@s.->.)sbin}}})
|
|
srcdst=("${srcdst[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}")
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#g[1gnpcNEO]#:* ]] && set_gem_home=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#n[1gnpcNEO]#:* ]] && set_node_path=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#p[1gnpcNEO]#:* ]] && set_virtualenv=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#c[1gnpcNEO]#:* ]] && set_cwd=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#N[1gnpcNEO]#:* ]] && use_all_null=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#E[1gnpcNEO]#:* ]] && use_err_null=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#O[1gnpcNEO]#:* ]] && use_out_null=1
|
|
[[ ${srcdst[1]} = [1gnpcNEO]#1[1gnpcNEO]#:* ]] && use_1=1
|
|
srcdst[1]=${srcdst[1]#[a-zA-Z0-9]#:}
|
|
@zinit-substitute 'srcdst[1]' 'srcdst[2]'
|
|
local -a fnames=()
|
|
local fname
|
|
if [[ $srcdst[1] != /* ]]; then
|
|
eval "fnames=( **/${srcdst[1]}(Nnon-.) )"
|
|
else
|
|
eval "fnames=( ${srcdst[1]}(Nnon-.) )"
|
|
fi
|
|
if (( !${#fnames} )); then
|
|
+zi-log "{e} {b}bin-gem-node{rst}: The {ice}sbin{rst} ice ({glob}$sbin{rst}) did not match any files"
|
|
continue
|
|
fi
|
|
for fname in $fnames; do
|
|
srcdst[1]="$fname"
|
|
local target_binary="${${(M)srcdst[1]:#/*}:-$dir/${srcdst[1]}}" fnam="${srcdst[2]:-${srcdst[1]:t}}"
|
|
local file="$ZPFX/bin/$fnam"
|
|
command rm -f "$file"
|
|
if [[ ! -e $file ]]; then
|
|
(( !OPTS[opt_-q,--quiet] )) && +zi-log "{m} {b}sbin{rst}: Deleted {file}$fnam{rst} shim"
|
|
else
|
|
+zi-log "{w} {b}sbin{rst}: {file}$fnam{rst} shim not found in \$ZPFX/bin"
|
|
fi
|
|
done
|
|
done
|
|
)
|
|
fi
|
|
|
|
# vim:ft=zsh:sw=4:sts=4:et
|