--- /dev/null
+#!/bin/bash
+# vim:set et ts=4 sw=4:
+
+LOCKFILE=/org/wanna-build/triggers/lock
+
+set -eE
+
+cleanup() {
+ rm -rf "$LOCKFILE"
+}
+
+if ! lockfile -0 -r0 "$LOCKFILE" 2>/dev/null
+then
+ # Process already running.
+ exit 0
+fi
+
+# Got the lock.
+trap cleanup ERR TERM HUP INT QUIT EXIT
+
+# Do at least one run.
+work=1
+while [ $work -eq 1 ]
+do
+ # No further runs unless at least one signal is found.
+ work=0
+ find /org/wanna-build/signals -type f | while read signal
+ do
+ # Process it.
+ work=1
+ if [ "$(stat -c '%s' $signal)" -eq 0 ]
+ then
+ /org/wanna-build/triggers/trigger.$(basename $signal)
+ else
+ cat $signal | \
+ (while read args
+ do
+ /org/wanna-build/triggers/trigger.$(basename $signal) $args
+ done)
+ fi
+ rm $signal
+ done
+done
+
+exit 0
+
[ -n "$SSH_ORIGINAL_COMMAND" ] || exit 1
+trigger_name=$(basename "$1")
+
set -- $SSH_ORIGINAL_COMMAND
-bn=$(basename "$1")
-if [ "$bn" = "trigger.daily" ]; then
- bin=/org/wanna-build/trigger.daily
-elif [ "$bn" = "trigger.often" ]; then
- bin=/org/wanna-build/trigger.often
-elif [ "$bn" = "trigger.security" ]; then
- bin=/org/wanna-build/trigger.security
+shift
+args="$*"
+
+echo "$(date): $trigger_name | $args" >> /org/wanna-build/db/signal.log
+
+if [ ! -z "$args" ]
+then
+ # Append because we might get triggered for multiple suites.
+ # (This is mainly for security currently.)
+ echo $args >> /org/wanna-build/signals/$trigger_name
else
- exit 1
+ touch /org/wanna-build/signals/$trigger_name
fi
-shift
-
-[ -f "$bin" -a -x "$bin" ] || exit 1
+exit 0
-exec $bin