2021-08-24 21:49:15 +08:00
#!/usr/bin/env bash
2021-04-25 22:21:04 +08:00
set -e -o pipefail
commit = " $1 "
versionglob = "v[0-9].[0-9]*.[0-9]*"
devsuffix = ".dev"
if [ -z " $commit " ] ; then
commit = ` git log -n1 --first-parent "--format=format:%h" `
fi
# automatically assign version
#
# handles the following cases:
#
# 0. no tags on the repository. Print "dev".
#
# 1. no local modifications and commit is directly tagged. Print tag.
#
# 2. no local modifications and commit is not tagged. Take greatest version tag in repo X.Y.Z and assign X.Y.(Z+1). Print that + $devsuffix + $timestamp.
#
# 3. local modifications. Print "dev".
tags = $( git tag)
if [ [ -z " $tags " ] ] ; then
echo "dev"
elif ` git diff --quiet 2>/dev/null` ; then
tagged = $( git tag --points-at " $commit " )
if [ [ -n " $tagged " ] ] ; then
echo $tagged
else
nearest_tag = $( git describe --tags --abbrev= 0 --match " $versionglob " " $commit " )
v = $( echo $nearest_tag | perl -pe 's/(\d+)$/$1+1/e' )
isodate = $( TZ = UTC git log -n1 --format= %cd --date= iso " $commit " )
ts = $( TZ = UTC date --date= " $isodate " "+%Y%m%d%H%M%S" )
echo " ${ v } ${ devsuffix } ${ ts } "
fi
else
echo "dev"
fi