Takashi Iwai f5044f
#!/bin/bash
Takashi Iwai f5044f
#
Takashi Iwai f5044f
# Scan the bug numbers in commit logs and check whether it's still embargoed
Takashi Iwai f5044f
#
Takashi Iwai f5044f
# Put me on pre-push git hook
Takashi Iwai f5044f
#
Takashi Iwai f5044f
Takashi Iwai f5044f
if [ ! -x /usr/bin/jq ]; then
Takashi Iwai f5044f
    echo >&2 "embargoed check: jq is not present, please install jq package"
Takashi Iwai f5044f
    exit 1
Takashi Iwai f5044f
fi
Takashi Iwai f5044f
Takashi Iwai f5044f
remote="$1"
Takashi Iwai f5044f
url="$2"
Takashi Iwai f5044f
Takashi Iwai f5044f
z40=0000000000000000000000000000000000000000
Takashi Iwai f5044f
Takashi Iwai f5044f
jsonf="$(mktemp)" || exit 1
Takashi Iwai f5044f
trap "rm \"$jsonf\"" 0 1 2 3 15
Takashi Iwai f5044f
Takashi Iwai f5044f
curl -s -o "$jsonf" https://smash.suse.de/api/embargoed-bugs/ || exit 1
Takashi Iwai f5044f
Takashi Iwai f5044f
ids=$(jq -r '.[].bug.name | capture("^bnc#(?<id>[[:digit:]]+)").id' "$jsonf") \
Takashi Iwai f5044f
	|| exit 1
Takashi Iwai f5044f
Takashi Iwai f5044f
declare -A emb_bugs
Takashi Iwai f5044f
for e in $ids; do
Takashi Iwai f5044f
    emb_bugs[$e]=1
Takashi Iwai f5044f
done
Takashi Iwai f5044f
Takashi Iwai f5044f
while read local_ref local_sha remote_ref remote_sha
Takashi Iwai f5044f
do
Takashi Iwai f5044f
    test "$local_sha" = $z40 && continue
Takashi Iwai f5044f
    case "$remote_ref" in
Takashi Iwai 255306
	*_EMBARGO/*|*_EMBARGO)
Takashi Iwai f5044f
	    continue;;
Takashi Iwai f5044f
	refs/heads/users/*/for-next)
Takashi Iwai f5044f
	    base=${remote_ref#refs/heads/users/*/}
Takashi Iwai f5044f
	    base=${base%/*}
Takashi Iwai f5044f
	    ;;
Takashi Iwai f5044f
	refs/heads/cve-*|refs/heads/SLE*|refs/heads/openSUSE*)
Takashi Iwai f5044f
	    base=${remote_ref#refs/heads/}
Takashi Iwai f5044f
	    ;;
Takashi Iwai f5044f
	*)
Takashi Iwai f5044f
	    continue;;
Takashi Iwai f5044f
    esac
Takashi Iwai f5044f
Takashi Iwai f5044f
    if [ "$remote_sha" = $z40 ]; then
Takashi Iwai f5044f
	range="refs/remotes/origin/$base..$local_sha"
Takashi Iwai f5044f
    else
Takashi Iwai f5044f
	range="$remote_sha..$local_sha"
Takashi Iwai f5044f
    fi
Takashi Iwai f5044f
    bugs=$(git log "$range" | grep -E '\(bsc|bnc|boo)#?[0-9]\+' | sed -e's/[^a-z0-9#]/ /g')
Takashi Iwai f5044f
    test -z "$bugs" && continue
Takashi Iwai f5044f
    for w in $bugs; do
Takashi Iwai f5044f
	case "$w" in
Takashi Iwai f5044f
	    bnc\#[0-9]*|bsc\#[0-9]*|boo\#[0-9]*)
Takashi Iwai f5044f
		bug=${w#b*#}
Takashi Iwai f5044f
		if [ -n "${emb_bugs[$bug]}" ]; then
Takashi Iwai f5044f
		    echo >&2 "Found EMABARGO bug (in bsc#$bug) at $local_ref, not pushing"
Takashi Iwai f5044f
		    exit 1
Takashi Iwai f5044f
		fi
Takashi Iwai f5044f
	esac
Takashi Iwai f5044f
    done
Takashi Iwai f5044f
done
Takashi Iwai f5044f
Takashi Iwai f5044f
exit 0