summaryrefslogtreecommitdiff
path: root/ci/ci-commitmessage-submodules.sh
diff options
context:
space:
mode:
authorJonathan Lebon <jonathan@jlebon.com>2020-06-17 10:38:06 -0400
committerJonathan Lebon <jonathan@jlebon.com>2020-06-17 10:39:51 -0400
commiteb3fe35b0684ee6e2c4c514a49e8151c00ba59a0 (patch)
treec63c618fda06ed98cf273199a7edce6ce80f7771 /ci/ci-commitmessage-submodules.sh
parentbd9b4ea7310d47003ac5abc4d12d0e6eb75f5b25 (diff)
downloadostree-eb3fe35b0684ee6e2c4c514a49e8151c00ba59a0.tar.gz
ci: Import latest ci-commitmessage-submodules from rpm-ostree
Especially for https://github.com/coreos/rpm-ostree/pull/2079.
Diffstat (limited to 'ci/ci-commitmessage-submodules.sh')
-rwxr-xr-xci/ci-commitmessage-submodules.sh35
1 files changed, 26 insertions, 9 deletions
diff --git a/ci/ci-commitmessage-submodules.sh b/ci/ci-commitmessage-submodules.sh
index 35d828e4..edc0d780 100755
--- a/ci/ci-commitmessage-submodules.sh
+++ b/ci/ci-commitmessage-submodules.sh
@@ -1,5 +1,8 @@
#!/bin/bash
-set -euo pipefail
+set -xeuo pipefail
+
+dn=$(dirname $0)
+. ${dn}/libbuild.sh
# Copyright 2017 Colin Walters <walters@verbum.org>
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
@@ -13,11 +16,8 @@ set -euo pipefail
# It's very common for people to accidentally change submodules, and having this
# requirement is a small hurdle to pass.
-# if running under PAPR, use the branch/PR HEAD actually
-# being tested rather than the merge sha
-HEAD=${PAPR_COMMIT:-HEAD}
-dn=$(dirname $0)
-. ${dn}/libpaprci/libbuild.sh
+# If passed the commit, use that. Otherwise, just use HEAD.
+HEAD=${1:-HEAD}
tmpd=$(mktemp -d)
touch ${tmpd}/.tmpdir
@@ -30,8 +30,8 @@ cleanup_tmp() {
trap cleanup_tmp EXIT
if ! [ -x /usr/bin/git ]; then
- pkg_upgrade
- pkg_install git
+ pkg_upgrade
+ pkg_install git
fi
gitdir=$(realpath $(pwd))
@@ -42,17 +42,34 @@ cp -a ${gitdir} ${tmpd}/workdir
cd ${tmpd}/workdir
git log --pretty=oneline origin/master..$HEAD | while read logline; do
commit=$(echo ${logline} | cut -f 1 -d ' ')
+ # For merge commits, just check that they're empty (i.e. no conflict
+ # resolution was needed). Otherwise, let's just error out. Conflicts should
+ # be resolved by rebasing the PR.
+ # https://stackoverflow.com/questions/3824050#comment82244548_13956422
+ if [ "$(git rev-list --no-walk --count --merges ${commit})" -ne 0 ]; then
+ if [ -n "$(git diff-tree ${commit})" ]; then
+ echo "error: non-empty git merge: resolve conflicts by rebasing!"
+ exit 1
+ fi
+ echo "Commit ${commit} is an empty merge commit; ignoring..."
+ continue
+ fi
git diff --name-only ${commit}^..${commit} > ${tmpd}/diff.txt
git log -1 ${commit} > ${tmpd}/log.txt
echo "Validating commit for submodules: $commit"
+ sed -e 's,^,# ,' < ${tmpd}/log.txt
git checkout -q "${commit}"
git submodule update --init
git submodule foreach --quiet 'echo $path'| while read submodule; do
if grep -q -e '^'${submodule} ${tmpd}/diff.txt; then
echo "Commit $commit modifies submodule: $submodule"
expected_match="Update submodule: $submodule"
+ # check if it's from dependabot
+ if grep -q -e '^Author: dependabot' ${tmpd}/log.txt; then
+ echo "Commit $commit contains bump from Dependabot"
+ continue
+ fi
if ! grep -q -e "$expected_match" ${tmpd}/log.txt; then
- sed -e 's,^,# ,' < ${tmpd}/log.txt
echo "error: Commit message for ${commit} changes a submodule, but does not match regex ${expected_match}"
exit 1
fi