mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-15 14:26:33 +01:00
74 lines
1.5 KiB
Bash
74 lines
1.5 KiB
Bash
|
#!/usr/bin/env nix-shell
|
||
|
#!nix-shell -i bash -p jq ncurses
|
||
|
# shellcheck shell=bash
|
||
|
|
||
|
# Get a nixpkgs maintainer's metadata as a JSON object
|
||
|
# see HELP_MESSAGE just below, or README.md.
|
||
|
|
||
|
set -euo pipefail
|
||
|
|
||
|
declare -A SELECTORS=( [handle]= [email]= [github]= [githubId]= [matrix]= [name]= )
|
||
|
HELP_MESSAGE="usage: '$0' [selector] value
|
||
|
examples:
|
||
|
get-maintainer.sh nicoo
|
||
|
get-maintainer.sh githubId 1155801
|
||
|
|
||
|
\`selector\` defaults to 'handle', can be one of:
|
||
|
${!SELECTORS[*]}
|
||
|
"
|
||
|
|
||
|
MAINTAINERS_DIR="$(dirname "$0")/.."
|
||
|
|
||
|
die() {
|
||
|
tput setaf 1 # red
|
||
|
echo "'$0': $*"
|
||
|
tput setaf 0 # back to black
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
listAsJSON() {
|
||
|
nix-instantiate --eval --strict --json "${MAINTAINERS_DIR}/maintainer-list.nix"
|
||
|
}
|
||
|
|
||
|
parseArgs() {
|
||
|
[ $# -gt 0 -a $# -lt 3 ] || {
|
||
|
echo "$HELP_MESSAGE"
|
||
|
die "invalid number of arguments (must be 1 or 2)"
|
||
|
}
|
||
|
|
||
|
if [ $# -eq 1 ]; then
|
||
|
selector=handle
|
||
|
else
|
||
|
selector="$1"
|
||
|
shift
|
||
|
fi
|
||
|
[ -z "${SELECTORS[$selector]-n}" ] || {
|
||
|
echo "Valid selectors are:" "${!SELECTORS[@]}" >&2
|
||
|
die "invalid selector '$selector'"
|
||
|
}
|
||
|
|
||
|
value="$1"
|
||
|
shift
|
||
|
}
|
||
|
|
||
|
query() {
|
||
|
# explode { a: A, b: B, ... } into A + {handle: a}, B + {handle: b}, ...
|
||
|
local explode="to_entries[] | .value + { \"handle\": .key }"
|
||
|
|
||
|
# select matching items from the list
|
||
|
# TODO(nicoo): Support approximate matching for `name` ?
|
||
|
local select
|
||
|
case "$selector" in
|
||
|
githubId)
|
||
|
select="select(.${selector} == $value)"
|
||
|
;;
|
||
|
*)
|
||
|
select="select(.${selector} == \"$value\")"
|
||
|
esac
|
||
|
|
||
|
echo "$explode | $select"
|
||
|
}
|
||
|
|
||
|
parseArgs "$@"
|
||
|
listAsJSON | jq -e "$(query)"
|