mirror of
https://github.com/jorgebucaran/fisher
synced 2024-11-09 07:10:27 +00:00
128 lines
3.6 KiB
Fish
128 lines
3.6 KiB
Fish
|
function -S __fisher_plugin_fetch
|
||
|
set -l plugins
|
||
|
set -l fetched
|
||
|
|
||
|
for item in $argv
|
||
|
if not set item (__fisher_plugin_validate "$item")
|
||
|
printf "fisher: '%s' is not a valid plugin\n" "$item" > $stderr
|
||
|
debug "validate fail %s" "$item"
|
||
|
continue
|
||
|
end
|
||
|
|
||
|
debug "validate ok %s" "$item"
|
||
|
|
||
|
if contains -- "$item" $enabled
|
||
|
if test -z "$option"
|
||
|
set skipped $skipped "$item"
|
||
|
debug "skip %s" "$item"
|
||
|
continue
|
||
|
end
|
||
|
end
|
||
|
|
||
|
switch "$item"
|
||
|
case \*/\*
|
||
|
set plugins $plugins "$item"
|
||
|
debug "url or path %s" $item
|
||
|
|
||
|
case \*
|
||
|
if test -d "$fisher_cache/$item"
|
||
|
set -l url (__fisher_url_from_path "$fisher_cache/$item")
|
||
|
|
||
|
if test ! -z "$url"
|
||
|
set plugins $plugins "$url"
|
||
|
end
|
||
|
|
||
|
debug "cache %s" "$item"
|
||
|
|
||
|
else
|
||
|
if test ! -s $fisher_cache/.index
|
||
|
if spin "__fisher_index_update" --error=/dev/null > /dev/null
|
||
|
debug "update index ok"
|
||
|
else
|
||
|
debug "update index fail"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if set -l url (fisher_search --url --name="$item" --index=$fisher_cache/.index)
|
||
|
set plugins $plugins "$url"
|
||
|
debug "name %s" $item
|
||
|
|
||
|
else
|
||
|
printf "fisher: I couldn't find '%s' in the index\n" $item > $stderr
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for plugin in $plugins
|
||
|
set -l name (echo $plugin | __fisher_name)
|
||
|
set -l path $fisher_cache/$name
|
||
|
|
||
|
switch "$plugin"
|
||
|
case {https://,}gist.github.com\*
|
||
|
debug "gist %s" $item
|
||
|
|
||
|
if not set name (__fisher_gist_to_name $plugin)
|
||
|
printf "fisher: I could not find your gist\n" > $stderr
|
||
|
continue
|
||
|
end
|
||
|
end
|
||
|
|
||
|
printf "%s\n" "$name"
|
||
|
debug "plugin %s" "$name"
|
||
|
|
||
|
if test ! -e $path
|
||
|
if not set -q __fisher_fetch_status
|
||
|
set -g __fisher_fetch_status
|
||
|
printf "Installing plugin/s\n" > $stderr
|
||
|
|
||
|
else if test "$__fisher_fetch_status" = "deep"
|
||
|
printf "Installing dependencies\n" > $stderr
|
||
|
set -g __fisher_fetch_status done
|
||
|
end
|
||
|
|
||
|
set fetched $fetched "$path"
|
||
|
|
||
|
if test -d "$plugin"
|
||
|
debug "link %s" "$plugin"
|
||
|
command ln -sfF $plugin $path
|
||
|
|
||
|
else
|
||
|
debug "clone %s" "$plugin"
|
||
|
fish -ic "
|
||
|
spin '
|
||
|
if __fisher_url_clone $plugin $path
|
||
|
printf \" %-20s\n\" \"$name\"
|
||
|
end
|
||
|
' > $stderr
|
||
|
" &
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if test ! -z "$plugins"
|
||
|
while true
|
||
|
set -l has_jobs (jobs)
|
||
|
if test -z "$has_jobs"
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
switch "$__fisher_fetch_status"
|
||
|
case done deep
|
||
|
case \*
|
||
|
set __fisher_fetch_status deep
|
||
|
end
|
||
|
|
||
|
for path in $fetched
|
||
|
for file in $path/{fishfile,bundle}
|
||
|
if test -s $file
|
||
|
__fisher_plugin_fetch (__fisher_file < $file)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
set -e __fisher_fetch_status
|
||
|
end
|