summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/lib/blacklist.sh19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/blacklist.sh b/src/lib/blacklist.sh
index e3d976b..c092ed3 100755
--- a/src/lib/blacklist.sh
+++ b/src/lib/blacklist.sh
@@ -93,7 +93,24 @@ blacklist-get-pkg() {
# Usage: blacklist-cat | blacklist-get-rep
# Prints only the replacement package field of the blacklist line(s) on stdin.
blacklist-get-rep() {
- blacklist-normalize | cut -d: -f2
+ local -a targets=($(blacklist-get-pkg))
+ expac -Ss '%r/%n %n %P %R' | awk -v arr="${targets[*]}" '
+ {
+ gsub("[=<>]+[^[:blank:]]*", "", $0) # discard versioning
+ # build pkg -> providers table from pkg -> provides
+ for (provided = 2; provided <= NF; ++provided) {
+ if (! seen[$1 " " $provided]++) {
+ providers[$provided] = providers[$provided] $1 " "
+ }
+ }
+ }
+ END {
+ split(arr, targets, " ")
+ for (pkg in targets) {
+ sub("[ \t]+$", "", providers[targets[pkg]])
+ print providers[targets[pkg]]
+ }
+ }'
}
# Usage: blacklist-cat | blacklist-get-url