|
Jeff Mahoney |
3dff52 |
#!/bin/bash
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
URL="https://apibugzilla.suse.com/xmlrpc.cgi"
|
|
Jeff Mahoney |
3dff52 |
COMPONENT="Kernel"
|
|
Jeff Mahoney |
3dff52 |
COMMENT="This is an automated report for a proactive fix, documented below."
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
handle_one_patch() {
|
|
Jeff Mahoney |
3dff52 |
FILE="$1"
|
|
Jeff Mahoney |
3dff52 |
SUBJ=$(formail -x Subject < "${FILE}")
|
|
Jeff Mahoney |
3dff52 |
BODY="$(formail -I "" < "${FILE}" | awk '/^---/ { exit; }; { print; } ')"
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
# Use the last available version
|
|
Jeff Mahoney |
3dff52 |
${BUGZILLA} info -v "${PRODUCT}" > ${tmpdir}/version
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ $? -ne 0 ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "Could not get versions for ${PRODUCT}." >&2
|
|
Jeff Mahoney |
3dff52 |
echo "This sometimes produces weird connection aborted errors." >&2
|
|
Jeff Mahoney |
3dff52 |
cat ${tmpdir}/version >&2
|
|
Jeff Mahoney |
3dff52 |
exit 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
d7a9ad |
VERSION=$(grep -v unspecified ${tmpdir}/version | tail -1)
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
${BUGZILLA} new -p "${PRODUCT}" -c "${COMPONENT}" -a "${EMAIL}" \
|
|
Jeff Mahoney |
3dff52 |
${QA_EMAIL} -t "${SUBJ}" -v "${VERSION}" \
|
|
Jeff Mahoney |
3dff52 |
--comment "${COMMENT}" -s "CONFIRMED" \
|
|
Joerg Roedel |
3ef358 |
--keywords Proactive-Upstream-Fix \
|
|
Jeff Mahoney |
3dff52 |
--no-refresh --ids > ${tmpdir}/bugid
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ $? -ne 0 ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "Bug creation failed for "${FILE}"." >&2
|
|
Jeff Mahoney |
3dff52 |
cat ${tmpdir}/bugid >&2
|
|
Jeff Mahoney |
3dff52 |
exit 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
read BUGID < ${tmpdir}/bugid
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
# If we didn't get just a bug number, we got an error
|
|
Jeff Mahoney |
3dff52 |
if [ -z "${BUGID}" -o "${BUGID}" != "${BUGID%[^0-9]}" ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "Bug creation failed for ${FILE}; Errors follow." >&2
|
|
Jeff Mahoney |
3dff52 |
cat ${tmpdir}/bugid >&2
|
|
Jeff Mahoney |
3dff52 |
exit 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
OLDREFS=$(grep "^References:" "${FILE}"|sed -e 's#References: *##')
|
|
Jeff Mahoney |
3dff52 |
if [ -n "${OLDREFS}" ]; then
|
|
Jeff Mahoney |
3dff52 |
OLDREFS="${OLDREFS} "
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
REFERENCE="References: ${OLDREFS}bsc#${BUGID}"
|
|
Jeff Mahoney |
3dff52 |
if [ -n "${MORE_REFERENCES}" ]; then
|
|
Jeff Mahoney |
3dff52 |
REFERENCE="${REFERENCE} ${MORE_REFERENCES}"
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
# Update the references header before uploading
|
|
Jeff Mahoney |
3dff52 |
FILENAME="$(basename "${FILE}")"
|
|
Jeff Mahoney |
3dff52 |
grep -v "^References:" "${FILE}" | formail -f -I "${REFERENCE}" \
|
|
Jeff Mahoney |
3dff52 |
> "${tmpdir}/${FILENAME}"
|
|
Jeff Mahoney |
3dff52 |
if [ $? -eq 0 ]; then
|
|
Jeff Mahoney |
3dff52 |
mv "${tmpdir}/${FILENAME}" "${FILE}"
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ "${SUBJ}" = "${SUBJ/\[PATCH}" ]; then
|
|
Jeff Mahoney |
3dff52 |
SUBJ="[PATCH] ${SUBJ}"
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
${BUGZILLA} attach --file="${FILE}" -d "${SUBJ}" -t "text/x-patch" \
|
|
Jeff Mahoney |
3dff52 |
--comment "${BODY}" ${BUGID}
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
echo "Filed report ${BUGID} for ${FILE}"
|
|
Jeff Mahoney |
3dff52 |
}
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
usage () {
|
|
Jeff Mahoney |
3dff52 |
cat <
|
|
Jeff Mahoney |
791c92 |
usage: $(basename $0) [options...] PATCH [PATCH ...]
|
|
Jeff Mahoney |
3dff52 |
Options:
|
|
Jeff Mahoney |
3dff52 |
-e | --email <address>
|
|
Jeff Mahoney |
3dff52 |
* Email address to which this report will be assigned
|
|
Jeff Mahoney |
3dff52 |
-p | --product <product>
|
|
Jeff Mahoney |
3dff52 |
* Bugzilla product to fail this report against
|
|
Jeff Mahoney |
3dff52 |
-d | --debug
|
|
Jeff Mahoney |
3dff52 |
* Enable debugging output (also assigns QA contact as you)
|
|
Jeff Mahoney |
3dff52 |
-r | --reference
|
|
Jeff Mahoney |
3dff52 |
* Any additional references to assign to this report,
|
|
Jeff Mahoney |
3dff52 |
e.g. FATE#123456
|
|
Jeff Mahoney |
3dff52 |
-h | --help
|
|
Jeff Mahoney |
3dff52 |
* Print this message
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
Notes:
|
|
Jeff Mahoney |
3dff52 |
* If no email address specified, the username component of git-config
|
|
Jeff Mahoney |
3dff52 |
user.email will be used with @suse.com appended.
|
|
Jeff Mahoney |
3dff52 |
* If no product is specified, the \$BUGZILLA_PRODUCT variable in
|
|
Jeff Mahoney |
3dff52 |
rpm/config.sh will be used, if present.
|
|
Jeff Mahoney |
3dff52 |
* If the patch already contains references, they will be preserved with
|
|
Jeff Mahoney |
3dff52 |
the bugzilla ID created and any additional references specified with
|
|
Jeff Mahoney |
3dff52 |
--reference appended. Otherwise, a new References tag will be created.
|
|
Jeff Mahoney |
3dff52 |
* The patch will be updated with new references prior to upload.
|
|
Jeff Mahoney |
3dff52 |
* Use of this script requires a ~/.bugzillarc with the following contents:
|
|
Jeff Mahoney |
3dff52 |
[apibugzilla.suse.com]
|
|
Jeff Mahoney |
3dff52 |
user = <bugzilla username>
|
|
Jeff Mahoney |
3dff52 |
password = <bugzilla password>
|
|
Jeff Mahoney |
3dff52 |
authtype = basic
|
|
Jeff Mahoney |
3dff52 |
END
|
|
Jeff Mahoney |
3dff52 |
exit $1
|
|
Jeff Mahoney |
3dff52 |
}
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
# Defaults
|
|
Jeff Mahoney |
3dff52 |
EMAIL="$(git config user.email)"
|
|
Jeff Mahoney |
3dff52 |
if [ "${EMAIL}" != "${EMAIL%%*@suse.com}" ]; then
|
|
Jeff Mahoney |
3dff52 |
EMAIL="${EMAIL%%@*}@suse.com"
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
. $(dirname $0)/../rpm/config.sh
|
|
Jeff Mahoney |
3dff52 |
PRODUCT="${BUGZILLA_PRODUCT}"
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
OPTS="$(getopt -o e:p:dr:h --long email:,product:,debug,reference: -n 'bugzilla-upload' -- "$@")"
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ $? -ne 0 ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "" >&2
|
|
Jeff Mahoney |
3dff52 |
usage 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
eval set -- "${OPTS}"
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
while true; do
|
|
Jeff Mahoney |
3dff52 |
case "$1" in
|
|
Jeff Mahoney |
3dff52 |
-e | --email)
|
|
Jeff Mahoney |
3dff52 |
EMAIL="$2" ; shift 2 ;;
|
|
Jeff Mahoney |
3dff52 |
-p | --product)
|
|
Jeff Mahoney |
3dff52 |
PRODUCT="$2" ; shift 2 ;;
|
|
Jeff Mahoney |
3dff52 |
-d | --debug)
|
|
Jeff Mahoney |
3dff52 |
DEBUG=true; shift ;;
|
|
Jeff Mahoney |
3dff52 |
-r | --reference)
|
|
Jeff Mahoney |
3dff52 |
MORE_REFERENCES="${MORE_REFERENCES} $2" ; shift 2 ;;
|
|
Jeff Mahoney |
3dff52 |
-h | --help)
|
|
Jeff Mahoney |
3dff52 |
usage 0 ;;
|
|
Jeff Mahoney |
3dff52 |
--)
|
|
Jeff Mahoney |
3dff52 |
shift ; break ;;
|
|
Jeff Mahoney |
3dff52 |
*)
|
|
Jeff Mahoney |
3dff52 |
break ;;
|
|
Jeff Mahoney |
3dff52 |
esac
|
|
Jeff Mahoney |
3dff52 |
done
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ "$#" -eq 0 ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "" >&2
|
|
Jeff Mahoney |
3dff52 |
usage 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
DEBUG=true
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ -z "${PRODUCT}" ]; then
|
|
Jeff Mahoney |
3dff52 |
cat <<-END >&2
|
|
Jeff Mahoney |
3dff52 |
ERROR: No product specified.
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
Product may be specified via -p or rpm/config.sh:\$BUGZILLA_PRODUCT
|
|
Jeff Mahoney |
3dff52 |
END
|
|
Jeff Mahoney |
3dff52 |
exit 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
if [ -z "${EMAIL}" ]; then
|
|
Jeff Mahoney |
3dff52 |
cat <<-END >&2
|
|
Jeff Mahoney |
3dff52 |
ERROR: No assignee email address specified.
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
Email may be specified via -e or git-config user.email
|
|
Jeff Mahoney |
3dff52 |
END
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
# Don't spam QA while testing
|
|
Jeff Mahoney |
3dff52 |
if [ -n "${DEBUG}" ]; then
|
|
Jeff Mahoney |
3dff52 |
QA_EMAIL="-q ${EMAIL}"
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
DIR="$(realpath "$(dirname "$0")")"
|
|
Jeff Mahoney |
3dff52 |
if [ ! -e "${DIR}/bugzilla-cli" ]; then
|
|
Jeff Mahoney |
3dff52 |
echo "Missing ${DIR}/bugzilla-cli" >&2
|
|
Jeff Mahoney |
3dff52 |
exit 1
|
|
Jeff Mahoney |
3dff52 |
fi
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
BUGZILLA="${DIR}/bugzilla-cli --bugzilla ${URL} --ensure-logged-in"
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
cleanup () {
|
|
Jeff Mahoney |
3dff52 |
rm -rf ${tmpdir}
|
|
Jeff Mahoney |
3dff52 |
}
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
trap cleanup EXIT
|
|
Jeff Mahoney |
3dff52 |
tmpdir=$(mktemp -d /tmp/bugzilla.XXXXXX)
|
|
Jeff Mahoney |
3dff52 |
|
|
Jeff Mahoney |
3dff52 |
for patch in "$@"; do
|
|
Jeff Mahoney |
3dff52 |
handle_one_patch "${patch}"
|
|
Jeff Mahoney |
3dff52 |
done
|