From d13ea2efafcaea45961b43a736261fe35bf2a6e7 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 27 May 2013 12:45:40 -0400 Subject: libreblacklist: learn `-h` --- src/lib/libreblacklist | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) (limited to 'src/lib/libreblacklist') diff --git a/src/lib/libreblacklist b/src/lib/libreblacklist index 293f3ac..6876a2b 100755 --- a/src/lib/libreblacklist +++ b/src/lib/libreblacklist @@ -19,7 +19,7 @@ . $(librelib conf.sh) # Usage: blacklist-normalize <$file -# Normalizes the syntax of the blacklist on stdin. +# Normalizes the syntax of the blacklist on stdin blacklist-normalize() { sed -e 's/^[^:]*$/&::/' -e 's/^[^:]*:[^:]*$/&:/' } @@ -77,25 +77,61 @@ blacklist-lookup() { } # Usage: blacklist-cat | blacklist-get-pkg -# Outputs only the package name field of the blacklist line(s) on stdin. +# Prints only the package name field of the blacklist line(s) on stdin. blacklist-get-pkg() { blacklist-normalize | cut -d: -f1 } # Usage: blacklist-cat | blacklist-get-rep -# Outputs only the replacement package field of the blacklist line(s) on stdin. +# Prints only the replacement package field of the blacklist line(s) on stdin. blacklist-get-rep() { blacklist-normalize | cut -d: -f2 } # Usage: blacklist-cat | blacklist-get-reason -# Outputs only the reason field of the blacklist line(s) on stdin. +# Prints only the reason field of the blacklist line(s) on stdin. blacklist-get-reason() { blacklist-normalize | cut -d: -f3- } if [[ "${0##*/}" == libreblacklist ]]; then + usage-outside() { + sed -n '/^# Usage:/,/()/p' $0 | + tr '\n' '\r' | sed 's/\s*()\s*[{(]/\n/g' + } + usage-inside() { + sed 's/\r/\n/g'<<<"$1"|sed '/^$/d' + } + usage() { + if [[ $# == 0 ]]; then + printf "Usage: %s [-h] COMMAND [ARGUMENTS]\n" "${0##*/}" + echo "Tool for working with the nonfree software blacklist" + echo + echo "Commands:" + usage-outside | while read -r sec; do sec="$(usage-inside "$sec")" + <<<"$sec" sed -n \ + -e 's/blacklist-//g' \ + -e 's/^# //' \ + -e '2p;$p' | + tac|tr '\n' '\t' + echo + done|column -t -s"$(printf '\t')"|sed 's/^/ /' + else + usage-outside | while read -r sec; do sec="$(usage-inside "$sec")" + cmd=$(<<<"$sec" sed -n 's/.*blacklist[ -]//;$p') + if [[ "$cmd" == "$1" ]]; then + <<<"$sec" sed -n \ + -e "s/blacklist-/${0##*/} /g" \ + -e 's/^# //p' + fi + done + fi + } _blacklist_cmd=$1 shift - "blacklist-$_blacklist_cmd" "$@" + if [[ $_blacklist_cmd == -h ]]; then + usage "$@" + else + "blacklist-$_blacklist_cmd" "$@" + fi fi -- cgit v1.2.2