Merge pull request #36 from kristianwind/case-not-grep-q
Replace the two growing `| grep -q` checks with `case`
This commit is contained in:
+16
-3
@@ -200,12 +200,25 @@ if [ -z "$feed" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf '%s' "$feed" | grep -q '"browser_download_url"' || {
|
||||
# `case`, not `printf … | grep -q`. Under `set -o pipefail` a grep that
|
||||
# MATCHES can make the pipeline exit 141: grep closes the pipe on the first
|
||||
# hit and the producer takes SIGPIPE, which pipefail reports as failure. So a
|
||||
# match becomes an error, in the publishing path, with a message saying the
|
||||
# feed has no download URL when it plainly does.
|
||||
#
|
||||
# Not reachable today — the feed is 3.5 KB and the pipe buffer is 64 KB — but
|
||||
# it grows about 1.9 KB per release, so it arrives around release 34. A bug on
|
||||
# a timer is worse than a bug, because nothing about the commit that trips it
|
||||
# will have anything to do with it. `case` has no pipe, no fork and no
|
||||
# producer to signal.
|
||||
case "$feed" in
|
||||
*'"browser_download_url"'*) ;;
|
||||
*)
|
||||
echo
|
||||
ci_fail "The release is readable, but it has no zip attached. WordPress would be offered an update it cannot download."
|
||||
exit 1
|
||||
}
|
||||
|
||||
;;
|
||||
esac
|
||||
# Checked at the address the PLUGIN builds, not the one the API reports.
|
||||
#
|
||||
# A forge fills browser_download_url from its own configured root URL, which is
|
||||
|
||||
+9
-2
@@ -122,8 +122,15 @@ for path in $referenced; do
|
||||
case "$path" in */*) ;; *) continue ;; esac
|
||||
[ -d "${path%%/*}" ] || continue
|
||||
checked=$((checked + 1))
|
||||
printf '%s\n' "$shipped" | grep -qx "$path" \
|
||||
|| note_fail "The code loads '$path', but the release zip does not contain it. Committed?"
|
||||
# `case` rather than piping the list into grep -qx: under pipefail a grep
|
||||
# that matches can exit 141 when the producer is signalled, so a HIT becomes
|
||||
# a failure. The list is small today and this loop runs once per include, so
|
||||
# this also drops a fork per iteration. Newlines on both sides make it an
|
||||
# exact line match, which is what -qx gave.
|
||||
case $'\n'"$shipped"$'\n' in
|
||||
*$'\n'"$path"$'\n'*) ;;
|
||||
*) note_fail "The code loads '$path', but the release zip does not contain it. Committed?" ;;
|
||||
esac
|
||||
done
|
||||
if [ "$checked" = 0 ]; then
|
||||
# A check that verifies nothing must say so rather than reporting success.
|
||||
|
||||
Reference in New Issue
Block a user