summaryrefslogtreecommitdiff
path: root/publish-purge
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2012-12-15 15:33:43 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2012-12-15 15:33:43 +0000
commit87f92dbf2105d8d068e9f5956931968b7cf33c47 (patch)
tree9f3fd6c080c7b847ca23a143a223d546a4dd0f7e /publish-purge
parentd23ca1bcb128261e6f3cc465cb3749b3eff2214c (diff)
publish-purge: a cleanup script for publish's dir
publish-purge considers for each directory in pubish's $base directory a TTL (time to live) that is configured by ~/.publish-purge.cfg and is overriden by a local .publish.ttl file. A new option -t in publish lets publish include a local .publish.ttl file if we wish to set a specific TTL. Signed-off-by: Peter Palfrader <peter@palfrader.org> git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@564 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
Diffstat (limited to 'publish-purge')
-rwxr-xr-xpublish-purge95
1 files changed, 95 insertions, 0 deletions
diff --git a/publish-purge b/publish-purge
new file mode 100755
index 0000000..8443cf0
--- /dev/null
+++ b/publish-purge
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+set -e
+
+
+test_if_ancient()
+{
+ d=$1
+ ttl=$2
+
+ mtime=$(stat --format "%Y" "$d")
+ tod=$(($mtime + 3600*24*$ttl))
+ now=$(date +%s)
+
+ [ "$optVerbose" -ge "2" ] && echo "Consider $d: ttl=$ttl, mod time=$mtime, time of death=$tod, now=$now"
+
+ [ "$tod" -lt "$now" ] && return 0
+ return 1
+}
+
+
+cleanit()
+{
+ d=$1
+ [ -d "$d" ] || exit 0
+ [ -e $d/.publish.ttl ] && ttl=`cat $d/.publish.ttl`
+
+ if test_if_ancient $d $ttl; then
+ [ "$optVerbose" -ge "1" ] && echo "Purge $d"
+ rm -rf "$d"
+ fi
+ return 0
+}
+
+usage()
+{
+ cat << EOF
+usage: $0 [OPTIONS]
+
+OPTIONS:
+ -h Show this message.
+ -v Give verbose output. Be more verbose with -vv.
+EOF
+}
+
+optVerbose=0
+
+while getopts "vh" OPTION; do
+ case $OPTION in
+ h)
+ usage
+ ;;
+ v)
+ optVerbose=$(($optVerbose + 1))
+ ;;
+ esac
+done
+
+
+ttl=14
+[ -e ~/.publish-purge.cfg ] && . ~/.publish-purge.cfg
+
+# We would not like that cleanit removes files in directories that mallory set
+# as $base
+if ! stat --format=%a ~/.publish-purge.cfg | egrep -q ".00"; then
+ echo "For security reasons ~/.publish-purge.cfg should have no perms for group and others."
+fi
+
+if [ -z "$base" ]; then
+ echo "Please setup \$base in ~/.publish-purge.cfg"
+ exit 1
+fi
+
+if ! [ -e "$base" ]; then
+ echo "Unknown base directory $base"
+ exit 1
+fi
+
+cd $base
+# We would not like to accidentily delete files in the wrong directory, hence
+# the paranoia check
+if ! [ -e .publish-purge.token ]; then
+ echo "Place a .publish-purge.token in $base"
+ exit 1
+fi
+
+for d in *; do
+ pushd . > /dev/null
+ # we launch a subshell so that setting $ttl within the subshell
+ # is not visible outside the subshell
+ ( cleanit $d )
+ popd > /dev/null
+done
+
+