diff options
Diffstat (limited to 'tools/sfsnapshotgit')
-rwxr-xr-x | tools/sfsnapshotgit | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/tools/sfsnapshotgit b/tools/sfsnapshotgit index df0dc359..11bf3b94 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 |