blob: e2075fd90b4b1bb3286d0cd87face25d3b55d735 (
plain) (
tree)
|
|
# this file is sourced by all bash shells on startup
# test for interactive shell
[[ $- != *i* ]] && return
# return if this script is executed twice
[[ -n $(declare -p _DOTFILES_DIR 2>/dev/null) ]] && return
declare -r _DOTFILES_DIR="${HOME}/.dotfiles"
declare -r _BASHRC_DIR="${_DOTFILES_DIR}/bashrc"
# start in home dir
if [[ -n "${DIR}" ]]; then
cd "${DIR}"
unset DIR
else
cd "${HOME}"
fi
# self update magic
_self_update() {
pushd ${_DOTFILES_DIR} &>/dev/null
# save the origin, the current master is based of
if ! git tag | grep old-origin -q; then
if git branch | grep old-origin -q; then
git branch -D old-origin >/dev/null 2>&1
fi
git tag old-origin origin/master >/dev/null 2>&1
fi
if hash timeout >/dev/null 2>&1; then
timeout 3s git fetch origin 2>/dev/null
if [[ "$?" == "124" ]]; then
echo -e "\033[31m*\033[0m timeout: git fetch origin"
popd &>/dev/null
return
fi
else
git fetch origin 2>/dev/null
fi
if [[ -n "$(git whatchanged HEAD..origin/master)" ]]; then
echo -ne "\033[31m*\033[0m dotfile updates found, merge now? (Y/n) "
read _merge;
if [[ $_merge != 'n' ]]; then
_local_changes="$(git status | grep '^# Change')"
_old_origin="$(git rev-list -n1 old-origin)"
if [[ "$_old_origin" != "$(git rev-list -n1 HEAD)" ]]; then
echo -e "\033[31m*\033[0m You have some local commits. I will now try to rebase them"
echo " onto the new origin/master."
fi
if [[ -n "$_local_changes" ]]; then
echo -e "\033[31m*\033[0m You have some uncommited local changes."
echo " I will try to preserve it using the git stash."
git stash >/dev/null || return
fi
# update old-origin
git tag -d old-origin >/dev/null 2>&1
git tag old-origin origin/master >/dev/null 2>&1
echo -e "\033[33m*\033[0m git rebase --onto origin/master $_old_origin"
git rebase --onto origin/master $_old_origin || return
if [[ -n "$_local_changes" ]]; then
git stash pop >/dev/null || return
fi
if [[ -e management/symlinks.md5 ]]; then
if hash md5sum 2> /dev/null ; then
md5sum -c management/symlinks.md5 --status 2>/dev/null
else
if hash md5 2> /dev/null ; then
md5 -c management/symlinks.md5 >/dev/null
fi
fi
if [[ $? -ne 0 ]]; then
echo -e "\033[33m*\033[0m symlink mapping changed!"
echo -e "\033[33m*\033[0m Maybe you should execute godot.sh again..."
fi
else
echo -e "\033[33m*\033[0m symlink mapping checksum not found"
echo -e "\033[33m*\033[0m Maybe you should execute godot.sh again."
fi
popd &>/dev/null
exec $SHELL
fi
fi
popd &>/dev/null
}
# module load magic
_load() {
local base path
local pedantic=0
[[ -z $1 || -z $2 ]] && return
base=${_BASHRC_DIR}/${1}
if [[ $1 == "common" || $2 == "init" ]]; then
path=${2}.sh
pedantic=1
else
case $1 in
(dist) path=${_DISTNAME}/${2}.sh ;;
(node) path=${_NODENAME}/${2}.sh ;;
(net) path=${_NETNAME}/${2}.sh ;;
esac
fi
if [[ -r ${base}/${path} ]]; then
source ${base}/${path} 2>&1 > /dev/null
elif [[ $2 == "*" ]]; then
for file in ${base}/${path}; do
if [[ -r $file ]]; then
source $file 2>&1 > /dev/null
fi
done
elif [[ ${pedantic} -eq 1 ]]; then
echo "error: cannot find necessary startup file: ${base}/${path}"
fi
}
# update first
_self_update
_load common '*'
# load internals
_load dist init
_load node init
_load net init
# load common distribution settings
_load dist common
# load distribution specific node settings
_load node ${_DISTNAME}
# initialize preexec hack last
init_preexec_hack
|