public inbox for cygwin-apps@cygwin.com
 help / color / mirror / Atom feed
* [PATCH cygport] Add customization support for announce command
@ 2024-02-21 14:52 Christian Franke
  2024-02-23 11:23 ` Christian Franke
  0 siblings, 1 reply; 9+ messages in thread
From: Christian Franke @ 2024-02-21 14:52 UTC (permalink / raw)
  To: cygwin-apps

[-- Attachment #1: Type: text/plain, Size: 1030 bytes --]

The email generated by the cygport announce command is useful, but 
actual use cases are somewhat limited due to the hard-coded email 
submission.

The attached patch adds more flexibility. The patch is on top of the 
"Use correct wording if only one package is announced" patch.

Examples for cygport.conf settings:

ANNOUNCE_EDITOR='printf "\\nRegards,\\n$PN package maintainer\\n" >>"$1"'

ANNOUNCE_EDITOR='
n=$(wc -l <"$1") && cat >>"$1" <<EOF &&

   >>> This is an update to the latest upstream release.
   >>> This is a bugfix release.
   <<< PLEASE EDIT >>>

Regards,
$PN package maintainer
EOF
vim +$((n+2)) "$1" && ! grep -E "<<<|>>>" "$1"
'

ANNOUNCE_TO_CMD='cat "$1" >/dev/clipboard'

ANNOUNCE_TO_CMD='
sed "1,/^\$/d" "$1" >$PF-announcement.txt &&
echo "Announcement placed here: $(pwd)/$PF-announcement.txt"
'

ANNOUNCE_TO_CMD='
/usr/local/sbin/custom-mailer \
   --sender="$SMTP_SENDER" \
   --smarthost="$SMTP_SERVER" \
   ...more...options... \
   cygwin-announce@cygwin.com <"$1"
'

-- 
Regards,
Christian


[-- Attachment #2: 0001-Add-customization-support-for-announce-command.patch --]
[-- Type: text/plain, Size: 4637 bytes --]

From 1f13d54a40d639938fb67245eed4615be0a6e6c4 Mon Sep 17 00:00:00 2001
From: Christian Franke <christian.franke@t-online.de>
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 <user@domain>" 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 <<EOF
 use strict;
@@ -242,8 +287,8 @@ if (defined \$smtp_user) {
 \$smtp->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


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-05-01 21:00 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-21 14:52 [PATCH cygport] Add customization support for announce command Christian Franke
2024-02-23 11:23 ` Christian Franke
2024-03-10 14:37   ` Jon Turney
2024-03-10 16:33     ` Christian Franke
2024-04-29 19:37       ` Jon Turney
2024-04-30 10:27         ` Christian Franke
2024-05-01 12:50           ` Adam Dinwoodie
2024-05-01 14:49             ` Christian Franke
2024-05-01 21:00               ` Adam Dinwoodie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).