| #!/usr/bin/env bash | 
 |  | 
 | usage() { | 
 |     cat <<EOF | 
 |   query_suite run -h <host> -i <suite_dir> -o <output_dir> [-s <suite>] | 
 |  | 
 |   Run query test suites | 
 |  | 
 |   A query test suite must be a subdirectory of suite_dir and contain | 
 |   either files with queries in them, or if the suite name looks like | 
 |   "values_operator", the files must contain values for the operator | 
 |   instead of full queries. | 
 |  | 
 |   The query outputs for each suite will be stored in files named | 
 |   after their suites and input file names under the output_dir. | 
 |  | 
 | EOF | 
 |     exit | 
 | } | 
 |  | 
 | e() { [ -n "$VERBOSE" ] && echo "$@" >&2 ; "$@" ; } | 
 |  | 
 | query()  { # host query | 
 |     local host=$1 query="$2" | 
 |     e ssh -p 29418 "$host" gerrit query --format json "$query" | 
 | } | 
 |  | 
 | run_suite() { # host idir odir suite operator | 
 |     local host=$1 idir=$2 odir=$3 suite=$4 operator=$5 qfile files | 
 |  | 
 |     mkdir -p "$odir/$suite" | 
 |  | 
 |     echo "$suite" | grep -q "^values_" && operator=$(echo "$suite" | sed '-es/^values_//') | 
 |  | 
 |     if [ -z "$suite" ] ; then | 
 |         files=($(cd "$idir" ; echo *)) | 
 |     else | 
 |         files=($(cd "$idir" ; echo $suite/*)) | 
 |     fi | 
 |  | 
 |     for qfile in "${files[@]}" ; do | 
 |         if [ -d "$idir/$qfile" ] ; then | 
 |             run_suite "$host" "$idir" "$odir" "$qfile" "$operator" | 
 |         else | 
 |             if [ -n "$operator" ] ; then | 
 |                 query "$host" "$operator:{$(< "$idir/$qfile")}" > "$odir/$qfile" | 
 |             else | 
 |                 query "$host" "$(< "$idir/$qfile")" > "$odir/$qfile" | 
 |             fi | 
 |         fi | 
 |     done | 
 | } | 
 |  | 
 | cmd='' | 
 | while [ $# -gt 0 ] ; do | 
 |     case "$1" in | 
 |         -v) VERBOSE=$1 ;; | 
 |  | 
 |         -h) shift ; HOST=$1 ;; | 
 |         -s) shift ; SUITE=$1 ;; | 
 |         -i) shift ; IDIR=$1 ;; | 
 |         -o) shift ; ODIR=$1 ;; | 
 |  | 
 |         run) cmd=$1 ;; | 
 |  | 
 |         --exec) shift ; "$@" ; exit ;; | 
 |  | 
 |         *) usage ;; | 
 |     esac | 
 |     shift | 
 | done | 
 |  | 
 | case "$cmd" in | 
 |     run) | 
 |         [ -z "$HOST" ] && usage | 
 |         [ -z "$IDIR" ] && usage | 
 |         [ -z "$ODIR" ] && usage | 
 |         [ -z "$SUITE" ] && SUITE="" | 
 |         run_suite "$HOST" "$IDIR" "$ODIR" "$SUITE" ; exit | 
 |     ;; | 
 | esac |