From ec1bac6428c274401c4d54e916024a0ace3cce17 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 11 Jun 2018 10:37:07 +0200 Subject: bin/interpret-mail can now prioritize build assignments --- bin/prioritize-build-list | 93 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 17 deletions(-) (limited to 'bin/prioritize-build-list') diff --git a/bin/prioritize-build-list b/bin/prioritize-build-list index bbeb288..26197e4 100755 --- a/bin/prioritize-build-list +++ b/bin/prioritize-build-list @@ -5,26 +5,74 @@ # shellcheck source=../lib/load-configuration . "${0%/*}/../lib/load-configuration" +usage() { + >&2 echo '' + >&2 echo 'Usage: prioritize-build-list [options] pkg-regex-file' + >&2 echo ' moves packages matching any pkg-regex in pkg-regex-file' + >&2 echo ' to front of build list' + >&2 echo '' + >&2 echo 'possible options:' + >&2 echo ' -h|--help:' + >&2 echo ' Show this help and exit.' + >&2 echo ' -w|--wait:' + >&2 echo ' Wait for lock if necessary.' + [ -z "$1" ] && exit 1 || exit "$1" +} + +eval set -- "$( + getopt -o hw \ + --long help \ + --long wait \ + -n "$(basename "$0")" -- "$@" || \ + echo usage + )" + +wait_for_lock='-n' + +while true +do + case "$1" in + -h|--help) + usage 0 + ;; + -w|--wait) + wait_for_lock='' + ;; + --) + shift + break + ;; + *) + >&2 echo 'Whoops, forgot to implement option "'"$1"'" internally.' + exit 42 + ;; + esac + shift +done + if [ $# -ne 1 ]; then - echo 'Usage: prioritize-build-list pkg-regex' - echo ' moves packages matching pkg-regex to front of build list' - exit 2 + >&2 echo 'No package-regex-list was given.' + usage fi -# Create a lock file for build list. - -exec 9> "${build_list_lock_file}" -if ! verbose_flock -n 9; then - >&2 echo 'come back (shortly) later - I cannot lock build list.' - exit 1 +if [ ! -r "$1" ]; then + >&2 printf 'Package-list "%s" is not readable.\n' "$1" + usage fi -exec 8> "${sanity_check_lock_file}" -if ! verbose_flock -s -n 8; then - >&2 echo 'come back (shortly) later - sanity-check running.' - exit 1 +if [ ! -s "$1" ]; then + >&2 echo 'Empty regex file - nothing to do here.' + exit fi +# Create a lock file for build list. + +exec 9> "${sanity_check_lock_file}" +verbose_flock -s ${wait_for_lock} 9 + +exec 8> "${build_list_lock_file}" +verbose_flock ${wait_for_lock} 8 + # shellcheck disable=SC2016 { printf 'UPDATE `build_assignments`' @@ -39,11 +87,22 @@ fi printf ' FROM `build_assignments` AS `others`' printf ') AS `all_priorities`' printf ')' - printf ' WHERE `package_sources`.`pkgbase` REGEXP from_base64("%s")' \ - "$(printf '%s' "$1" | base64 -w0)" - printf ' AND `repositories`.`name`="build-list";\n' + printf ' WHERE (' + base64_encode_each < "$1" | \ + sed ' + s/^/`package_sources`.`pkgbase` REGEXP from_base64("/ + s/$/") OR / + $ s/ OR $// + ' + printf ') AND `repositories`.`name`="build-list";\n' + printf 'SELECT row_count();\n' } | \ - mysql_run_query + mysql_run_query | \ + if [ -w "$1" ]; then + cat > "$1" + else + cat >&2 + fi # Remove the lock file -- cgit v1.2.3