darkcloud-vimconfig/update

143 lines
6.1 KiB
Text
Raw Normal View History

#!/usr/bin/env bash
# change to the base directory
cd "${0%/*}"
# define an error function to both output and record errors
ERRORLOG="update-errors.log"
function error() {
echo -e "\e[44m \e[0m\e[01;41m ! ERROR: \e[0m\e[1;31m ${2} "
echo -e "\e[44m \e[0m\e[01;41m ! \e[0m \e[1;37m=> ${1}\e[0m"
[[ -n "$3" ]] && echo -e "\e[44m \e[0m\e[01;41m ! \e[0m\e[1;37m ${3}"
echo "${1} @ $(date)" >> "$ERRORLOG"
echo " ! Error: ${2}" >> "$ERRORLOG"
[[ -n "$3" ]] && echo " ! ${3}" >> "$ERRORLOG"
echo >> "$ERRORLOG"
}
# initialize the errorlog file for this session
echo > "$ERRORLOG"
# create vim/vimrc.user and vim/bundle.user if they don't already exist
[[ ! -d vim/bundle.user ]] && install -d vim/bundle.user
if [ ! -e vim/vimrc.user ]; then
echo -e "\n\e[40m ~~~ DarkCloud Vimconfig Setup ~~~ \e[0m"
echo -e "\n\e[44m >> Create User Config: 'vim/vimrc.user' \e[0m"
if [ -w vim ]; then
echo -e '"Disable Linebreaks: (*1:force disabled globally | 0: disabled by default)\n"let g:disablelinebreaks=0\n' >> vim/vimrc.user
echo -e '"Autostart Filer: (*1:filer loads in new empty buffers | 0: filer must be triggered)\n"let g:autostartfiler=0\n' >> vim/vimrc.user
echo -e '"Syntax Autostart: (1:start toggled on | *0: start toggled off)\n"let g:autostartchecker=1\n' >> vim/vimrc.user
echo -e '"Tagbar Autostart: (1:start open | *0:start closed)\n"let g:autostarttagbar=1\n' >> vim/vimrc.user
echo -e '"Powerline Fonts: (1:enabled | *0:disabled)\n"let g:powerlinefonts=1 "(set powerline font for gvim and terminal when enabled)\n' >> vim/vimrc.user
echo -e '"GVim Font Selection: (Escaping spaces and use powerline if appropriate)\nset guifont=Monospace\ 12' >> vim/vimrc.user
fi
else
echo -e "\n\e[40m ~~~ DarkCloud Vimconfig Update Tool ~~~ \e[0m"
fi
echo
# update darkcloud-vimconfig
echo -n -e "\e[44m >> Updating Repository: \e[0m"
GIT_STATUS=$(git pull origin master 2>&1)
if [ $? = 0 ]; then
echo -e "\e[0;32m SUCCESS! \e[0m"
else
echo -e "\e[1;31m FAIL! \e[0m"
error "git pull origin master" "Git failed to sync the repo" "Git output: ${GIT_STATUS}"
exit 1
fi
# setup and sync the submodules
echo -e "\n\e[44m >> Updating Plugin Submodules >> \e[0m"
echo -n -e "\e[44m \e[0m\e[43m + Updating Plugin URLs: \e[0m"
GIT_STATUS=$(git submodule sync 2>&1)
if [ $? = 0 ]; then
echo -e "\e[0;32m SUCCESS! \e[0m"
else
echo -e "\e[1;31m FAIL! \e[0m"
error "git submodule sync" "Git failed to sync the submodules" "Git output: ${GIT_STATUS}"
fi
echo -n -e "\e[44m \e[0m\e[43m + Fetching Updates: \e[0m"
GIT_STATUS=$(git submodule foreach git fetch --all 2>&1)
if [ $? = 0 ]; then
GIT_STATUS=$(git submodule update --init --recursive 2>&1)
if [ $? = 0 ]; then
echo -e "\e[0;32m SUCCESS! \e[0m"
else
echo -e "\e[1;31m FAIL! \e[0m"
error "git submodule update --init --recursive" "Git failed to update the submodules" "Git output: ${GIT_STATUS}"
fi
else
echo -e "\e[1;31m FAIL! \e[0m"
error "git submodule foreach git fetch --all" "Git failed to fetch the submodules from their respective remotes" "Git output: ${GIT_STATUS}"
fi
echo -n -e "\e[44m \e[0m\e[43m + Checkout Origin/Master: \e[0m"
GIT_STATUS=$(git submodule foreach git checkout -f origin/master 2>&1)
if [ $? = 0 ]; then
echo -e "\e[0;32m SUCCESS! \e[0m"
else
echo -e "\e[1;31m FAIL! \e[0m"
error "git submodule foreach git checkout -f origin/master" "Git failed to checkout the submodules into origin/master" "Git output: ${GIT_STATUS}"
fi
# clean plugin directories and remove plugins no longer in the repo
echo -e "\n\e[44m >> Cleaning Plugin Directories >> \e[0m"
echo -n -e "\e[44m \e[0m\e[43m + Removing Untracked Files: \e[0m"
git submodule foreach git clean -dxf > /dev/null 2>&1 && echo -e "\e[0;32m SUCCESS! \e[0m" || echo -e "\e[1;31m FAIL! \e[0m"
[[ -f .gitmodules ]] && for each in vim/bundle/*; do
if [ -d "$each" ]; then
if [ -f "${each}/.git" ]; then
FILE=$(echo $each | grep -o -e "[^\/]*$")
if [ $(cat .gitmodules | grep "path = " | grep -o -e "[^\/]*$" | grep -c -e "${FILE}$") = 0 ]; then
[[ -z "$FIRST_OLD" ]] && export FIRST_OLD=1 && echo -n -e "\e[44m \e[0m\e[43m + Removing Old Plugins: \e[0m\n"
rm -rf "$each"
if [ $? = 0 ]; then
echo -e "\e[44m \e[0m\e[43m = \e[0m$(echo ${each}\ | sed -re 's|^(.*)/([^/]*)$|\\e\[1;37m\1/\\e\[1;31m\2\\e\[0m|')"
else
error "$each" "The folder could not be deleted" "Try deleting manually to resolve"
exit 1
fi
fi
fi
fi
done && unset FIRST_OLD && echo
# update git-based plugins in vim/bundle.user if any exist
if [ ! $(find vim/bundle.user | grep ".git/config" | wc -l) = 0 ]; then
echo -e "\e[44m >> Updating User Plugins >> \e[0m"
pushd vim/bundle.user > /dev/null 2>&1
for each in *; do
if [ -d "$each" ]; then
pushd "$each" > /dev/null 2>&1
if [ -d .git ]; then
echo -n -e "\e[44m \e[0m\e[43m + Updating 'vim/bundle.user/${each}' \e[0m"
GIT_STATUS=$(git pull origin master 2>&1)
if [ $? = 0 ]; then
if [ $(echo $GIT_STATUS | grep -c "Already up-to-date") = 0 ]; then
echo -e "\e[0;32m SUCCESS! \e[0m"
else
echo -e "\e[1;37m UP TO DATE \e[0m"
fi
else
error "vim/bundle.user/${each}" "Git failed to pull the latest changes" "Git output: ${GIT_STATUS}"
fi
fi
popd > /dev/null 2>&1
fi
done
popd > /dev/null 2>&1
echo
fi
echo -n -e "\e[44m >> Generating Plugin Helpdocs: \e[0m"
[[ $(type -P vim) ]] && vim -c "Helptags|qa!" &> /dev/null 2>&1 \
&& echo -e "\e[0;32m SUCCESS! \e[0m" \
|| (echo -e "\e[1;31m FAIL! \e[0m"; error "$vim -c \"Helptags|qa!\"" "Generating helpdocs for the submodules failed")
echo -e "\n\e[40m ~~~ Update Complete ~~~ \e[0m\n"
exit 0