diff options
author | Martin Roth <martinroth@google.com> | 2017-07-22 21:31:56 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2017-08-04 15:33:03 +0000 |
commit | 5cb2263004c2068090ecdf955d3da01fd46daee7 (patch) | |
tree | b344d6fe46bbe3aeb83c44ef36dd2c9ea37be820 | |
parent | f3bf7d0fb70cea8a8fc880d62e00a09d1539e0f9 (diff) |
util/scripts: Add script to update submodules
Change-Id: I4e238b539f06ce4031e0e99d26943d226a3c2556
Signed-off-by: Martin Roth <martinroth@google.com>
Reviewed-on: https://review.coreboot.org/20703
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
-rwxr-xr-x | util/scripts/update_submodules | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/util/scripts/update_submodules b/util/scripts/update_submodules new file mode 100755 index 0000000000..fbf9d4f5b1 --- /dev/null +++ b/util/scripts/update_submodules @@ -0,0 +1,73 @@ +#!/bin/bash + +# This file is part of the coreboot project. +# +# Copyright (C) 2017 Google Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +# 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=UTC + +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 +) |