77 lines
2.1 KiB
Bash
77 lines
2.1 KiB
Bash
|
#!/bin/bash
|
||
|
#
|
||
|
# Check whether the given commit has a valid BZ ID reference for the given
|
||
|
# release.
|
||
|
#
|
||
|
# $1 -- release number
|
||
|
# $2 -- commit hash
|
||
|
#
|
||
|
|
||
|
exec 1>&2
|
||
|
|
||
|
bzcmd="bugzilla"
|
||
|
release=${1}
|
||
|
commit=${2}
|
||
|
msg="$(git show -s --pretty='%s%n%b' ${commit})"
|
||
|
summary="$(git show -s --pretty='%s%n%b' ${commit}|head -n 1)"
|
||
|
|
||
|
## helper functions ##
|
||
|
# Check the bz to see if it has an ack for this release. If the branch is
|
||
|
# a local branch, just warn. If it is the primary branch, block the commit.
|
||
|
bz_has_ack() {
|
||
|
bug=$1
|
||
|
flags=$(${bzcmd} query --bug_id=${bug} --outputformat="%{flags}")
|
||
|
|
||
|
ack_pattern="rhel-${release}\.[[:digit:]]+\.[[:digit:]]+\+"
|
||
|
if [[ ! "$flags" =~ $ack_pattern ]]; then
|
||
|
echo "*** BZ ${bug} is missing acks: ${flags}"
|
||
|
|
||
|
return 1
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
echo "${summary}" | grep -i '^new version' > /dev/null
|
||
|
if [ $? -eq 0 ]; then
|
||
|
# "New version" commit doesn't need a BZ ID
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
for word in ${summary} ; do
|
||
|
echo "${word}" | grep -q -E "^.*(#[0-9]+).*"
|
||
|
if [ $? -eq 0 ]; then
|
||
|
bug="$(echo "${word}" | sed -e 's/^(#//g' -e 's/).*$//g')"
|
||
|
${bzcmd} query --bug_id=${bug} --outputformat="%{product}" | grep -q "^Red Hat Enterprise Linux.*"
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "*** BZ ${bug} is not a RHEL bug."
|
||
|
exit 1
|
||
|
fi
|
||
|
bz_has_ack ${bug}
|
||
|
exit $?
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
last=$(($(echo "${msg}" |wc -l) - 2))
|
||
|
if [ ${last} -gt 0 ]; then
|
||
|
echo "${msg}" | tail -n ${last} | grep -v "^#" |
|
||
|
grep -E "^(Resolves|Related|Conflicts): rhbz#[0-9]+$" |
|
||
|
while read line ; do
|
||
|
bug="$(echo ${line} | cut -d '#' -f 2)"
|
||
|
${bzcmd} query --bug_id=${bug} --outputformat="%{product}" | grep -q "^Red Hat Enterprise Linux.*"
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "*** BZ ${bug} is not a RHEL bug."
|
||
|
exit 1
|
||
|
fi
|
||
|
bz_has_ack ${bug}
|
||
|
# exit from the loop (piping to while creates a subprocess???)
|
||
|
exit $?
|
||
|
done
|
||
|
|
||
|
# exit from the script with the code from the loop
|
||
|
exit $?
|
||
|
else
|
||
|
# nothing found
|
||
|
echo "*** Commit ${commit} doesn't have bugzilla ID specified ***" >&2
|
||
|
exit 1
|
||
|
fi
|