summaryrefslogtreecommitdiff
path: root/olamic-enqueue
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xolamic-enqueue50
1 files changed, 50 insertions, 0 deletions
diff --git a/olamic-enqueue b/olamic-enqueue
new file mode 100755
index 0000000..1fe7b78
--- /dev/null
+++ b/olamic-enqueue
@@ -0,0 +1,50 @@
1#!/bin/bash
2
3set -eu
4
5QUEUE_DIR="$1"; shift
6GIT_REPO="$1"; shift
7GIT_OBJECT="$1"; shift
8
9VARS=()
10VALS=()
11while [[ $# != 0 ]]; do
12 VARSET="$1"; shift
13 if [[ $VARSET =~ ^([^=]+)=(.*)$ ]]; then
14 VARS+=("${BASH_REMATCH[1]}")
15 VALS+=("${BASH_REMATCH[2]}")
16 else
17 echo "Usage: $0 queue-dir repo-path git-object [VAR=value ...]" >&2
18 exit 1
19 fi
20done
21
22TASK_SCRIPT="$(cat)"
23
24mkdir -p "$QUEUE_DIR"
25
26cd "$QUEUE_DIR"
27
28mkdir -p candidates tmp
29
30TEMP_TASK="$(mktemp tmp/XXXXXXXX)"
31
32chmod 644 "$TEMP_TASK"
33
34for i in $(seq 0 $((${#VARS[@]}-1))); do
35 VAR="${VARS[$i]}"
36 VAL="${VALS[$i]}"
37 printf "export %q=%q\n" "$VAR" "$VAL" >> "$TEMP_TASK"
38done
39
40printf "export GIT_REPO=%q\n" "$GIT_REPO" >> "$TEMP_TASK"
41printf "export GIT_OBJECT=%q\n" "$GIT_OBJECT" >> "$TEMP_TASK"
42printf "export TASK_SCRIPT=%q\n" "$TASK_SCRIPT" >> "$TEMP_TASK"
43
44UUID="$(uuidgen -r)"
45
46until mv -n "$TEMP_TASK" candidates/"$UUID"; do
47 UUID="$(uuidgen -r)"
48done
49
50echo "$UUID"