#!/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 <