#!/bin/bash set -eu QUEUE_DIR="$1"; shift GIT_REPO="$1"; shift GIT_OBJECT="$1"; shift VARS=() VALS=() while [[ $# != 0 ]]; do VARSET="$1"; shift if [[ $VARSET =~ ^([^=]+)=(.*)$ ]]; then VARS+=("${BASH_REMATCH[1]}") VALS+=("${BASH_REMATCH[2]}") else echo "Usage: $0 queue-dir repo-path git-object [VAR=value ...]" >&2 exit 1 fi done TASK_SCRIPT="$(cat)" mkdir -p "$QUEUE_DIR" cd "$QUEUE_DIR" mkdir -p candidates tmp TEMP_TASK="$(mktemp tmp/XXXXXXXX)" chmod 644 "$TEMP_TASK" for i in $(seq 0 $((${#VARS[@]}-1))); do VAR="${VARS[$i]}" VAL="${VALS[$i]}" printf "export %q=%q\n" "$VAR" "$VAL" >> "$TEMP_TASK" done printf "export GIT_REPO=%q\n" "$GIT_REPO" >> "$TEMP_TASK" printf "export GIT_OBJECT=%q\n" "$GIT_OBJECT" >> "$TEMP_TASK" printf "export TASK_SCRIPT=%q\n" "$TASK_SCRIPT" >> "$TEMP_TASK" UUID="$(uuidgen -r)" until mv -n "$TEMP_TASK" candidates/"$UUID"; do UUID="$(uuidgen -r)" done echo "$UUID"