blob: 29ea81f68dec5f076a5a13e827fcd56143a55537 [file] [log] [blame]
#!/bin/bash
#
# Script to take a stable-queue, and turn it into a -rc release to be
# sent off in email.
#
# locations of some things that you might want to override if you are a
# different developer than gregkh
STABLE_QUEUE="/home/gregkh/linux/stable/stable-queue/"
TMP_DIR="/home/gregkh/linux/tmp/"
SCRIPT_NAME=`basename ${0}`
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# programs that we depend on in this script
REQUIREMENTS="kv splitmbox.py kup mbox2send filterdiff"
# todo check dependancies using hash or something
MBOX="$1"
if [ "${MBOX}" == "" ] ; then
echo "using default 'mbox' name for the mailbox."
MBOX="mbox"
fi
FULL_VERSION=`kv`
BASE_VERSION=${FULL_VERSION/-rc?/}
VERSION=`basename \`pwd\``
ROOT_VERSION=${VERSION/\.y/}
ROOT_VERSION=${ROOT_VERSION/linux-/}
REL_ARRAY=(${FULL_VERSION//./ })
MAJOR=${REL_ARRAY[0]}
VER="${MAJOR}.x"
RC_ARRAY=(${FULL_VERSION//-/ })
RC=${RC_ARRAY[1]}
#DATE=`date -u --date="2 days"`
DATE=`date -u --rfc-822 --date="2 days"`
if [ ${FULL_VERSION} == ${BASE_VERSION} ] ; then
echo "Makefile says the version is ${FULL_VERSION}, did you forget to set the -rc version?"
exit
fi
# create a directory for everything to live in
#TMP_DIR=`mktemp -d ${TMP_DIR}/stable-${ROOT_VERSION}-XXXX` || exit 1
TMP_DIR=`mktemp -d ${TMP_DIR}/stable-${FULL_VERSION}-XXX` || exit 1
# Generate the Makefile diff, with just the version number change in it
# relies on filterdiff from the wonderful patchutils package
git diff Makefile | filterdiff --hunks 1 > ${TMP_DIR}/Makefile.patch
# make a git tree to create the log file in the format that Linus likes.
echo "Creating a git tree of the commits..."
ORIGINAL_DIR=`pwd`
TMP_TREE=`mktemp -d ${TMP_DIR}/stable-${ROOT_VERSION}-XXXX` || exit 1
TMP_LOG=`mktemp ${TMP_DIR}/stable-log-XXXX` || exit 1
git clone -s . ${TMP_TREE}
cd ${TMP_TREE}
git checkout -b temp_branch
git quiltimport --patches=${STABLE_QUEUE}/queue-${ROOT_VERSION}
if [ $? -ne 0 ]; then
echo "git quilt import failed!!!"
exit 1
fi
# Apply the Makefile patch and commit it
patch -p1 < ${TMP_DIR}/Makefile.patch
git commit -a -m "Linux ${FULL_VERSION}"
# Generate the diffstat and patch
git diff ${VERSION}..HEAD > ${TMP_DIR}/patch-${FULL_VERSION}
git diff --stat ${VERSION}..HEAD > ${TMP_DIR}/diffstat
# sign the patch
gpg -a -b ${TMP_DIR}/patch-${FULL_VERSION}
# generate the log file
git log --abbrev=12 --format="%aN <%aE>%n %s%n" ${VERSION}..HEAD > ${TMP_LOG}
# clean up the git tree by deleting it
cd ${ORIGINAL_DIR}
#rm -rf ${TMP_TREE}
echo "Creating the mailbox for kernel release ${FULL_VERSION}"
TMPFILE=`mktemp ${TMP_DIR}/stable_header.XXXXXX` || exit 1
NUM_PATCHES=`quilt series | wc -l`
(
echo "This is the start of the stable review cycle for the ${BASE_VERSION} release."
echo "There are ${NUM_PATCHES} patches in this series, all will be posted as a response"
echo "to this one. If anyone has any issues with these being applied, please"
echo "let me know."
echo ""
echo "Responses should be made by ${DATE}."
echo "Anything received after that time might be too late."
echo ""
echo "The whole patch series can be found in one patch at:"
echo " https://www.kernel.org/pub/linux/kernel/v${VER}/stable-review/patch-${FULL_VERSION}.gz"
echo "or in the git tree and branch at:"
echo " git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-${ROOT_VERSION}.y"
echo "and the diffstat can be found below."
echo ""
echo "thanks,"
echo ""
echo "greg k-h"
echo ""
echo "-------------"
echo "Pseudo-Shortlog of commits:"
echo ""
cat ${TMP_LOG}
#stable-shortlog
echo ""
echo "-------------"
echo ""
echo "Diffstat:"
echo ""
cat ${TMP_DIR}/diffstat
) > ${TMPFILE}
FROM="Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
TO="linux-kernel@vger.kernel.org"
CC="stable@vger.kernel.org"
#SUBJECT="${BASE_VERSION}-stable review"
SUBJECT="${FULL_VERSION} review"
quilt mail --mbox ${TMP_DIR}/${MBOX} \
-M "${TMPFILE}" \
--sender "${FROM}" \
--from "${FROM}" \
--to "${TO}" \
--cc "${CC}" \
--prefix "PATCH ${ROOT_VERSION}" \
--subject "${SUBJECT}"
rm ${TMPFILE} ${TMP_LOG}
echo "mbox is now in ${TMP_DIR}/${MBOX}"
cd ${TMP_DIR}
${STABLE_QUEUE}/scripts/mbox2send ${ROOT_VERSION} ${FULL_VERSION} ${MBOX}
#< ${MBOX}.new formail -ds sh -c 'cat > msg.$FILENO'
splitmbox.py ${MBOX}.new .
# find the "0" email message
if [ -f "msg.0" ]; then
MSG="msg.0"
elif [ -f "msg.00" ]; then
MSG="msg.00"
elif [ -f "msg.000" ]; then
MSG="msg.000"
elif [ -f "msg.0000" ]; then
MSG="msg.0000"
else
echo "msg.ZERO can not be found???"
echo "Aborting!"
exit 1
fi
# List of names to cc: on the 00/XX email message
# must escape '.' characters properly due to use of sed below
CC_NAMES=("torvalds@linux-foundation\.org"
"akpm@linux-foundation\.org"
"linux@roeck-us\.net"
"shuah@kernel\.org"
"patches@kernelci\.org"
"lkft-triage@lists\.linaro\.org"
"pavel@denx\.de"
"jonathanh@nvidia\.com"
"f\.fainelli@gmail\.com"
"sudipm\.mukherjee@gmail\.com"
"slade@sladewatkins\.com")
CC_LIST="stable@vger\.kernel\.org"
for name in "${CC_NAMES[@]}"; do
CC_LIST+=", ${name}"
done
echo "Adding names to ${MSG}: ${CC_LIST}"
sed -i -e "s/Cc: stable@vger\.kernel\.org/Cc: ${CC_LIST}/" "${TMP_DIR}"/"${MSG}"
# Create a script to upload the patch to kernel.org and to send the patches out
echo "#!/bin/bash" > ${TMP_DIR}/send_it_off
echo "kup --host=git@gitolite.kernel.org --subcmd=kup-server put patch-${FULL_VERSION} patch-${FULL_VERSION}.asc /pub/linux/kernel/v${VER}/stable-review/patch-${FULL_VERSION}.gz" >> ${TMP_DIR}/send_it_off
if [ "${RC}" == "rc1" ] ; then
echo "git send-email msg.*" >> ${TMP_DIR}/send_it_off
echo "#git send-email ${MSG}" >> ${TMP_DIR}/send_it_off
else
echo "#git send-email msg.*" >> ${TMP_DIR}/send_it_off
echo "git send-email ${MSG}" >> ${TMP_DIR}/send_it_off
fi
chmod 755 ${TMP_DIR}/send_it_off
# Push a version of the patches out to the world in a git tree
cd ${TMP_TREE}
git checkout linux-${ROOT_VERSION}.y
git merge -q temp_branch
#echo "git push --force gitolite@ra.kernel.org:/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-${ROOT_VERSION}.y"
#git push --force gitolite@ra.kernel.org:/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-${ROOT_VERSION}.y
echo "git push --force git@gitolite.kernel.org:/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-${ROOT_VERSION}.y"
git push --force git@gitolite.kernel.org:/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-${ROOT_VERSION}.y
# clean up the git tree by deleting it
cd ${ORIGINAL_DIR}
rm -rf ${TMP_TREE}
# announce what needs to be done
echo "cd ${TMP_DIR}"
echo "./send_it_off"