dots2/.antidote/functions/antidote-purge

83 lines
2.6 KiB
Bash

#!/bin/zsh
### Remove a cloned bundle.
#
# usage: antidote purge [-h|--help] <bundle>
# antidote purge [-a|--all]
#
#function antidote-purge {
emulate -L zsh; setopt local_options $_adote_funcopts
local o_help o_all
zparseopts $_adote_zparopt_flags -- \
h=o_help -help=h \
a=o_all -all=a ||
return 1
if (( $#o_help )); then
antidote-help purge
return
fi
if [[ $# -eq 0 ]] && ! (( $#o_all )); then
print -ru2 "antidote: error: required argument 'bundle' not provided, try --help"
return 1
fi
local bundlefile
zstyle -s ':antidote:bundle' file 'bundlefile' ||
bundlefile=${ZDOTDIR:-$HOME}/.zsh_plugins.txt
if (( $#o_all )); then
# last chance to save the user from themselves
local antidote_home="$(antidote-home)"
local REPLY
zstyle -s ':antidote:purge:all' answer 'REPLY' || {
read -q "REPLY?You are about to permanently remove '$antidote_home' and all its contents!"$'\n'"Are you sure [Y/n]? "
print
}
[[ ${REPLY:u} == "Y" ]] || return 1
# remove antidote home and static cache file
__antidote_del -rf -- "$antidote_home"
if [[ -e "${bundlefile:r}.zsh" ]]; then
zstyle -s ':antidote:purge:all' answer 'REPLY' || {
read -q "REPLY?You are about to remove '${bundlefile:t:r}.zsh'"$'\n'"Are you sure [Y/n]? "
print
}
if [[ ${REPLY:u} == "Y" ]]; then
local dtstmp=$(date -u '+%Y%m%d_%H%M%S')
command mv -f "${bundlefile:r}.zsh" "${bundlefile:r}.${dtstmp}.bak"
print "'"${bundlefile:r}.zsh"' backed up to '${bundlefile:t:r}.${dtstmp}.bak'"
fi
fi
print "Antidote purge complete. Be sure to start a new Zsh session."
else
local bundle=$1
# make sure the user isn't trying to do something out-of-bounds
if [[ -e "$bundle" ]]; then
print -ru2 "antidote: error: '$bundle' is not a repo and cannot be removed by antidote."
return 2
fi
local bundledir=$(__antidote_bundle_dir $bundle)
if [[ ! -d "$bundledir" ]]; then
print -ru2 "antidote: error: $bundle does not exist at the expected location: $bundledir"
return 1
fi
# remove
__antidote_del -rf "$bundledir"
print "Removed '$bundle'."
# attempt to comment out the bundle from .zsh_plugins.txt
if [[ -e "$bundlefile" ]]; then
local tmpfile="${bundlefile}.antidote.tmp"
$__adote_awkcmd -v pat="$bundle" '$0~"^[[:blank:]]*"pat{print "# " $0;next}1' <$bundlefile >|$tmpfile
command cat "$tmpfile" > "$bundlefile"
__antidote_del -f "$tmpfile"
print "Bundle '$bundle' was commented out in '$bundlefile'."
fi
fi
#}