Admin/lib/Tools/components_checksum
changeset 50528 c29af5ffe98a
parent 50527 2f9b5b0e388d
child 50932 ca071373b695
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Admin/lib/Tools/components_checksum	Fri Dec 14 16:21:47 2012 +0100
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+#
+# Author: Alexander Krauss
+#
+# DESCRIPTION: compute and validate checksums for component repository
+
+
+## diagnostics
+
+PRG="$(basename "$0")"
+
+function usage()
+{
+  echo
+  echo "Usage: $PRG [OPTIONS] [DIR]"
+  echo
+  echo "  Options are:"
+  echo "    -u           update the recorded checksums in the repository"
+  echo "    -c           compare the actual checksums with the recorded ones"
+  echo
+  echo "  Compute the checksums of component .tar.gz archives in DIR"
+  echo "  (default \"/home/isabelle/components\") and synchronize them"
+  echo "  with the Isabelle repository."
+  echo
+  exit 1
+}
+
+function fail()
+{
+  echo "$1" >&2
+  exit 2
+}
+
+
+## process command line
+
+# options
+
+UPDATE=""
+CHECK=""
+COMPONENTS_DIR="/home/isabelle/components"
+
+while getopts "uc" OPT
+do
+  case "$OPT" in
+    u)
+      UPDATE=true
+      ;;
+    c)
+      CHECK=true
+      ;;
+  esac
+done
+
+shift $(($OPTIND - 1))
+
+[ -n "$UPDATE" ] || [ -n "$CHECK" ] || usage
+
+
+# args
+
+[ "$#" -ge 1 ] && { COMPONENTS_DIR="$1"; shift; }
+[ "$#" -ne 0 ] && usage
+
+
+## compute checksums
+
+CHECKSUM_DIR="$ISABELLE_HOME/Admin/components"
+CHECKSUM_FILE="$CHECKSUM_DIR/components.sha1"
+CHECKSUM_TMP="$CHECKSUM_DIR/components.sha1.tmp"
+
+(
+  cd "$COMPONENTS_DIR"
+  sha1sum *.tar.gz > "$CHECKSUM_TMP"
+)
+
+[ -n "$UPDATE" ] && mv "$CHECKSUM_TMP" "$CHECKSUM_FILE"
+[ -n "$CHECK" ] && {
+  diff "$CHECKSUM_FILE" "$CHECKSUM_TMP" || fail "Integrity error"
+}
+