summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2020-11-24 23:50:52 -0500
committerbill-auger <mr.j.spam.me@gmail.com>2021-01-05 22:24:56 -0500
commitaed39fd252467d78d869ffcbc3c20073c9dac572 (patch)
treec783f5cd5fad2e8f3f6758001a78567a287d3c5a
parentb3d871e4e82d372bbf8ad861248a5fd4f67c8ba4 (diff)
[packages-by]: wip - improvements
-rwxr-xr-x[-rw-r--r--]src/maintenance-tools/packages-by60
1 files changed, 38 insertions, 22 deletions
diff --git a/src/maintenance-tools/packages-by b/src/maintenance-tools/packages-by
index ea9071b..0837f99 100644..100755
--- a/src/maintenance-tools/packages-by
+++ b/src/maintenance-tools/packages-by
@@ -1,30 +1,46 @@
#!/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 ;
+readonly DEBUG=0
+readonly PACMAN_CONF_FILE=/etc/pacman-all.conf
+readonly USAGE="USAGE:\n\tpackages-by [-d] [-n] <TERM>\n\nDESCRIPTION:\n\t<TERM> will be matched against expac output lines of the form:\n\t\tPKGNAME ARCH/REPO YYYY-MM-DD-HH:MM PACKAGER_NAME <PACKAGER_EMAIL> BASE64_SIG\n\nOPTIONS:\n\t-d -> sort by date\n\t-n -> show usage help"
+readonly EXPAC_TIME_FMT='%Y-%m-%d-%R'
+readonly EXPAC_FMT='%n %a/%r %b %p %g'
+readonly KEYID_SED_CMD='s|.*([0-9A-F]{40})\)$|\1|p ; d'
+# convenience lookup dict (login->email) # TODO: incomplete
+declare -r -A HACKERS_EMAILS=( [bill-auger]='bill-auger@peers.community' \
+ [oaken-source]='andreas@grapentin.org' )
-expac -S --config /etc/pacman.conf.all \
- --timefmt="%Y-%m-%d-%R" "%n %a/%r %b %p %g" | \
-grep $TERM | column -t | $SORT_CMD | \
+# collect CLI options
+SHOULD_SORT=0
+while getopts 'dh' opt
+do case ${opt} in
+ d) SHOULD_SORT=1 ;;
+ h) echo -e "${USAGE}" ;;
+ *) echo -e "Invalid argument\n${USAGE}" ; exit 1 ;;
+ esac
+done
+shift $(( OPTIND - 1 ))
+readonly SHOULD_SORT
+readonly SORT_CMD=$( (( SHOULD_SORT )) && echo 'sort --key=3' || echo 'cat' )
+readonly TERM="$*" ; [[ -z "${TERM}" ]] && echo -e "${USAGE}" && exit 1 ;
+
+(( DEBUG )) && echo -e "SHOULD_SORT=$SHOULD_SORT\nTERM=$TERM" >&2
+
+
+# collect results
+expac -S --config ${PACMAN_CONF_FILE} --timefmt="${EXPAC_TIME_FMT}" "${EXPAC_FMT}" | \
+grep -E "${TERM}|${HACKERS_EMAILS[${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 )
+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} )
+ key_id=$( base64 --decode <<<${sig} | gpg --list-packets | sed -E "${KEYID_SED_CMD}" )
- 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|' )
+(( DEBUG )) && echo -e "pkg_data=$pkg_data\nemail=$email\nsig=$sig\nkey_id=$key_id" >&2
- echo "$pkg_data [$sig_name]"
- else echo "$pkg_data <$email>"
- fi
+ echo "${pkg_data} <${email}> [${key_id}]"
-# echo -en "\npkg=$pkg_data\nsig=$sig\nkeyid=$keyid\n$( (( $SHOW_SIG_NAME )) && echo "sig_name=$sig_name" || echo "email=$email" )"
-done
+(( DEBUG )) && break
+
+done | tee >(echo "($(wc -l)) packages")