#!/bin/bash # sfsnapshotgit - Snapshot script for Git repository # Original author: Thomas Guyot-Sionnest # # 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 in sfsnapshotgit at line $LINENO"; exit 1' EXIT # Send all command output to STDERR while allowing us to write to STDOUT # using fd 3 exec 3>&1 1>&2 # 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/snapshot} # If one argument is given, this is the branch to create the snapshot from if [ $# -eq 0 ] then HEAD='master' elif [ $# -eq 1 ] then 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 "$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 and be properly configured git checkout "$HEAD" # Get the remote tracking branch from config origin=$(git config branch.$HEAD.remote) ref=$(git config branch.$HEAD.merge |sed -e 's|^refs/heads/||') git fetch "$origin" git reset --hard "$origin/$ref" # Tags are important for git-describe, but take only the ones from the hard-coded 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 # fd 3 goes to STDOUT; print the generated filename echo "nagios-plugins-$VS.tar.gz" 1>&3 trap - EXIT