]> git.armaanb.net Git - zpe.git/blob - zpe.sh
Make pull more verbose
[zpe.git] / zpe.sh
1 #!/usr/bin/env bash
2 # ZPE shell plugin helper
3 # Copyright 2021 Armaan Bhojwani, MIT License
4
5 # Set defaults
6 zpe_config_dir="${HOME}/.config/zpe/"
7 zpe_plugin_dir="${zpe_config_dir}/plugins/"
8 zpe_tmp_dir="/tmp/zpe/"
9 zpe_log_dir="${zpe_tmp_dir}/logs"
10
11 zpe-meta-pre() {
12   # Create necesary directories, check dependencies
13   [[ -d "${zpe_config_dir}" ]] || mkdir -p "${zpe_config_dir}"
14   [[ -d "${zpe_plugin_dir}" ]] || mkdir -p "${zpe_plugin_dir}"
15   [[ -d "${zpe_tmp_dir}" ]] || mkdir ${zpe_tmp_dir}
16   [[ -d "${zpe_log_dir}" ]] || mkdir ${zpe_log_dir}
17   touch "${zpe_config_dir}"repositories
18   [[ ! -x "/usr/bin/git" ]] && echo "Please install git"
19   log_file="${zpe_log_dir}"/$(date -Iseconds)
20   touch $log_file
21 }
22
23 zpe-clone() {
24   # Clone all the repos in the config file recursively into the plugin directory
25   zpe-meta-pre
26   cat ${zpe_config_dir}repositories | xargs -P10 -I{} git -C ${zpe_plugin_dir} \
27     clone {} -q --depth 1 &> "${zpe_log_dir}"/$(date -Iseconds)
28   echo "All plugins are downloaded"
29 }
30
31 zpe-pull() {
32   # Recursively pull
33   zpe-meta-pre
34   local find_dirs=$(find "${zpe_plugin_dir}" -name ".git" -type d)
35   echo $find_dirs | xargs -P10 -I {} git --git-dir={} config pull.ff only
36   echo $find_dirs | xargs -P10 -I {} git --git-dir={} --work-tree={} pull -v \
37     &> $log_file
38   echo >> $log_file
39   cat $log_file
40   echo "All plugins are up to date"
41 }
42
43 zpe-clean() {
44   # Remove cloned plugins not specified in the config file
45   zpe-meta-pre
46   find ${zpe_plugin_dir} -maxdepth 1 -type d -exec git -C {} \
47     config --get remote.origin.url \; > "${zpe_tmp_dir}"installed-urls
48   comm -23 <(sort ${zpe_tmp_dir}installed-urls) \
49     <(sort "${zpe_config_dir}"repositories) > "${zpe_tmp_dir}"/diff
50
51   echo -n "" > "${zpe_tmp_dir}"deletable
52   while read line; do
53     grep -l $line "$zpe_plugin_dir"/*/.git/config >> "${zpe_tmp_dir}"deletable
54   done < ${zpe_tmp_dir}diff
55
56   sed -i -e 's/\/.git\/config//g' -e 's/\/\//\//g' "${zpe_tmp_dir}"deletable
57
58   if [[ $(wc -l "${zpe_tmp_dir}"deletable | cut -d ' ' -f 1) > 0 ]]; then
59     cat "${zpe_tmp_dir}"deletable
60     echo "Delete these directories? [y/N]: "
61     read -rs -k 1 ans
62     case "${ans}" in
63       y|Y)
64         while read line2; do
65           xargs rm -rf <<< $(echo $line2)
66         done < ${zpe_tmp_dir}deletable
67         echo "Cleaned!"
68         ;;
69       *)
70         echo "Aborted"
71     esac
72   else
73     echo "Nothing to clean"
74   fi
75 }
76
77 zpe-source() {
78   source "${zpe_plugin_dir}"/$1
79 }
80
81 zpe() {
82   ${EDITOR} ${zpe_config_dir}repositories
83 }