Skip to content

Instantly share code, notes, and snippets.

@robbwagoner
Last active August 29, 2015 14:07
Show Gist options
  • Save robbwagoner/52630effc210a12a4747 to your computer and use it in GitHub Desktop.
Save robbwagoner/52630effc210a12a4747 to your computer and use it in GitHub Desktop.
#!/bin/bash
# ----------------------------------------
# Print git metadata for the current repo
# ----------------------------------------
# metadata:
# date: ISO8601 timestamp
# sha: SHA short (7-digit)
# sha_full: SHA 40-digit
#
# optionally create a bash variable prefix, which is useful for eval statements
#
# $ git-info sha appname
# appname_sha=34abc67
#
# thus:
#
# $ eval $(git-info.sh sha appname)
# $ echo $appname_sha
# 34abc67
#
set -e
what=${1:-all} # print: all | date | sha | sha_full
if [[ $1 ]] ; then
shift 1
fi
prefix="${@}" # prefix this string to all output
# ------------------------------------
# Convert UNIX timestamp (seconds since epoch UTC) to YYYY-MM-DDTHH:MM:SSZ
# ------------------------------------
function unix_to_iso() {
declare ts=${1}
declare formatOutput="+%FT%TZ"
case $(uname -s) in
( Darwin )
TZ=UTC date -j -r $ts $formatOutput
;;
( Linux )
TZ=UTC date -d @$ts $formatOutput
;;
esac
}
# ------------------------------------
# Get the git metadata for the current project
# ------------------------------------
declare -a versionMetadata=( $(TZ=UTC git log -n 1 --pretty="%ct %h %H") )
declare versionDate=$(unix_to_iso ${versionMetadata[0]})
declare versionSHA=${versionMetadata[1]}
declare versionSHAFull=${versionMetadata[2]}
case $what in
( all | date ) printf "${prefix:+${prefix}_date=}${versionDate}\n" ;;&
( all | sha ) printf "${prefix:+${prefix}_sha=}${versionSHA}\n" ;;&
( all | sha_full ) printf "${prefix:+${prefix}_sha_full=}${versionSHAFull}\n" ;;&
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment