#!/bin/bash export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ ' function error_out() { echo "Bailing out. See above for reason...." exit 1 } function handle_failure() { local lineno=$1 local fn=$2 local exitstatus=$3 local msg=$4 local lineno_fns=${0% 0} if [[ "$lineno_fns" != "-1" ]] ; then lineno="${lineno} ${lineno_fns}" fi echo "${BASH_SOURCE[0]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg" } trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR set -o errexit set -o nounset set -o pipefail set -o functrace WORKDIR="$(cd "$(dirname "$0")" && pwd)" TARGET_DIR="${WORKDIR}/Docker" cd "$TARGET_DIR" # Iterate only over directories that are git repos while IFS= read -r -d '' repo_dir; do echo "Updating: ${repo_dir}" pushd "$repo_dir" >/dev/null if [[ -d .git ]]; then git -c advice.detachedHead=false fetch --all --prune || true # Fast-forward only to avoid unintended merges git -c advice.detachedHead=false pull --ff-only || true else echo "Skipping (not a git repo): ${repo_dir}" fi popd >/dev/null done < <(find . -mindepth 1 -maxdepth 1 -type d -print0)