summaryrefslogtreecommitdiffstats
path: root/scripts/pts-subscribe.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/pts-subscribe.sh')
-rwxr-xr-xscripts/pts-subscribe.sh176
1 files changed, 176 insertions, 0 deletions
diff --git a/scripts/pts-subscribe.sh b/scripts/pts-subscribe.sh
new file mode 100755
index 0000000..b964f4d
--- /dev/null
+++ b/scripts/pts-subscribe.sh
@@ -0,0 +1,176 @@
+#!/bin/bash
+set -e
+
+# Subscribe to the PTS for a specified package for a limited length of time
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] package
+ Subscribe to the PTS (Package Tracking System) for the specified package
+ for a limited length of time (30 days by default).
+
+ If called as 'pts-unsubscribe', unsubscribe from the PTS for the specified
+ package.
+
+ Options:
+ -u, --until UNTIL
+ When to unsubscribe; this is given as the command-line
+ argument to at (default: 'now + 30 days')
+
+ --until 0, --until forever are synonyms for --forever
+
+ --forever Do not set an at job for unsubscribing
+
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+
+ --help Display this help message and exit
+
+ --version Display version information
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2006 by Julian Gilbey, all rights reserved.
+Original public domain code by Raphael Hertzog.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+ACTION="subscribe"
+if [ "$PROGNAME" = "pts-unsubscribe" ]; then
+ ACTION="unsubscribe"
+fi
+
+# Boilerplate: set config variables
+DEFAULT_PTS_UNTIL='now + 30 days'
+VARS="PTS_UNTIL"
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep '^PTS_')
+
+ # check sanity - nothing to do here (at will complain if it's illegal)
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+# Will bomb out if there are unrecognised options
+TEMP=$(getopt -s bash -o "u:" \
+ --long until:,forever \
+ --long no-conf,noconf \
+ --long help,version -n "$PROGNAME" -- "$@") || (usage >&2; exit 1)
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+ --until|-u)
+ shift
+ PTS_UNTIL="$1"
+ ;;
+ --forever)
+ PTS_UNTIL="forever" ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+# Still going?
+if [ $# -ne 1 ]; then
+ echo "$PROGNAME takes precisely one non-option argument: the package name;" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+fi
+
+# Check for a "mail" command
+if ! command -v mail > /dev/null; then
+ echo "$PROGNAME: Could not find the \"mail\" command; you must have the" >&2
+ echo "bsd-mailx or mailutils package installed to run this script." >&2
+ exit 1
+fi
+
+pkg=$1
+
+if [ -z "$DEBEMAIL" ]; then
+ if [ -z "$EMAIL" ]; then
+ echo "$PROGNAME warning: \$DEBEMAIL is not set; attempting to $ACTION anyway" >&2
+ else
+ echo "$PROGNAME warning: \$DEBEMAIL is not set; using \$EMAIL instead" >&2
+ DEBEMAIL=$EMAIL
+ fi
+fi
+DEBEMAIL=$(echo $DEBEMAIL | sed -s 's/^.*[ ]<\(.*\)>.*/\1/')
+
+if [ "$ACTION" = "unsubscribe" ]; then
+ echo "$ACTION $pkg $DEBEMAIL" | mail pts@qa.debian.org
+else
+ # Check for an "at" command
+ if [ "$PTS_UNTIL" != forever -a "$PTS_UNTIL" != 0 ]; then
+ if ! command -v at > /dev/null; then
+ echo "$PROGNAME: Could not find the \"at\" command; you must have the" >&2
+ echo "\"at\" package installed to run this script." >&2
+ exit 1
+ fi
+
+ cd /
+ TEMPFILE=$(mktemp --tmpdir pts-subscribe.tmp.XXXXXXXXXX) || { echo "$PROGNAME: Couldn't create tempfile!" >&2; exit 1; }
+ trap 'rm -f "$TEMPFILE"' EXIT
+ echo "echo 'unsubscribe $pkg $DEBEMAIL' | mail pts@qa.debian.org" | \
+ at $PTS_UNTIL 2>$TEMPFILE
+ grep '^job ' $TEMPFILE | sed -e 's/^/Unsubscription will be sent by "at" as /'
+ else
+ echo "No unsubscription request will be sent"
+ fi
+
+ echo "$ACTION $pkg $DEBEMAIL" | mail pts@qa.debian.org
+fi