#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-2.0-only

# Description:
# Check all submodules for updates.  If there are more than a minimum
# number of changes, create a commit to update the submodule to the
# new version.

export LANG=C
export LC_ALL=C
export TZ=UTC0

min_commits=10

TOP=${PWD}
SUBMODULES_WITH_UPDATES=0
submodule_dirs=$(git submodule foreach pwd | grep -v Entering)

(
echo "Checking submodules..."
for submodule in $submodule_dirs; do
	cd "$submodule" || exit 1
	initial_commit_id="$(git log --pretty='%h' -n 1)"
	initial_commit_description="$(git log --pretty='%ci - (%s)' -n 1)"
	git fetch 2>/dev/null
	updated_commit_id="$(git log --pretty='%h' -n 1 origin/master)"
	updated_commit_description="$(git log --pretty='%ci - (%s)' -n 1 "${updated_commit_id}")"
	if [ "${initial_commit_id}" = "${updated_commit_id}" ]; then
		# echo "No updates for ${submodule}"
		continue
	fi
	SUBMODULES_WITH_UPDATES+=1
	update_count="$(git log --oneline "${initial_commit_id}..${updated_commit_id}" | wc -l)"
	echo "${update_count} new commits for ${submodule}"
	if [ "${update_count}" -ge "${min_commits}" ]; then
		echo "Creating commit to update ${submodule##*/} submodule"
		git checkout "${updated_commit_id}" > /dev/null 2>&1
		cd "${TOP}" || exit 1
		sleep 1
		git add "${submodule}" > /dev/null 2>&1 || exit 1
		sleep 1
		git commit -s -F- > /dev/null 2>&1 <<EOF
Update ${submodule##*/} submodule to upstream master

Updating from commit id ${initial_commit_id}:
$initial_commit_description

to commit id ${updated_commit_id}:
${updated_commit_description}

This brings in ${update_count} new commits.
EOF
		sleep 1
	fi
done

if [ "${SUBMODULES_WITH_UPDATES}" = "0" ]; then
	echo "No submodules with any updates."
fi
)
