Code

Enhancements to tools/sfsnapshotgit
authorThomas Guyot-Sionnest <dermoth@aei.ca>
Sat, 26 Sep 2009 18:58:51 +0000 (14:58 -0400)
committerThomas Guyot-Sionnest <dermoth@aei.ca>
Sat, 26 Sep 2009 19:18:01 +0000 (15:18 -0400)
tools/sfsnapshotgit

index df0dc359b265bcafd0163389be847107d6dbb899..11bf3b9494f8b280d739805d83e2aac3e7ef571d 100755 (executable)
@@ -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