blob: fe76640c7cf7c651446217c0916bda501cc11f52 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#!/bin/bash
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' )
# 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 HACKER_EMAIL=${HACKERS_EMAILS[$*]}
readonly SORT_CMD=$( (( SHOULD_SORT )) && echo 'sort --key=3' || echo 'cat' )
readonly TERM="$( [[ -n "${HACKER_EMAIL}" ]] && echo ${HACKER_EMAIL} || echo "$@" )"
[[ -z "${TERM}" ]] && echo -e "${USAGE}" && exit 1 ;
DBG() { (( DEBUG )) && echo -e "$dbg" >&2 ; }
DBG "SHOULD_SORT=$SHOULD_SORT\nTERM=$TERM"
# collect results
expac -S --config ${PACMAN_CONF_FILE} --timefmt="${EXPAC_TIME_FMT}" "${EXPAC_FMT}" | \
grep -E "${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} )
key_id=$( base64 --decode <<<${sig} | gpg --list-packets | sed -E "${KEYID_SED_CMD}" )
echo "${pkg_data} <${email}> [${key_id}]"
DBG "pkg_data=$pkg_data\nemail=$email\nsig=$sig\nkey_id=$key_id" ; (( DEBUG )) && break ;
done | tee >(echo "($(wc -l)) packages")
|