Check cherry-pick hashes in pep8 tox target
NOTE(elod.illes): This is a combination of 2 commits: the cherry-pick hash checker script and a fix for the script. 1. Check cherry-pick hashes in pep8 tox target This adds a tools/ script that checks any cherry-picked hashes on the current commit (or a provided commit) to make sure that all the hashes exist on at least master or stable/.* branches. This should help avoid accidentally merging stable backports where one of the hashes along the line has changed due to conflicts. 2. Fix cherry-pick check for merge patch Cherry-pick check script validates the proposed patch's commit message. If a patch is not on top of the given branch then Zuul rebases it to the top and the patch becomes a merge patch. In this case the script validates the merge patch's commit message instead of the original patch's commit message and fails. This fix selects the parent of the patch if it is a merge patch. (cherry picked from commitc7c48c6f52
) (cherry picked from commit02f213b831
) (cherry picked from commit7a5111ba29
) Change-Id: I4afaa0808b75cc31a8dd14663912c162281a1a42 (cherry picked from commitaebc829c4e
) (cherry picked from commit5cacfaab82
) (cherry picked from commitd307b964ce
) (cherry picked from commitc3dd9f86f1
)
This commit is contained in:
parent
5acdb6dcfd
commit
f1ab10b825
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# A tool to check the cherry-pick hashes from the current git commit message
|
||||||
|
# to verify that they're all on either master or stable/ branches
|
||||||
|
#
|
||||||
|
|
||||||
|
commit_hash=""
|
||||||
|
|
||||||
|
# Check if the patch is a merge patch by counting the number of parents.
|
||||||
|
# If the patch has 2 parents, then the 2nd parent is the patch we want
|
||||||
|
# to validate.
|
||||||
|
parent_number=$(git show --format='%P' --quiet | awk '{print NF}')
|
||||||
|
if [ $parent_number -eq 2 ]; then
|
||||||
|
commit_hash=$(git show --format='%P' --quiet | awk '{print $NF}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
hashes=$(git show --format='%b' --quiet $commit_hash | sed -nr 's/^.cherry picked from commit (.*).$/\1/p')
|
||||||
|
checked=0
|
||||||
|
branches+=""
|
||||||
|
for hash in $hashes; do
|
||||||
|
branch=$(git branch -a --contains "$hash" 2>/dev/null| grep -oE '(master|stable/[a-z]+)')
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Cherry pick hash $hash not on any master or stable branches"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
branches+=" $branch"
|
||||||
|
checked=$(($checked + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $checked -eq 0 ]; then
|
||||||
|
if ! grep -q '^defaultbranch=stable/' .gitreview; then
|
||||||
|
echo "Checked $checked cherry-pick hashes: OK"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
if ! git show --format='%B' --quiet | grep -qi 'stable.*only'; then
|
||||||
|
echo 'Stable branch requires either cherry-pick -x headers or [stable-only] tag!'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo Checked $checked cherry-pick hashes on branches: $(echo $branches | tr ' ' '\n' | sort | uniq)
|
||||||
|
fi
|
1
tox.ini
1
tox.ini
|
@ -65,6 +65,7 @@ commands =
|
||||||
bash -c "! find doc/ -type f -name *.json | xargs grep -U -n $'\r'"
|
bash -c "! find doc/ -type f -name *.json | xargs grep -U -n $'\r'"
|
||||||
# Check that all included JSON files are valid JSON
|
# Check that all included JSON files are valid JSON
|
||||||
bash -c '! find doc/ -type f -name *.json | xargs -t -n1 python -m json.tool 2>&1 > /dev/null | grep -B1 -v ^python'
|
bash -c '! find doc/ -type f -name *.json | xargs -t -n1 python -m json.tool 2>&1 > /dev/null | grep -B1 -v ^python'
|
||||||
|
bash tools/check-cherry-picks.sh
|
||||||
|
|
||||||
[testenv:fast8]
|
[testenv:fast8]
|
||||||
description =
|
description =
|
||||||
|
|
Loading…
Reference in New Issue