summaryrefslogtreecommitdiffstats
path: root/scripts/wnpp-check.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 20:32:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 20:32:59 +0000
commit4d57e0a8dab2139a631a21aab862487481548702 (patch)
treef7cea0b9939e2ecb7a301de6c83bada29452046d /scripts/wnpp-check.sh
parentInitial commit. (diff)
downloaddevscripts-4d57e0a8dab2139a631a21aab862487481548702.tar.xz
devscripts-4d57e0a8dab2139a631a21aab862487481548702.zip
Adding upstream version 2.23.7.upstream/2.23.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'scripts/wnpp-check.sh')
-rwxr-xr-xscripts/wnpp-check.sh104
1 files changed, 104 insertions, 0 deletions
diff --git a/scripts/wnpp-check.sh b/scripts/wnpp-check.sh
new file mode 100755
index 0000000..6409be5
--- /dev/null
+++ b/scripts/wnpp-check.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+# wnpp-check -- check for software being packaged or requested
+
+# This script is in the PUBLIC DOMAIN.
+# Authors:
+# David Paleino <d.paleino@gmail.com>
+#
+# Adapted from wnpp-alert, by Arthur Korn <arthur@korn.ch>
+
+set -e
+
+CURLORWGET=""
+GETCOMMAND=""
+EXACT=0
+PROGNAME=${0##*/}
+
+usage() { echo \
+"Usage: $PROGNAME <package name> [...]
+ -e,--exact Require an exact package name match,
+ rather than the default substring match.
+
+ -h,--help Show this help message
+ -v,--version Show a version message
+
+ Check whether a package is listed as being packaged (ITPed) or has an
+ outstanding request for packaging (RFP) on the WNPP website
+ https://www.debian.org/devel/wnpp/"
+}
+
+version() { echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This script is in the PUBLIC DOMAIN.
+Authors: David Paleino <d.paleino@gmail.com>
+Adapted from wnpp-alert, by Arthur Korn <arthur@korn.ch>,
+with modifications by Julian Gilbey <jdg@debian.org>"
+}
+
+TEMP=$(getopt -n "$PROGNAME" -o 'hve' \
+ -l 'help,version,exact' \
+ -- "$@") || (rc=$?; usage >&2; exit $rc)
+
+eval set -- "$TEMP"
+
+while true
+do
+ case "$1" in
+ -h|--help) usage; exit 0 ;;
+ -v|--version) version; exit 0 ;;
+ -e|--exact) EXACT=1 ;;
+ --) shift; break ;;
+ esac
+ shift
+done
+
+if [ -z "$1" ]; then
+ usage
+ exit 1
+fi
+
+PACKAGES="$@"
+
+if command -v wget > /dev/null; then
+ CURLORWGET="wget"
+ GETCOMMAND="wget -q -O"
+elif command -v curl >/dev/null; then
+ CURLORWGET="curl"
+ GETCOMMAND="curl -qfsL -o"
+else
+ echo "$PROGNAME: need either the wget or curl package installed to run this" >&2
+ exit 1
+fi
+
+WNPP=$(mktemp --tmpdir wnppcheck-wnpp.XXXXXX)
+WNPPTMP=$(mktemp --tmpdir wnppcheck-wnpp.XXXXXX)
+WNPP_PACKAGES=$(mktemp --tmpdir wnppcheck-wnpp_packages.XXXXXX)
+trap 'rm -f "$WNPP" "$WNPPTMP" "$WNPP_PACKAGES"' EXIT
+
+# Here's a really sly sed script. Rather than first grepping for
+# matching lines and then processing them, this attempts to sed
+# every line; those which succeed execute the 'p' command, those
+# which don't skip over it to the label 'd'
+
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/being_packaged || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/being_packaged failed." >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/ITP \1 \2 -- \3/; T d; p; : d' $WNPPTMP > $WNPP
+
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/requested || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/requested failed." >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFP \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+awk -F' ' '{print "("$1" - #"$2") https://bugs.debian.org/"$2" "$3}' $WNPP | sort -k 5 > $WNPP_PACKAGES
+
+FOUND=0
+for pkg in $PACKAGES
+do
+ if [ $EXACT != 1 ]; then
+ grep $pkg $WNPP_PACKAGES && FOUND=1
+ else
+ grep " $pkg$" $WNPP_PACKAGES && FOUND=1
+ fi
+done
+
+exit $FOUND