#!/bin/bash set -e message_file=.git/COMMIT_EDITMSG get_git_root() { git rev-parse --show-toplevel } write_msg() { echo "$@" >> "${message_file}" } git_root="$(get_git_root)" cd "${git_root}" rm -f "${message_file}" write_msg "Auto-update submodules" write_msg "" cat ci/update-submodules.manifest | while read path branch; do cd "${git_root}/${path}" test "${git_root}" != "$(get_git_root)" git fetch origin "${branch}:${branch}" git checkout "${branch}" git branch --set-upstream-to="origin/${branch}" "${branch}" git pull --ff-only cd "${git_root}" if ! git diff --quiet --ignore-submodules=dirty -- "${path}"; then git add "${path}" write_msg "${path}: ${branch}" fi done if ! git diff --exit-code --cached; then git commit --file "${message_file}" --no-edit exit 0 else exit 1 fi