]> err.no Git - dak/commitdiff
morgue <-> snapshot love
authorJoerg Jaspert <joerg@debian.org>
Sun, 13 Nov 2011 20:19:09 +0000 (21:19 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sun, 13 Nov 2011 20:19:09 +0000 (21:19 +0100)
add short shell script to link files in morgue into the snapshot farm to save on disk space

Signed-off-by: Joerg Jaspert <joerg@debian.org>
tools/link_morgue_with_snapshot_farm.sh [new file with mode: 0755]

diff --git a/tools/link_morgue_with_snapshot_farm.sh b/tools/link_morgue_with_snapshot_farm.sh
new file mode 100755 (executable)
index 0000000..ed53aaf
--- /dev/null
@@ -0,0 +1,81 @@
+#!/bin/bash
+# No way I try to deal with a crippled sh just for POSIX foo.
+
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# 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 the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Homer: Are you saying you're never going to eat any animal again? What
+#        about bacon?
+# Lisa: No.
+# Homer: Ham?
+# Lisa: No.
+# Homer: Pork chops?
+# Lisa: Dad, those all come from the same animal.
+# Homer: Heh heh heh. Ooh, yeah, right, Lisa. A wonderful, magical animal.
+
+# Let files inside morgue be symlinks to the snapshot farm
+
+# exit on errors
+set -e
+# make sure to only use defined variables
+set -u
+# ERR traps should be inherited from functions too. (And command
+# substitutions and subshells and whatnot, but for us the functions is
+# the important part here)
+set -E
+
+# Make sure we start out with a sane umask setting
+umask 022
+
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+
+# log something (basically echo it together with a timestamp)
+# Set $PROGRAM to a string to have it added to the output.
+function log () {
+        local prefix=${PROGRAM:-$0}
+        echo "$(date +"%b %d %H:%M:%S") $(hostname -s) ${prefix}[$$]: $@"
+}
+
+PROCESSDIR="/srv/morgue.debian.org"
+FARMBASE="/srv/snapshot.debian.org/farm"
+
+cd "${PROCESSDIR}"
+log "Processing ${PROCESSDIR}"
+find ${PROCESSDIR} -type f |
+while read mfile; do
+    # Get the files sha1sum
+    mshasum=$(sha1sum ${mfile})
+    mshasum=${mshasum%% *}
+    # And now get the "levels" of the farm
+    if [[ ${mshasum} =~ ([0-9a-z][0-9a-z])([0-9a-z][0-9a-z]).* ]]; then
+        LVL1=${BASH_REMATCH[1]}
+        LVL2=${BASH_REMATCH[2]}
+    else
+        log "Ups, unknown error in regex for ${mfile} (${mshasum})"
+        continue
+    fi
+
+    # See if we have a target
+    if [ -f "${FARMBASE}/${LVL1}/${LVL2}/${mshasum}" ]; then
+        # Yes, lets symlink it
+        log "Symlinking ${mfile} to ${FARMBASE}/${LVL1}/${LVL2}/${mshasum}"
+        ln -sf "${FARMBASE}/${LVL1}/${LVL2}/${mshasum}" "${mfile}"
+    else
+        # No, just tell
+        log "No symlink target for ${mfile}"
+    fi
+done # mfile read mfile