There's a script to automate fetching submodule changes. However, this script alays fetches remote master branch, which's not always the case. The correct branch can be detected by checking the current remote tracking scylla branch which should coincide with the submodule one. Signed-off-by: Pavel Emelyanov <xemul@scylladb.com> Message-Id: <20220317085018.11529-1-xemul@scylladb.com>
39 lines
1.2 KiB
Bash
Executable File
39 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Refresh git submodules by fast-forward merging them to the tip of the
|
|
# master branch of their respective repositories and committing the
|
|
# update with a default commit message of "git submodule summary".
|
|
#
|
|
# Copyright (C) 2020-present ScyllaDB
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# The following is the default list of submodules to refresh. To only refreh
|
|
# some of them, pass the list of modules to refresh as arguments. For example,
|
|
# "scripts/refresh-submodules.sh seastar tools/java" only refreshes the
|
|
# two submodules seastar and tools/java.
|
|
submodules=(
|
|
seastar
|
|
tools/jmx
|
|
tools/java
|
|
tools/python3
|
|
)
|
|
|
|
REMOTE=$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream})
|
|
BRANCH=${REMOTE##*/}
|
|
|
|
for submodule in "${@:-${submodules[@]}}"; do
|
|
GIT_DIR="$submodule/.git" git pull --ff-only origin ${BRANCH}
|
|
SUMMARY=$(git submodule summary $submodule)
|
|
if grep '^ *<' <<< "$SUMMARY"; then
|
|
echo "Non fast-forward changes detected! Fire three red flares from your flare pistol."
|
|
exit 1
|
|
fi
|
|
if [ ! -z "$SUMMARY" ]; then
|
|
git commit --edit -m "Update $submodule submodule" -m "$SUMMARY" $submodule
|
|
fi
|
|
done
|