]> git.decadent.org.uk Git - dak.git/blobdiff - config/debian/cronscript
There can be only one
[dak.git] / config / debian / cronscript
index ec5975d06a75c509d5aa6792ced165d28149a584..3f3dd52dbbd3184b26a2c06da74b436886206d3c 100755 (executable)
@@ -38,21 +38,42 @@ set -u
 # the important part here)
 set -E
 
 # the important part here)
 set -E
 
+# The extglob shell option is enabled using the shopt builtin, several
+# extended pattern matching operators are recognized. We use it for
+# the POSSIBLEARGS and the first case ${ARGS} matching
+shopt -s extglob
+
 # And use one locale, no matter what the caller has set
 export LANG=C.UTF-8
 export LC_ALL=C.UTF-8
 
 # And use one locale, no matter what the caller has set
 export LANG=C.UTF-8
 export LC_ALL=C.UTF-8
 
+# import the general variable set.
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
 # One arg please
 declare -lr ARG=${1:-"meh"}
 
 # One arg please
 declare -lr ARG=${1:-"meh"}
 
+# program name is the (lower cased) first argument.
+PROGRAM="${ARG}"
+
+# And the following types of cronscripts exists
+declare -lr POSSIBLEARGS='+(unchecked|dinstall|hourly|daily|weekly|monthly|yearly)'
+
 # set DEBUG if you want to see a little more logs (needs to be used more)
 DEBUG=${DEBUG:-0}
 
 # set DEBUG if you want to see a little more logs (needs to be used more)
 DEBUG=${DEBUG:-0}
 
-# This doesn't catch calling us with an unknown argument, but it
-# catches missing args and saves a good bunch of processing time
-# (reading the scriptvars later is slow)
-if [[ ${ARG} == meh ]]; then
-    cat - <<EOF
+# Check if the argument is a known one. If so, lock us so that only
+# one copy of the type of cronscript runs. The $type.tasks file is
+# mandantory, so use that for locking.
+case ${ARG} in
+    ${POSSIBLEARGS})
+        # Only one of me should ever run.
+        FLOCKER=${FLOCKER:-""}
+        [  "${FLOCKER}"  != "${configdir}/${PROGRAM}.tasks" ] && exec env FLOCKER="${configdir}/${PROGRAM}.tasks" flock -E 0 -en "${configdir}/${PROGRAM}.tasks" "$0" "$@" || :
+        ;;
+    *)
+        cat - <<EOF
 This is the FTPMaster cronscript. It needs an argument or it won't do
 anything for you.
 
 This is the FTPMaster cronscript. It needs an argument or it won't do
 anything for you.
 
@@ -60,22 +81,16 @@ Currently accepted Arguments:
 
    unchecked - Process the unchecked queue
    dinstall  - Run a dinstall
 
    unchecked - Process the unchecked queue
    dinstall  - Run a dinstall
-   hourly, daily, weekly - Run that part
+   yearly, hourly, daily, weekly - Run that part
 
 EOF
 
 EOF
-    exit 0
-fi
-
-# import the general variable set.
-export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
-. $SCRIPTVARS
+        exit 0
+        ;;
+esac
 
 # common functions are "outsourced"
 . "${configdir}/common"
 
 
 # common functions are "outsourced"
 . "${configdir}/common"
 
-# program name is the (lower cased) first argument.
-PROGRAM="${ARG}"
-
 # Timestamp when we started
 NOW=$(date "+%Y.%m.%d-%H:%M:%S")
 
 # Timestamp when we started
 NOW=$(date "+%Y.%m.%d-%H:%M:%S")
 
@@ -112,9 +127,6 @@ case ${ARG} in
     dinstall)
         ;;
     hourly)
     dinstall)
         ;;
     hourly)
-        # Only one of me should ever run.
-        FLOCKER=${FLOCKER:-""}
-        [  "${FLOCKER}"  != "${configdir}/${PROGRAM}.variables" ] && exec env FLOCKER="${configdir}/${PROGRAM}.variables" flock -E 0 -en "${configdir}/${PROGRAM}.variables" "$0" "$@" || :
         ;;
     daily)
         ;;
         ;;
     daily)
         ;;
@@ -122,6 +134,8 @@ case ${ARG} in
         ;;
     monthly)
         ;;
         ;;
     monthly)
         ;;
+    yearly)
+        ;;
     *)
         error "Unknown arg ${ARG}"
         exit 42
     *)
         error "Unknown arg ${ARG}"
         exit 42
@@ -230,6 +244,8 @@ case ${ARG} in
         ;;
     monthly)
         ;;
         ;;
     monthly)
         ;;
+    yearly)
+        ;;
 esac
 
 # Now, at the very (successful) end of this run, make sure we remove
 esac
 
 # Now, at the very (successful) end of this run, make sure we remove