From 5b801b81a963d33c1733c524dc8ce11452a5bbbc Mon Sep 17 00:00:00 2001
From: Thomas Guyot-Sionnest <dermoth@aei.ca>
Date: Sat, 26 Sep 2009 14:58:51 -0400
Subject: Enhancements to tools/sfsnapshotgit


diff --git a/tools/sfsnapshotgit b/tools/sfsnapshotgit
index df0dc35..11bf3b9 100755
--- a/tools/sfsnapshotgit
+++ b/tools/sfsnapshotgit
@@ -1,52 +1,70 @@
 #!/bin/bash
+# sfsnapshotgit - Snapshot script for Git repository
+# Original author: Thomas Gguyot-Sionnest <tguyot@unix.net>
+#
+# Given an optional branch name (master by default), this script creates
+# a snapshot from the tip of the branch and move it to ~/staging/.
+# The repository, origin and destination directory can be overridden
+# with environment variable (see below)
 
 # Handle command errors (-e) and coder sleep deprivation issues (-u)
 set -eu
 trap 'echo "An error occurred at line $LINENO"; exit 1' EXIT
 
-# Timestamp
-DS=`date -u +%Y%m%d%H%M`
+# Send all command output to STDERR while allowing us to write to STDOUT
+# using fd 3
+exec 3>&1 1>&2
 
-if [ $# -ne 1 ]
+# Git repository, origin and destination directory can be overridden by
+# setting SFSNAP_REPO, SFSNAP_ORIGIN and SFSNAP_DEST respectively from the
+# caller The defaults are:
+SFSNAP_REPO=${SFSNAP_REPO-~/staging/nagiosplugins}
+SFSNAP_ORIGIN=${SFSNAP_ORIGIN-origin}
+SFSNAP_DEST=${SFSNAP_DEST-~/staging}
+
+# If one argument is given, this is the branch to create the snapshot from
+if [ $# -eq 0 ]
 then
 	HEAD='master'
-else
-	HEAD="$1"
-fi
-
-if [ -z "$HEAD" ]
+elif [ $# -eq 1 ]
 then
-	echo "If specified, the refspec must not be empty"
+	if [ -z "$1" ]
+	then
+		echo "If specified, the refspec must not be empty"
+		exit
+	fi
+	HEAD="$1"
+else
+	echo "Too many arguments"
 	exit
 fi
 
 # Clean up and pull
-cd ~/staging/nagiosplugins
+cd "$SFSNAP_REPO"
+# Sometimes "make dist" can modify versioned files so we must reset first
+git reset --hard
 git clean -qfdx
+# Any branch used to create snapshots must already exist
 git checkout "$HEAD"
-git pull origin "$HEAD"
+git pull "$SFSNAP_ORIGIN" "$HEAD"
 # Tags are important for git-describe
-git fetch --tags origin
+git fetch --tags "$SFSNAP_ORIGIN"
 
 # Write our snapshot version string (similar to NP-VERSION-GEN) to "release"
 VS=$(git describe --abbrev=4 HEAD)
+VS=${VS#release-}
+
+# Configure and dist only if needed
+if [ ! -e "$SFSNAP_DEST/nagios-plugins-$VS.tar.gz" ]
+then
+	tools/setup
+	./configure
+	make dist VERSION=$VS RELEASE=snapshot
+	cp nagios-plugins-$VS.tar.gz "$SFSNAP_DEST/"
+fi
 
-# Configure and dist
-tools/setup
-./configure
-make dist VERSION=${VS#release-} RELEASE=snapshot
-
-# The rest is probably going to change... The mv below is for backwards
-# compatibility, however I'd recommend:
-# ln -s nagios-plugins-${VS#release-}.tar.gz nagios-plugins-$HEAD.tar.gz
-# ln -s nagios-plugins-${VS#release-}.tar.gz nagios-plugins-trunk-$DS.tar.gz
-# ln -s nagios-plugins-master.tar.gz nagios-plugins-HEAD.tar.gz
-# NB: the 3rd one would be permannent, no need to do it each time
-# Additionally, we could check whenever we need to re-generate a snapshot.
-# This way we could make snapshots much more often as only symlink changes
-# would have to be uploaded.
-mv nagios-plugins-${VS#release-}.tar.gz nagios-plugins-trunk-$DS.tar.gz
-cp *.tar.gz /tmp/
+# fd 3 goes to STDOUT; print the generated filename
+echo "nagios-plugins-$VS.tar.gz" 1>&3
 
 trap - EXIT
 
-- 
cgit v0.10-9-g596f

