#!/usr/bin/env bash## $Id$## mirror script for Isabelle distribution or website## diagnosticsPRG=`basename "$0"`usage(){ echo echo "Usage: $PRG [OPTIONS] DEST" echo echo " Options are:" echo " -h print help message" echo " -n dry run, don't do anything, just report what would happen" echo " -w (ignored for backward compatibility)" echo " -d delete files that are not on the server (BEWARE!)" echo exit 1}fail(){ echo "$1" >&2 exit 2}## process command line# optionsHELP=""ARGS=""SRC="isabelle-website"while getopts "hnwd" OPTdo case "$OPT" in h) HELP=true ;; n) ARGS="$ARGS -n" ;; w) echo "option -w ignored" ;; d) ARGS="$ARGS --delete" ;; \?) usage ;; esacdoneshift `expr $OPTIND - 1`# helpif [ -n "$HELP" ]; then cat <<EOFMirroring the Isabelle distribution or website==============================================The Munich site maintains an rsync server for the Isabelledistribution or website.The rsync tool is very smart and efficient in mirroring largedirectory hierarchies. See http://rsync.samba.org/ for moreinformation. The $PRG script provides a simple front-endfor easy access to the Isabelle distribution.The script can be either run in conservative or clean-sweep mode.1) Basic mirroring works like this: $PRG /foo/barwhere /foo/bar refers to your local copy of the Isabelle distribution(the base directory has to exist already). This operation isconservative in the sense that files are never deleted, thus garbagemay accumulate over time as our master copy is changed.Avoiding garbage in your local copy requires some care. Rsyncprovides a way to delete all additional local files that are absent inthe master copy. This provides an efficient way to purge largedirectory hierarchies, even unwillingly in case that a wrongdestination is given!2a) This will invoke a safe dry-run of clean-sweep mirroring: $PRG -dn /foo/barwhere additions and deletions will be printed without any actualchanges performed so far.2b) Exact mirroring with actual deletion of garbage may be performedlike this: $PRG -d /foo/barAfter gaining some confidence in the workings of $PRG onewould usually set up some automatic mirror scheme, e.g. a daily cronjob run by the 'nobody' user.Add -w to the option list in order to mirror the whole Isabelle websiteEOF exit 0fi# arguments[ $# -ne 1 ] && { echo "Bad arguments: $*"; usage; }DEST="$1"; shift;## mainexec rsync -va $ARGS "rsync://isabelle.in.tum.de/$SRC" "$DEST/"