]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - crontab.d/update.sh
Don't use echo for data from the user.
[config/dotfiles.git] / crontab.d / update.sh
index cfdcbcc5a3364562ac3b2b0555c06d2e94fbf3f2..72422fc90390e3c767eddfacd5fc676045eae484 100755 (executable)
@@ -5,7 +5,7 @@
 #
 # An existing crontab entry not generated with this script is not overwritten.
 
-# Copyright (C) 2012  Simon Ruderich
+# Copyright (C) 2012-2013  Simon Ruderich
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -26,7 +26,8 @@ set -e
 
 HEADER_WARNING="# WARNING! DO NOT EDIT THIS FILE! #"
 
-# Don't overwrite existing crontab entries.
+# Don't overwrite existing crontab entries. Not race condition free but that
+# can't be helped.
 if crontab -l >/dev/null 2>&1; then
     if crontab -l | head -n3 | grep "^$HEADER_WARNING$" >/dev/null; then
         :
@@ -42,14 +43,18 @@ if test ! -d "$DIRECTORY" || test ! -O "$DIRECTORY"; then
     exit 1
 fi
 
+# `set -e` aborts when `mktemp` fails.
 CRONTAB=`mktemp --tmpdir="$DIRECTORY" update-crontab.XXXXXXXXXXXX`
 
 echo "###################################"  > "$CRONTAB"
 echo "$HEADER_WARNING"                     >> "$CRONTAB"
 echo "###################################" >> "$CRONTAB"
 echo >> "$CRONTAB"
-echo "# It was generated from '$DIRECTORY/*' on `date -R`." >> "$CRONTAB"
+printf "# It was generated from '%s/*' on %s." \
+    "$DIRECTORY" "`LANG=C date '+%a, %d %b %Y %H:%M:%S %z'`" >>"$CRONTAB"
 
+# Enforce C sort order.
+LC_ALL=C
 
 NO_MATCHES=
 for file in "$DIRECTORY"/crontab.*; do
@@ -59,18 +64,20 @@ for file in "$DIRECTORY"/crontab.*; do
         break
     fi
 
-    echo "Found '$file'."
+    printf "Found '%s'.\n" "$file"
 
-    echo             >> "$CRONTAB"
-    echo             >> "$CRONTAB"
-    echo "## $file:" >> "$CRONTAB"
+    printf '\n\n## %s:\n' "$file" >>"$CRONTAB"
 
+    # Strip licenses, multiple empty lines and fix $HOME variables in PATH
+    # (cron doesn't expand variables).
     START_REGEX='^# This [a-zA-Z]* is free software: you can redistribute it'
     END_REGEX='^# along with this [a-zA-Z]*.  If not, see <[^>]*>\.'
     < "$file" sed -e "/$START_REGEX/,/$END_REGEX/ d" \
                   -e "/^#[ ]*$/ d" \
                   -e "/^# Copyright (C) [0-9][0-9]* / d" \
         | cat --squeeze-blank \
+        | sed "/^PATH/ s:\$HOME:$HOME:g" \
+        | sed 's/RAND_SLEEP \([0-9]*\)/sleep `perl -e "srand; print int rand \1;"`/' \
         >> "$CRONTAB"
 done