diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2020-01-18 10:52:53 -0500 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2021-01-05 22:24:56 -0500 |
commit | b3d871e4e82d372bbf8ad861248a5fd4f67c8ba4 (patch) | |
tree | ba8c42a45c88ca8d630529217bbfb0b39edeb847 | |
parent | c8fad9f922e846fb0ef2426f9c835f7e01ab13f3 (diff) |
[packages-by]: initial script
-rw-r--r-- | src/maintenance-tools/packages-by | 30 |
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 |