#!/usr/bin/env bash # # Usage: get-scala-commit-sha [dir] # Figures out current commit sha of a git clone. # If no dir is given, current working dir is used. # # Example build version string: # g6f1c486d0b # [[ $# -eq 0 ]] || cd "$1" ensure_tag () { sha=$1 rev=$2 [[ -n $(git tag -l $rev) ]] || { git tag -a -m "generated by get-scala-revision" $rev $sha } } # Ensure some baseline tags are present so if this repository's # tags are screwed up or stale, we should still have a reference # point for a build string. ensure_tag 58cb15c40d v2.10.0-M1 ensure_tag 29f3eace1e v2.9.1 ensure_tag b0d78f6b9c v2.8.2 # the closest tag, obtained separately because we have to # reconstruct the string around the padded distance. tag=$(git describe --tags --match 'v2*' --abbrev=0) # printf %016s is not portable for 0-padding, has to be a digit. # so we're stuck disassembling it. described=$(git describe --tags --match 'v2*' --abbrev=10) suffix="${described##${tag}-}" hash=$(echo $suffix | cut -d - -f 2) echo "$hash"