git & maven – Voir automatiquement les numéros de version des branches sur git

Hello,

Avez vous un projet sous git avec des tags 3.0.1, 3.3.2 mais vos projets affichent un pom.xml avec un triste 0.0.1-SNAPSHOT depuis le début de l’historique git ?

Si vous créez des tags/branches dont le nom commence par ‘release/’, avec ce script, vous pourrez savoir dans quelle version vous êtes sur chacune de vos branches.

#!/bin/bash
VERSIONS="$(git for-each-ref --sort=-committerdate --format='%(refname:short)' | grep origin/release | cut -d'/' -f3 | tac)";

snapshotVersion (){
MAXMILESTONE=0;MAXMAJOR=0;MAXMINOR=0;

for VERSION in $VERSIONS;do
MILESTONE=$(echo $VERSION | cut -d'.' -f1);
MAJOR=$(echo $VERSION | cut -d'.' -f2);
MINOR=$(echo $VERSION | cut -d'.' -f2 | cut -d'-' -f1);

if [ "$(expr "$MILESTONE" : '^[0-9]\+$')" -gt 0 ];then
if [ "$MAXMILESTONE" -lt "$MILESTONE" ] ||
[ "$MAXMILESTONE" -eq "$MILESTONE" -a "$MAXMAJOR" -lt "$MAJOR" ] ||
[ "$MAXMILESTONE" -eq "$MILESTONE" -a "$MAXMAJOR" -eq "$MAJOR" -a "$MAXMINOR" -lt "$MINOR" ];then
MAXMILESTONE=$MILESTONE;
MAXMAJOR=$MAJOR;
MAXMINOR=$MAXMINOR;
fi
fi;
done;

MAXMINOR=$(expr $MAXMINOR + 1)
MAXVERSION=$MAXMILESTONE.$MAXMAJOR.$MAXMINOR
echo $MAXVERSION-SNAPSHOT
}

pomVersion (){

THIS_BRANCH=$1
REVS="$(git rev-list remotes/origin/$THIS_BRANCH)"

POMVERSION=$SNAPSHOTVERSION

CONTINUE=1
for VERSION in $VERSIONS;do
MILESTONE=$(echo $VERSION | cut -d'.' -f1);

if [ "$(expr "$MILESTONE" : '^[0-9]\+$')" -gt 0 ];then
if [ -z "$(echo "$REVS" | grep "$(git rev-list origin/release/$VERSION --merges | head -n 1)")" -a $CONTINUE -eq 1 ];then
CONTINUE=0
POMVERSION=$VERSION-SNAPSHOT
fi
fi
done

if [ ! -z "$(echo "$THIS_BRANCH" | grep "release/")" ];then
POMVERSION=$(echo "$THIS_BRANCH" | cut -d'/' -f2)
fi

echo $POMVERSION
}

applyVersion (){
echo "$1 $2"
}

listBranches (){
git branch -a | grep remotes | grep -v 'master' | sed 's/ remotes\/origin\///'
}

SNAPSHOTVERSION=$(snapshotVersion)

echo "____________________________________________________________________________________"
listBranches | while read BRANCH;do
POMVERSION=$(pomVersion $BRANCH)
applyVersion "$(printf "%50s\n" "$BRANCH") | $(printf "%30s\n" "$POMVERSION")"
done
echo "____________________________________________________________________________________"

Vous pourrez éventuellement ensuite faire un git rebase pour inclure des commits qui vont changer les versions des pom successives en fonction de ce que vous voyez dans le résultat de ce script.
/!\ Attention, un git rebase, c’est dangereux, et ça a des impacts sur les branches en aval.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*