#!/usr/bin/env zsh
-# The ZPE plugin helper. Copyright 2020 Armaan Bhojwani, MIT License
+# The ZPE Zsh plugin helper. Copyright 2020 Armaan Bhojwani, MIT License
-config_dir=$HOME/.config/zpe/
-plugin_dir=$HOME/.config/zpe/plugins/
+# Set defaults
+zpe_config_dir="${HOME}/.config/zpe/"
+zpe_plugin_dir="${zpe_config_dir}/plugins/"
+zpe_tmp_dir="/tmp/zpe/"
zpe-meta-pre() {
- [[ -d "$config_dir" ]] || mkdir -p "$config_dir"
- touch "$config_dir"repositories
- [[ -d "$plugin_dir" ]] || mkdir -p "$plugin_dir"
+ # Create necesary directories, check dependencies
+ [[ -d "${zpe_config_dir}" ]] || mkdir -p "${zpe_config_dir}"
+ [[ -d "${zpe_plugin_dir}" ]] || mkdir -p "${zpe_plugin_dir}"
+ [[ -d /tmp/zpe ]] || mkdir ${zpe_tmp_dir}
+ touch "${zpe_config_dir}"repositories
[[ -x git ]] && echo "please install git"
- [[ -x find ]] && echo "please install find"
- [[ -x diff ]] && echo "please install diff"
}
zpe-clone() {
+ # Clone all the repos in the config file recursively into the plugin directory
zpe-meta-pre
- while read line; do
- git -C "$plugin_dir" clone $line --depth=1 2> /dev/null
- done < "${config_dir}repositories"
+ cat ${zpe_config_dir}repositories | xargs -P10 -I{} git -C ${zpe_plugin_dir} clone {}
echo "all plugins are downloaded"
}
zpe-pull() {
+ # Recursively pull
zpe-meta-pre
- local find_dirs=$(find "$plugin_dir" -name ".git" -type d)
+ local find_dirs=$(find "${zpe_plugin_dir}" -name ".git" -type d)
echo $find_dirs | xargs -P10 -I{} git --git-dir={} config pull.ff only
- echo $find_dirs | xargs -P10 -I{} git --git-dir={} pull > /dev/null
+ echo $find_dirs | xargs -P10 -I{} git --git-dir={} pull > /dev/null
echo "all plugins are up to date"
}
zpe-clean() {
- [[ -d /tmp/zpe ]] || mkdir /tmp/zpe/
- find $plugin_dir -maxdepth 1 -type d -exec git -C {} config --get remote.origin.url \; > /tmp/zpe/installed-urls
- comm -23 <(sort /tmp/zpe/installed-urls) <(sort "$config_dir"repositories) >> /tmp/zpe/diff
-
- for d in "$plugin_dir"*; do
- while read line; do
- grep -l $line "$d"/.git/config >> /tmp/zpe/deletable
- done < /tmp/zpe/diff
- done
-
- while read line2; do
- xargs rm -rf <<< $(echo $line2 | sed 's/\/.git\/config//g')
- done < /tmp/zpe/deletable
+ # Remove cloned plugins not specified in the config file
+ zpe-meta-pre
+ echo -n "" > "${zpe_tmp_dir}"deletable
+ echo -n "" > "${zpe_tmp_dir}"diff
+
+ find ${zpe_plugin_dir} -maxdepth 1 -type d -exec git -C {} config --get remote.origin.url \; > "${zpe_tmp_dir}"installed-urls
+ comm -23 <(sort ${zpe_tmp_dir}installed-urls) <(sort "${zpe_config_dir}"repositories) >> "${zpe_tmp_dir}"/diff
+
+ while read line; do
+ grep -l $line "$zpe_plugin_dir"/*/.git/config >> "${zpe_tmp_dir}"deletable
+ done < ${zpe_tmp_dir}diff
+
+ sed -i -e 's/\/.git\/config//g' -e 's/\/\//\//g' "${zpe_tmp_dir}"deletable
+
+ if [[ $(wc -l "${zpe_tmp_dir}"deletable | cut -d ' ' -f 1) > 0 ]]; then
+ cat "${zpe_tmp_dir}"deletable
+ echo "Delete these directories? [y/N]: "
+ read -rs -k 1 ans
+ case "${ans}" in
+ y|Y)
+ while read line2; do
+ xargs rm -rf <<< $(echo $line2)
+ done < ${zpe_tmp_dir}deletable
+ echo "Cleaned!"
+ ;;
+ *|$'\n')
+ echo "Aborted"
+ esac
+ else
+ echo "Nothing to clean"
+ fi
}
zpe-source() {
- source "$plugin_dir"/$1
+ source "${zpe_plugin_dir}"/$1
}