diff options
author | Luke T. Shumaker <lukeshu@parabola.nu> | 2024-02-21 14:44:39 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@parabola.nu> | 2024-02-21 14:44:39 -0700 |
commit | 15aae08d0f4e2858611fcf73c361cd8641f0b4d3 (patch) | |
tree | cd7cc3b7fd4348c78fe093e8f3660c4650389e18 | |
parent | 3bf33e25b2ce0fbbcd0e4bac27d8a3e7e0a7e34c (diff) |
fix: pkgbuild-check-nonfree, blacklist.sh: Get the check-nonfree tests passing
-rwxr-xr-x | src/lib/blacklist.sh | 33 | ||||
-rwxr-xr-x | src/pkgbuild-check-nonfree | 32 | ||||
-rw-r--r-- | test/cases/lib-blacklist.bats | 6 | ||||
-rw-r--r-- | test/cases/pkgbuild-check-nonfree.bats | 3 |
4 files changed, 44 insertions, 30 deletions
diff --git a/src/lib/blacklist.sh b/src/lib/blacklist.sh index 84333e8..d36502e 100755 --- a/src/lib/blacklist.sh +++ b/src/lib/blacklist.sh @@ -99,24 +99,21 @@ 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() { - 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]] - } - }' + # TODO(lukeshu): I am confident that this could be done more + # efficiently with Python+pyalpm than with awk+expac. + blacklist-normalize | awk -F: ' + # trust blacklist.txt for packages re-packaged with the same name + # (otherwise there would be a bootstrapping problem). + $2 == $1 { + print $2 + } + # but otherwise, do not trust blacklist.txt to have an accurate + # state of the repos and what replacements exist. + $2 != $1 { + cmd="expac -S '\''%r/%n %P : %R '\'' | sed -E '\''s/[=<>]+\\S*//g'\'' | grep '\'' " $1 " .*:.* " $1 " '\'' | awk '\''{print $1}'\''" + cmd | getline rep + print rep + }' } # Usage: blacklist-cat | blacklist-get-url diff --git a/src/pkgbuild-check-nonfree b/src/pkgbuild-check-nonfree index 6215f36..6bec280 100755 --- a/src/pkgbuild-check-nonfree +++ b/src/pkgbuild-check-nonfree @@ -221,15 +221,29 @@ check_dep() { # Checks for ${pkgname} in the blacklist check_pkg() { [[ $# == 1 ]] || panic 'malformed call to check_pkg' - check_dep "$@" - case $? in - $_E_OK) - return $_E_OK;; - $_E_DEP_NONFREE) - return $_E_PKG_NONFREE;; - *) - panic 'unexpected return code from check_dep';; - esac + local pkg=$1 + + local line rep + line="$(blacklist-cat|blacklist-lookup "$pkg")" + rep="$(blacklist-get-rep <<<"$line")" + if [[ -z $line ]]; then + # not mentioned in blacklist; free + info '%s: not blacklisted' "$pkg" + return $_E_OK + elif [[ -z $rep ]]; then + # non-free with no replacement + plain '%s: blacklisted' "$pkg" + return $_E_PKG_NONFREE + else + # non-free with free replacement + if [[ "$rep" == "$pkg" ]]; then + info '%s: repackaged with the same name' "$pkg" + return $_E_OK + else + info '%s: replaced by %s (update blacklist.txt first if you would like to repackage it with the same name)' "$pkg" "$rep" + return $_E_PKG_NONFREE + fi + fi panic 'code should never be reached' } diff --git a/test/cases/lib-blacklist.bats b/test/cases/lib-blacklist.bats index 2388b15..ba74d04 100644 --- a/test/cases/lib-blacklist.bats +++ b/test/cases/lib-blacklist.bats @@ -130,3 +130,9 @@ load ../lib/common [[ "$(sed 1q $tmpdir/stdout)" == 'Usage: libreblacklist cat' ]] empty $tmpdir/stderr } + +@test "libreblacklist checks for replacements from the repos" { + libreblacklist get-rep <<<'linux' >$tmpdir/stdout 2>$tmpdir/stderr + [[ "$(cat $tmpdir/stdout)" == 'libre/linux-libre' ]] + empty $tmpdir/stderr +} diff --git a/test/cases/pkgbuild-check-nonfree.bats b/test/cases/pkgbuild-check-nonfree.bats index 15ef332..ffd8de8 100644 --- a/test/cases/pkgbuild-check-nonfree.bats +++ b/test/cases/pkgbuild-check-nonfree.bats @@ -114,7 +114,6 @@ declare -rig EXIT_FAILURE=1 # _E_DEP_NONFREE @test "pkgbuild-check-nonfree succeeds for repackaged depend" { - skip # FIXME/BUG pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.dep-repackaged >$tmpdir/stdout 2>$tmpdir/stderr || status=$? empty $tmpdir/stdout not empty $tmpdir/stderr @@ -143,14 +142,12 @@ declare -rig EXIT_FAILURE=1 # _E_PKG_NONFREE @test "pkgbuild-check-nonfree succeeds for repackaged package" { - skip # FIXME/BUG pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.pkg-repackaged >$tmpdir/stdout 2>$tmpdir/stderr || status=$? empty $tmpdir/stdout not empty $tmpdir/stderr [[ $status == $_E_OK ]] } @test "pkgbuild-check-nonfree fails for package with replacement" { - skip # FIXME/BUG pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.pkg-nonfree-replacement >$tmpdir/stdout 2>$tmpdir/stderr || status=$? empty $tmpdir/stdout not empty $tmpdir/stderr |