#!/usr/bin/env bash # # Archiver # # Parameters BASENAME="`basename $0 | sed -e 's/\(.\)/\U\1/'`" DIRNAME="`dirname $0`" BASEDIR="$DIRNAME/.." #ARCHIVE="$BASEDIR/archive" ARCHIVE="archive" ASSETS="build" #REVISION="`git describe --tags 2> /dev/null || git log -1 --format=oneline | cut -d ' ' -f 1`" METADATA=".metadata" LATEST="$METADATA/latest.txt" # Determine the revision file if [ -e "$ASSETS/revision" ]; then #REVFILE="$BASEDIR/$ASSETS/revision" REVFILE="$ASSETS/revision" else REVFILE="$ASSETS/book/revision" fi # Make sure the archive folder exist mkdir -p $ARCHIVE # Make sure the archive has some basic links # This allows preservation of symbolic links for each archive version. ( cd $ARCHIVE &> /dev/null rm -f archive && ln -s . archive for item in slides vendor images LICENSE; do ln -sf ../$item done ) # Check for previous build if [ ! -e "$REVFILE" ]; then echo "# $BASENAME: skipping: revision file not found" exit else REVISION="`cat $REVFILE`" fi # Check for non-null revision if [ -z "$REVISION" ]; then echo "# $BASENAME: skipping: old revision is null" exit fi # Check if the revision is a tag if git tag | grep -q "^${REVISION}$"; then # Check if archive does not exists if [ ! -d "$ARCHIVE/$REVISION" ]; then echo "# $BASENAME: archiving $REVISION..." cp -alf $ASSETS $ARCHIVE/$REVISION else echo "# $BASENAME: revision $REVISION already archived" fi else echo "# $BASENAME: not archiving: revision $REVISION is not a tag" fi