]> git.armaanb.net Git - zpe.git/blobdiff - zpe.zsh
add zpe-clean, zpe-source
[zpe.git] / zpe.zsh
diff --git a/zpe.zsh b/zpe.zsh
index 7fad5bafabb2d0edefae98b7e5c6c763f48e3d3c..b6c9cadc45b6cf0d7ccbe9674b866a8bb5ca3305 100755 (executable)
--- a/zpe.zsh
+++ b/zpe.zsh
@@ -1,33 +1,50 @@
 #!/usr/bin/env zsh
-# The ZPE plugin manager. Copyright 2020 Armaan Bhojwani, MIT License
+# The ZPE plugin helper. Copyright 2020 Armaan Bhojwani, MIT License
 
-zpe-pre() {
-  config_dir=$HOME/.config/zpe/
-  plugin_dir=$HOME/.config/zpe/plugins/
+config_dir=$HOME/.config/zpe/
+plugin_dir=$HOME/.config/zpe/plugins/
 
+zpe-meta-pre() {
   [[ -d "$config_dir" ]] || mkdir -p "$config_dir"
   touch "$config_dir"repositories
   [[ -d "$plugin_dir" ]] || mkdir -p "$plugin_dir"
   [[ -x git ]] && echo "please install git"
   [[ -x find ]] && echo "please install find"
+  [[ -x diff ]] && echo "please install diff"
 }
 
 zpe-clone() {
+  zpe-meta-pre
   while read line; do
-    git -C $plugin_dir clone $line
+    git -C "$plugin_dir" clone $line --depth=1 2> /dev/null
   done < "${config_dir}repositories"
+  echo "all plugins are downloaded"
 }
 
 zpe-pull() {
-  find_dirs=$(find "$plugin_dir" -name ".git" -type d)
+  zpe-meta-pre
+  local find_dirs=$(find "$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
+  echo $find_dirs |  xargs  -P10 -I{} git --git-dir={} pull > /dev/null
+  echo "all plugins are up to date"
 }
 
-main() {
-  zpe-pre
-  zpe-clone
-  zpe-pull
+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
 }
 
-main
+zpe-source() {
+  source "$plugin_dir"/$1
+}