From 1f13d54a40d639938fb67245eed4615be0a6e6c4 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Wed, 21 Feb 2024 15:14:53 +0100 Subject: [PATCH] Add customization support for announce command Two new configuration settings allow to override the launch of a text editor (ANNOUNCE_EDITOR) and the builtin email submission (ANNOUNCE_TO_CMD). --- data/cygport.conf | 23 +++++++++++++++++ lib/pkg_upload.cygpart | 57 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/data/cygport.conf b/data/cygport.conf index 34ccd291..48dc7bfe 100644 --- a/data/cygport.conf +++ b/data/cygport.conf @@ -101,6 +101,29 @@ #PAGER= +#****v* Configuration/ANNOUNCE_EDITOR +# DESCRIPTION +# Shell command string to process the email message created by cygport's +# announce command before sending the email. If undefined, a text editor +# will be run, see EDITOR setting above. If empty, nothing will be run. +# If not empty, '/bin/bash' will be launched with the command string passed +# with '-c' option and the path of the temporary email message file as '$1'. +# The working directory of the shell will be the directory of the cygport +# file. The specified command string will be prepended by shell assignments +# of the cygport variables P, PF, PN, PR and PV and all SMTP_* settings +# described below. +#ANNOUNCE_EDITOR= + +#****v* Configuration/ANNOUNCE_TO_CMD +# DESCRIPTION +# Shell command string to process the email message created by cygport's +# announce command after editing. If undefined, the email will be sent +# using the builtin perl-based SMTP support. If empty, nothing will be run. +# If not empty, the command string will be handled similar to ANNOUNCE_EDITOR +# described above. +#ANNOUNCE_TO_CMD= + + #****v* Configuration/SMTP_SENDER # DESCRIPTION # Name and email address, in the form of "First Last " to be used diff --git a/lib/pkg_upload.cygpart b/lib/pkg_upload.cygpart index 8039ec5c..b81bf3d5 100644 --- a/lib/pkg_upload.cygpart +++ b/lib/pkg_upload.cygpart @@ -168,6 +168,28 @@ EOF echo "Upload complete." } +__pkg_announce_run_cmd_on_msg() { + local cmdvar=$1 + local msg=$2 + local cmd + + eval cmd="\${${cmdvar}}" + + ( + cd ${top} && /bin/bash -c "\ +P=${P@Q}; PF=${PF@Q}; PN=${PN@Q}; PR=${PR@Q}; PV=(${PV[*]@Q}) +${SMTP_SENDER+SMTP_SENDER=${SMTP_SENDER@Q}} +${SMTP_SERVER+SMTP_SERVER=${SMTP_SERVER@Q}} +${SMTP_SERVER_PORT+SMTP_SERVER_PORT=${SMTP_SERVER_PORT@Q}} +${SMTP_ENCRYPTION+SMTP_ENCRYPTION=${SMTP_ENCRYPTION@Q}} +${SMTP_USER+SMTP_USER=${SMTP_USER@Q}} +${SMTP_PASS+SMTP_PASS=${SMTP_PASS@Q}} +${cmd} +" \ + $0 ${msg} + ) || error "Command '\${${cmdvar}} ${msg}' (cwd=${top}) failed" +} + __pkg_announce() { local msg=$(mktemp -t cygwin-announce-${PF}.XXXXXX) local msgat=$(date +@%s) @@ -178,10 +200,10 @@ __pkg_announce() { cat > ${msg} <<_EOF From cygwin-announce-${PF} $(date '+%a %b %d %H:%M:%S %Y' --date=${msgat}) -From: ${SMTP_SENDER} -To: cygwin-announce@cygwin.com +${SMTP_SENDER:+From: ${SMTP_SENDER} +}To: cygwin-announce@cygwin.com Date: $(date -R --date=${msgat}) -Message-Id: <$(date "+%Y%m%d%H%M%S.$$" --date=${msgat})-1-$(echo ${SMTP_SENDER} | sed 's|.*<\(.*\)>.*|\1|')> +Message-Id: <$(date "+%Y%m%d%H%M%S.$$" --date=${msgat})-1-$(echo ${SMTP_SENDER:-cygport} | sed 's|.*<\(.*\)>.*|\1|')> Subject: ${NAME} ${PVR} The following package${s} been uploaded to the Cygwin distribution: @@ -199,7 +221,30 @@ _EOF ${DESCRIPTION} _EOF - ${EDITOR:-vi} $msg || error "Editor exited abormally, aborting annoucement" + if [ "${ANNOUNCE_EDITOR+y}" = "y" ] + then + echo + inform "Launching '\${ANNOUNCE_EDITOR} ${msg}'" + [ -z "${ANNOUNCE_EDITOR}" ] || + __pkg_announce_run_cmd_on_msg ANNOUNCE_EDITOR ${msg} + else + ${EDITOR:-vi} ${msg} || error "Editor exited abnormally, aborting announcement" + fi + + if [ "${ANNOUNCE_TO_CMD+y}" = "y" ] + then + echo + inform "Launching '\${ANNOUNCE_TO_CMD} ${msg}'" + [ -z "${ANNOUNCE_TO_CMD}" ] || + __pkg_announce_run_cmd_on_msg ANNOUNCE_TO_CMD ${msg} + else + __pkg_announce_to_smtp ${msg} + fi + rm ${msg} +} + +__pkg_announce_to_smtp() { + local msg=$1 perl <(cat <quit(); print "Announcement sent\n"; EOF -) && rm $msg || error "Sending announcement failed, mbox is $msg" +) || error "Sending announcement failed, mbox is $msg" } # protect functions -readonly -f __pkg_upload __pkg_announce +readonly -f __pkg_upload __pkg_announce __pkg_announce_run_cmd_on_msg __pkg_announce_to_smtp -- 2.43.0