diff options
Diffstat (limited to 'src/lib')
-rwxr-xr-x[-rw-r--r--] | src/lib/blacklist.sh | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/lib/blacklist.sh b/src/lib/blacklist.sh index e02bbfa..664b5f3 100644..100755 --- a/src/lib/blacklist.sh +++ b/src/lib/blacklist.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -euE # Copyright (c) 2013 by Luke Shumaker <lukeshu@sbcglobal.net> # # This program is free software; you can redistribute it and/or modify @@ -17,20 +17,29 @@ # make sure XDG_CACHE_HOME is set . /usr/share/libretools/conf.sh +# Usage: blacklist-normalize <$file +# Normalizes the syntax of the blacklist on stdin. blacklist-normalize() { sed -e 's/^[^:]*$/&::/' -e 's/^[^:]*:[^:]*$/&:/' } +# Usage: blacklist-cat +# Prints the blacklist +# Uses the chache, but downloads it if it doesn't exist. Also normalizes the +# blacklist for easier parsing. blacklist-cat() { local file="$XDG_CACHE_HOME/libretools/blacklist.txt" if ! [[ -e $file ]]; then - blacklist-update + # exit on failure, whether set -e or not + blacklist-update || return $? fi blacklist-normalize < "$file" } +# Usage: blacklist-update +# Updates (or creates) the cached copy of the blacklist blacklist-update() ( - set -euE + set -euE # allow it to not be set globally . libremessages load_files libretools check_vars BLACKLIST @@ -57,19 +66,35 @@ blacklist-update() ( fi ) +# Usage: blacklist-cat | blacklist-lookup $pkgname +# Filters to obtain the line for $pkgname from the blacklist on stdin. +# Exits successfully whether a line is found or not. blacklist-lookup() { local pkg=$1 - blacklist-cat | sed 's/^/^/' | grep -F "^$pkg:" | sed 's/^^//' + # we accept that $pkg contains no regex-nes + blacklist-cat | grep "^$pkg:" || true } +# Usage: blacklist-{cat|lookup} | blacklist-get-pkg +# Outputs only the package name field of the blacklist line(s) on stdin. blacklist-get-pkg() { cut -d: -f1 } +# Usage: blacklist-{cat|lookup} | blacklist-get-rep +# Outputs only the replacement package field of the blacklist line(s) on stdin. blacklist-get-rep() { cut -d: -f2 } +# Usage: blacklist-{cat|lookup} | blacklist-get-reason +# Outputs only the reason field of the blacklist line(s) on stdin. blacklist-get-reason() { cut -d: -f3- } + +if [[ "${0##*/}" == libreblacklist ]]; then + _blacklist_cmd=$1 + shift + "blacklist-$_blacklist_cmd" "$@" +fi |