There's a script to automate fetching submodule changes. However, this script alays fetches remote master branch, which's not always the case. For example, for branch-5.0/next-5.0 pair the correct scylla-seastar branch would be the branch-5.0 one, not master. With this change updating a submodule from a custom branch would be like refresh-submodules.sh <submodule>:<branch> Signed-off-by: Pavel Emelyanov <xemul@scylladb.com> Message-Id: <20220322093623.15748-1-xemul@scylladb.com>
38 lines
1.2 KiB
Bash
Executable File
38 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
|
|
)
|
|
|
|
for ent in "${@:-${submodules[@]}}"; do
|
|
submodule=${ent%%:*}
|
|
[ ${submodule} == ${ent} ] && branch="master" || branch=${ent#*:}
|
|
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
|