mirror of
https://github.com/zplug/zplug
synced 2025-04-05 23:29:10 +02:00
108 lines
2.5 KiB
Bash
108 lines
2.5 KiB
Bash
#!/usr/bin/env zsh
|
|
# Description:
|
|
# Return true if all packages are installed, false otherwise
|
|
|
|
local is_verbose=false is_debug=false
|
|
local arg repo
|
|
local -aU repos not_installed_repos not_found_repos
|
|
local -A tags
|
|
local -i ret=0
|
|
|
|
while (( $# > 0 ))
|
|
do
|
|
arg="$1"
|
|
case "$arg" in
|
|
--verbose)
|
|
is_verbose=true
|
|
;;
|
|
--debug)
|
|
is_debug=true
|
|
;;
|
|
-*|--*)
|
|
__zplug::core::options::unknown "$arg"
|
|
return $status
|
|
;;
|
|
"")
|
|
# Invalid
|
|
return 1
|
|
;;
|
|
*/*)
|
|
repos+=( "${arg:gs:@::}" )
|
|
;;
|
|
*)
|
|
return 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if (( $#repos == 0 )); then
|
|
repos=( "${(k)zplugs[@]:gs:@::}" )
|
|
fi
|
|
|
|
for repo in "${repos[@]}"
|
|
do
|
|
# Evaluate IF tag and bypass existence check if conditions are not met
|
|
tags[if]="$(__zplug::core::core::run_interfaces 'if' "$repo")"
|
|
if [[ -n $tags[if] ]]; then
|
|
if ! eval "$tags[if]" 2> >(__zplug::log::capture::error) >/dev/null; then
|
|
$is_verbose && __zplug::io::print::die "$fg[red]$repo$reset_color: (bypassed check)\n"
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
tags[from]="$(__zplug::core::core::run_interfaces 'from' "$repo")"
|
|
if [[ -z "$tags[from]" ]]; then
|
|
not_installed_repos+=( "$repo" )
|
|
continue
|
|
fi
|
|
|
|
if __zplug::core::sources::is_handler_defined "check" "$tags[from]"; then
|
|
__zplug::core::sources::use_handler \
|
|
"check" \
|
|
"$tags[from]" \
|
|
"$repo"
|
|
|
|
if (( $status != 0 )); then
|
|
if [[ $tags[from] == 'local' ]]; then
|
|
# FIXME: use $_ZPLUG_STATUS_*
|
|
not_found_repos+=( "$repo" )
|
|
else
|
|
not_installed_repos+=( "$repo" )
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if (( $#not_found_repos > 0 )); then
|
|
if $is_verbose; then
|
|
__zplug::io::print::put \
|
|
"- $fg[red]%s$reset_color: no such directory\n" \
|
|
"${not_found_repos[@]}"
|
|
fi
|
|
|
|
ret=0
|
|
fi
|
|
|
|
# Initialize
|
|
if (( $#not_installed_repos > 0 )); then
|
|
# Share not installed repos information
|
|
# e.g. for __install__ command
|
|
#reply=( "${not_installed_repos[@]}" )
|
|
|
|
if $is_debug; then
|
|
echo "$not_installed_repos[@]"
|
|
return 0
|
|
fi
|
|
|
|
if $is_verbose; then
|
|
__zplug::io::print::put \
|
|
"- $fg[red]%s$reset_color: not installed\n" \
|
|
"${not_installed_repos[@]}"
|
|
fi
|
|
|
|
ret=1
|
|
fi
|
|
|
|
return $ret
|