summaryrefslogtreecommitdiff
path: root/src/maintenance-tools/packages-by
blob: 9a3de52fe84fc9eabd9a2a935dc18c662efdd2c8 (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
#!/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 ;

# 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}" )

(( DEBUG )) && echo -e "pkg_data=$pkg_data\nemail=$email\nsig=$sig\nkey_id=$key_id" >&2

      echo "${pkg_data} <${email}> [${key_id}]"

(( DEBUG )) && break

done | tee >(echo "($(wc -l)) packages")