mirror of
https://github.com/zdharma-continuum/zinit-annex-patch-dl.git
synced 2026-09-10 07:26:19 -04:00
111 lines
3.2 KiB
Bash
111 lines
3.2 KiB
Bash
emulate -RL zsh
|
|
setopt extendedglob warncreateglobal typesetsilent noshortloops
|
|
|
|
[[ "$1" = plugin ]] && \
|
|
local type="$1" user="$2" plugin="$3" id_as="$4" dir="$5" || \
|
|
local type="$1" url="$2" id_as="$3" dir="$4"
|
|
|
|
# FUNCTION: .z-p-patch-dl-download-file-stdout {{{
|
|
# Downloads file to stdout. Supports following backend commands:
|
|
# curl, wget, lftp, lynx. Used by snippet loading.
|
|
.z-p-patch-dl-download-file-stdout() {
|
|
local url="$1" restart="$2"
|
|
|
|
setopt localoptions localtraps
|
|
|
|
if (( restart )); then
|
|
(( ${path[(I)/usr/local/bin]} )) || \
|
|
{
|
|
path+=( "/usr/local/bin" );
|
|
trap "path[-1]=()" EXIT
|
|
}
|
|
|
|
if (( ${+commands[curl]} )) then
|
|
command curl -fsSL "$url" || return 1
|
|
elif (( ${+commands[wget]} )); then
|
|
command wget -q "$url" -O - || return 1
|
|
elif (( ${+commands[lftp]} )); then
|
|
command lftp -c "cat $url" || return 1
|
|
elif (( ${+commands[lynx]} )) then
|
|
command lynx -source "$url" || return 1
|
|
else
|
|
return 2
|
|
fi
|
|
else
|
|
if type curl 2>/dev/null 1>&2; then
|
|
command curl -fsSL "$url" || return 1
|
|
elif type wget 2>/dev/null 1>&2; then
|
|
command wget -q "$url" -O - || return 1
|
|
elif type lftp 2>/dev/null 1>&2; then
|
|
command lftp -c "cat $url" || return 1
|
|
else
|
|
.z-p-patch-dl-download-file-stdout "$url" "1"
|
|
return $?
|
|
fi
|
|
fi
|
|
|
|
return 0
|
|
} # }}}
|
|
|
|
if [[ -n ${ZINIT_ICE[dl]} && ${ZINIT_ICE[dl]} != link(http(|s)|ftp(s|)|scp|ssh)://* ]] {
|
|
local -a dls srcdst
|
|
dls=( "${(s.;.)ZINIT_ICE[dl]}" )
|
|
|
|
local dl hd tl
|
|
for dl ( $dls ) {
|
|
srcdst=( ${(@s.->.)dl} )
|
|
srcdst=( "${srcdst[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" )
|
|
|
|
hd="" tl=""
|
|
[[ -n ${srcdst[2]} ]] && {
|
|
@zinit-substitute 'srcdst[2]'
|
|
hd="${srcdst[2]:h}"
|
|
tl="${srcdst[2]:t}"
|
|
} || {
|
|
@zinit-substitute 'srcdst[1]'
|
|
hd="."
|
|
tl="${${srcdst[1]%%\?*}:t}"
|
|
}
|
|
|
|
local tdir="${${(M)hd:#/*}:-$dir/$hd}"
|
|
|
|
# Create the destination directory
|
|
command mkdir -p "$tdir"
|
|
|
|
local ret=0
|
|
|
|
.z-p-patch-dl-download-file-stdout "${srcdst[1]}" >! "$tdir/$tl" || {
|
|
.z-p-patch-dl-download-file-stdout "${srcdst[1]}" 1 >! "$tdir/$tl" || {
|
|
print -P -- "%F{38}patch-dl annex: %F{160}Couldn't download" \
|
|
"the url %F{220}${srcdst[1]}%f"
|
|
ret=1
|
|
}
|
|
}
|
|
|
|
(( !ret )) && \
|
|
print -P -- "%F{38}patch-dl annex: %F{154}File %F{220}$tl%F{154}" \
|
|
"downloaded correctly%f"
|
|
}
|
|
}
|
|
|
|
if [[ -n "${ZINIT_ICE[patch]}" ]] {
|
|
local -a patches
|
|
patches=( "${(s.;.)ZINIT_ICE[patch]}" )
|
|
patches=( "${patches[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" )
|
|
|
|
local pch
|
|
for pch ( $patches ) {
|
|
@zinit-substitute pch
|
|
|
|
print -P -- "%F{38}patch-dl annex: %F{154}Applying patch %F{220}$pch...%f"
|
|
|
|
( cd -q "$dir"
|
|
print -nP "%F{220}"
|
|
command patch -s -N -p1 -i "$pch"
|
|
print -nP "%f"
|
|
)
|
|
}
|
|
}
|
|
|
|
# vim:ft=zsh:sw=4:sts=4:et
|