Newer
Older
# Copyright (C) 2018, Patrik Dufresne Service Logiciel inc.
# Use is subject to license terms.
#
# This script return a valid maven version from git SCM. This implementation
# is inspired from python scm_version.
#
# no distance and clean:
# {tag}
# distance and clean:
# {next_version}-{distance}-g{revision hash}
# no distance and not clean:
# {tag}-dYYMMDD
# distance and not clean:
# {next_version}-{distance}-g{revision hash}.dYYMMDD
#
# First arguments, define the format styled to be used.
# * DEFAULT: {next_version}-{distance}-g{revision hash}
# * DEB: {next_version}~dev{distance}+g{revision hash}
#
declare base=( ${1%%[0-9]} )
declare -a part=( ${1//[^0-9]/ } )
echo "${base}$((${part[-1]}+1))"
if ! type git > /dev/null; then
echo "git executable can't be found!"
exit 1
fi
case "$1" in
DEB|DEBIAN)
SEP2="+g"
SEP3="+d"
;;
*)
SEP1="-"
SEP2="-g"
SEP3=".d"
;;
esac
DESCRIBE=$(git describe --dirty --tags --long --match "*.*" 2>/dev/null || true)
if [ -z "$DESCRIBE" ]; then
TAG="0.0.0"
DISTANCE="$(git rev-list HEAD 2>/dev/null | wc -l)"
DIRTY=1
if [ -z "$(git status --porcelain --untracked-files=no)" ]; then
DIRTY=0
fi
NODE="$(git rev-parse --verify --quiet HEAD | cut -c 1-7)"
# garbage-v3.0.6-24-g2c76283-dirty
DIRTY=0
if [[ "$DESCRIBE" == *-dirty ]]; then
DIRTY=1
DESCRIBE="${DESCRIBE/-dirty/}"
fi
# garbage-v3.0.6-24-g2c76283
NODE="${DESCRIBE##*-g}"
DESCRIBE=${DESCRIBE%-g*}
# garbage-v3.0.6-24
DISTANCE="${DESCRIBE##*-}"
# garbage-v3.0.6
TAG="${DESCRIBE%-*}"
fi
TIMESTAMP=$(date '+%Y%m%d')
# Strip tag to get version
# Remove leading "garbage-v"
# Remove trailing "-g2c76283"
VERSION="${TAG%%-d*}"
VERSION="${VERSION%%-g*}"
VERSION="${VERSION%%+*}"
VERSION="${VERSION##*-}"
VERSION="${VERSION##v}"
NEXT_VERSION=$(increment_version "$VERSION")
# Print version
if [ -z "$NODE" ]; then
# {next_version}-{distance}
printf "%s%s%s\n" "$NEXT_VERSION" "$SEP1" "$DISTANCE"
# {tag}
printf "%s\n" "$VERSION"
# {next_version}-{distance}-g{revision hash}
printf "%s%s%s%s%s\n" "$NEXT_VERSION" "$SEP1" "$DISTANCE" "$SEP2" "$NODE"
# {tag}-dYYMMDD
printf "%s%s%s\n" "$VERSION" "$SEP3" "$TIMESTAMP"
# {next_version}-{distance}-g{revision hash}.dYYMMDD
printf "%s%s%s%s%s%s%s\n" "$NEXT_VERSION" "$SEP1" "$DISTANCE" "$SEP2" "$NODE" "$SEP3" "$TIMESTAMP"