diff --git a/bin/ensure-config.sh b/bin/ensure-config.sh index 5b1c6f2..c6f6234 100755 --- a/bin/ensure-config.sh +++ b/bin/ensure-config.sh @@ -2,8 +2,8 @@ set -euo pipefail [ ${BASH_VERSINFO[0]:-0} -lt 4 ] && { - echo "Bash too old, update to >=4.0" - exit 1 + echo "Bash too old, update to >=4.0" + exit 1 } SYSTEM=$(uname -s | tr 'A-Z' 'a-z') @@ -11,19 +11,18 @@ SYSTEM=$(uname -s | tr 'A-Z' 'a-z') FORCE=0 typeset -A REPOS REPOS=( - [public]='git@github.com:Luzifer/cfg.git#master' - [secret]='git@github.com:Luzifer/cfg-secret.git#master' - [system]="git@github.com:Luzifer/cfg-system.git#${SYSTEM}" + [public]='git@github.com:Luzifer/cfg.git#master' + [secret]='git@github.com:Luzifer/cfg-secret.git#master' ) # --- OPT parsing --- while getopts "f" opt; do - case "$opt" in - f) - FORCE=1 - ;; - esac + case "$opt" in + f) + FORCE=1 + ;; + esac done shift $((OPTIND - 1)) @@ -32,52 +31,52 @@ shift $((OPTIND - 1)) # --- OPT parsing --- if [ -e ${HOME}/bin/script_framework.sh ]; then - source ${HOME}/bin/script_framework.sh + source ${HOME}/bin/script_framework.sh else - function step() { echo "$@"; } - function fatal() { - echo "$@" - exit 1 - } + function step() { echo "$@"; } + function fatal() { + echo "$@" + exit 1 + } fi function config() { - git --git-dir="${HOME}/.cfg/${repo_name}" --work-tree="${HOME}" $@ + git --git-dir="${HOME}/.cfg/${repo_name}" --work-tree="${HOME}" $@ } for repo_name in "${!REPOS[@]}"; do - clone_url=$(echo ${REPOS[$repo_name]} | cut -d '#' -f 1) - branch=$(echo ${REPOS[$repo_name]} | cut -d '#' -f 2) + clone_url=$(echo ${REPOS[$repo_name]} | cut -d '#' -f 1) + branch=$(echo ${REPOS[$repo_name]} | cut -d '#' -f 2) - step "Working on '${repo_name}' (remote: '${clone_url}', branch: '${branch}'..." + step "Working on '${repo_name}' (remote: '${clone_url}', branch: '${branch}'..." - # Clone repo if it's not already available - if ! [ -d "${HOME}/.cfg/${repo_name}" ]; then - git clone --bare "${clone_url}" --branch "${branch}" "${HOME}/.cfg/${repo_name}" - fi + # Clone repo if it's not already available + if ! [ -d "${HOME}/.cfg/${repo_name}" ]; then + git clone --bare "${clone_url}" --branch "${branch}" "${HOME}/.cfg/${repo_name}" + fi - # Set basic git options for the repo - config config status.showUntrackedFiles no + # Set basic git options for the repo + config config status.showUntrackedFiles no - # Do not overwrite local changes - if (! config diff --exit-code 2>&1 >/dev/null) && [ ${FORCE} -eq 0 ]; then - error "Repo '${repo_name}' has unsaved changes and force-flag is not set" - continue - fi + # Do not overwrite local changes + if (! config diff --exit-code 2>&1 >/dev/null) && [ ${FORCE} -eq 0 ]; then + error "Repo '${repo_name}' has unsaved changes and force-flag is not set" + continue + fi - # Refresh latest master - config fetch -q origin ${branch} || { fatal "Failed to fetch '${repo_name}'"; } + # Refresh latest master + config fetch -q origin ${branch} || { fatal "Failed to fetch '${repo_name}'"; } - # Apply latest master - COMMITS_AHEAD=$(config rev-list --left-right --count FETCH_HEAD...HEAD | awk '{ print $2 }') - if [ ${COMMITS_AHEAD} -gt 0 ]; then - echo "Local commits found, trying to rebase..." - config rebase FETCH_HEAD - else - echo "No local commits, resetting to remote master..." - config reset --hard FETCH_HEAD - fi + # Apply latest master + COMMITS_AHEAD=$(config rev-list --left-right --count FETCH_HEAD...HEAD | awk '{ print $2 }') + if [ ${COMMITS_AHEAD} -gt 0 ]; then + echo "Local commits found, trying to rebase..." + config rebase FETCH_HEAD + else + echo "No local commits, resetting to remote master..." + config reset --hard FETCH_HEAD + fi - # Update submodules - config submodule update --init --recursive + # Update submodules + config submodule update --init --recursive done