#!/bin/bash -euE # Copyright (c) 2013 by Luke Shumaker # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # 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 # 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 # allow it to not be set globally . libremessages load_files libretools check_vars BLACKLIST local remote_blacklist="$BLACKLIST" local local_blacklist="$XDG_CACHE_HOME/libretools/blacklist.txt" stat_busy "Downloading blacklist of proprietary software packages" mkdir -p "${local_blacklist%/*}" if wget -N -q -O "${local_blacklist}.part" "$remote_blacklist" 2>/dev/null; then stat_done mv "${local_blacklist}.part" "$local_blacklist" else stat_done rm "${local_blacklist}.part" if [[ -e "$local_blacklist" ]]; then warning "Using local copy of blacklist" else error "Download failed, exiting" return 1 fi 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 # 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