summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rwxr-xr-x[-rw-r--r--]src/lib/blacklist.sh33
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