summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2020-01-18 10:52:53 -0500
committerbill-auger <mr.j.spam.me@gmail.com>2021-01-05 22:24:56 -0500
commitb3d871e4e82d372bbf8ad861248a5fd4f67c8ba4 (patch)
treeba8c42a45c88ca8d630529217bbfb0b39edeb847
parentc8fad9f922e846fb0ef2426f9c835f7e01ab13f3 (diff)
[packages-by]: initial script
-rw-r--r--src/maintenance-tools/packages-by30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/maintenance-tools/packages-by b/src/maintenance-tools/packages-by
new file mode 100644
index 0000000..ea9071b
--- /dev/null
+++ b/src/maintenance-tools/packages-by
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+readonly PACKAGESBY_USAGE="USAGE: packages-by [-d] [-s] <ARG>\n\tpass <ARG> to match against output lines of the form:\n\t\tPKGNAME ARCH/REPO YYYY-MM-DD-HH-MM NAME <EMAIL>\n\tpass arg: '-d' to sort by date\n\tpass arg: '-s' to show [SIGNATURE_NAME] in place of <EMAIL>"
+readonly SHOULD_SORT=$( [[ "$1" == '-d' ]] && echo 1 || echo 0 ) ; [[ "$1" == '-d' ]] && shift ;
+readonly SHOW_SIG_NAME=$( [[ "$1" == '-s' ]] && echo 1 || echo 0 ) ; [[ "$1" == '-s' ]] && shift ;
+readonly SHOULD_SORT=$( [[ "$1" == '-d' ]] && echo 1 || echo $SHOULD_SORT ) ; [[ "$1" == '-d' ]] && shift ;
+readonly SORT_CMD=$( (( $SHOULD_SORT )) && echo 'sort --key=3' || echo 'cat' )
+readonly TERM="$*" ; [[ -z "$TERM" ]] && echo -e ${PACKAGESBY_USAGE} && return 1 ;
+
+
+expac -S --config /etc/pacman.conf.all \
+ --timefmt="%Y-%m-%d-%R" "%n %a/%r %b %p %g" | \
+grep $TERM | column -t | $SORT_CMD | \
+while read pkg_data_raw
+do pkg_data=$( sed -E 's|(.+) <.*|\1| ' <<<$pkg_data_raw )
+ email=$( sed -E 's|.+ <([^>]*)>.*|\1| ' <<<$pkg_data_raw )
+ sig=$( sed -E 's|.+ ([^ ]+)|\1| ' <<<$pkg_data_raw )
+
+ if (( $SHOW_SIG_NAME ))
+ then keyid=$( base64 --decode <<<$sig | gpg --list-packets | grep keyid | cut -d ' ' -f 6 )
+ sig_name=$( pacman-key --list-keys $keyid 2> /dev/null | \
+ grep -E '^uid .*] [^<]* <' | head -n 1 | \
+ sed -E 's|^uid .*] ([^<]*) <.*|\1|' )
+
+ echo "$pkg_data [$sig_name]"
+ else echo "$pkg_data <$email>"
+ fi
+
+# echo -en "\npkg=$pkg_data\nsig=$sig\nkeyid=$keyid\n$( (( $SHOW_SIG_NAME )) && echo "sig_name=$sig_name" || echo "email=$email" )"
+done