summaryrefslogtreecommitdiff
path: root/olamic-enqueue
blob: 1fe7b78b6c8993853bd3d4897f23894219f343dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/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"