nutools/pver

205 lines
10 KiB
Bash
Executable File

#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
urequire ptools xmlsupport
function pver_display_help() {
uecho "$scriptname: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
USAGE
$scriptname [options]
OPTIONS
-w, --auto-file DIR
Gérer le numéro de version du répertoire spécifié. Si un fichier pom.xml
existe dans ce répertoire, alors c'est l'option '-e DIR/pom.xml' qui est
activé. Si un fichier VERSION.txt existe dans ce répertoire, alors c'est
l'option '-f DIR/VERSION.txt' qui est activée. Sinon, un nouveau fichier
VERSION.txt est créé dans ce répertoire. C'est l'option par défaut.
--sw, --auto-string DIR
Prendre pour valeur de départ la version du répertoire spécifié. Si un
fichier pom.xml existe dans ce répertoire, alors c'est l'option -E qui
est activé. Si un fichier VERSION.txt existe dans ce répertoire, alors
c'est l'option -F qui est activée.
--gw, --auto-git-string [BRANCH:]DIR
Prendre pour valeur de départ la version du répertoire spécifié dans la
branche BRANCH (qui vaut par défaut master) du dépôt git. Si un fichier
pom.xml existe dans ce répertoire, alors c'est l'option -g qui est
activé. Si un fichier VERSION.txt existe dans ce répertoire, alors c'est
l'option -G qui est activée.
-e, --pom POMFILE
Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié.
Le fichier DOIT exister. Implique --maven-update
-E, --pom-string POMFILE
Prendre pour valeur de départ la version contenue dans le fichier
pom.xml spécifié. Le fichier DOIT exister. Implique --maven-update
-f, --file VERSIONFILE
Gérer le numéro de version se trouvant dans le fichier spécifié. Le
fichier est créé si nécessaire.
-F, --file-string VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE.
-g, --git-file-string [BRANCH:]VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut
master) du dépôt git. Retourner 2 si on n'est pas situé dans un dépôt
git.
-G, --git-pom-string [BRANCH:]POMFILE
Prendre pour valeur de départ la version du fichier POMFILE (qui vaut
par défaut pom.xml) dans la branche BRANCH (qui vaut par défaut master)
du dépôt git. Retourner 2 si on n'est pas situé dans un dépôt git.
--git-prel-string
Prendre pour valeur de départ le numéro de version correspondant à la
branche de release courante. Retourner 1 si la branche courante n'est
pas une branche de release, 2 si on n'est pas situé dans un dépôt git.
-s, --string VERSION
Prendre pour valeur de départ le numéro de version spécifié
--show
Afficher le numéro de version. C'est l'action par défaut
--check
Vérifier que le numéro de version est conforme aux règles du versionage
sémantique
--eq VERSION
--ne VERSION
--lt VERSION
--le VERSION
--gt VERSION
--ge VERSION
--same VERSION
--diff VERSION
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
règle du versionage sémantique). Les opérateurs --same et --diff
comparent aussi les identifiants de build.
-u, --update
Mettre à jour le numéro de version.
Les options suivantes impliquent --update:
-v, --set-version VERSION
Spécifier un nouveau numéro de version qui écrase la valeur actuelle.
Cette option ne devrait pas être utilisée en temps normal parce que cela
va contre les règles du versionage sémantique.
--prel
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le
numéro de version est obtenu à partir du nom de la branche git courante,
qui doit être de la forme release-VERSION
--menu
Afficher un menu permettant de choisir le composant de la version à
incrémenter.
-x, --major
Augmenter le numéro de version majeure.
-z, --minor
Augmenter le numéro de version mineure. C'est la valeur par défaut, sauf
avec --maven-update où c'est l'option -p qui est sélectionnée par
défaut.
-p, --patchlevel
Augmenter le numéro de patch.
-k, --keep
Ne pas augmenter le numéro de version. Cette option est surtout utile
pour *convertir* un numéro de version existant et mettre à jour le
fichier correspondant. Elle est assumée si aucune option -[xzp] n'est
spécifiée et qu'une des options -[labrSRmM] est utilisée.
-l, --prelease ID
Spécifier un identifiant de pré-release, à ajouter au numéro de version.
-a, --alpha
-b, --beta
-r, --rc
Spécifier une pré-release de type alpha, beta, ou rc. Si la version est
déjà dans ce type, augmenter la dernière valeur numérique des composants
de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
rc1 devient rc2
XXX ces fonctions ne sont pas encore implémentées
-S, --snapshot
Ajouter l'identifiant SNAPSHOT, utilisé par Maven
-R, --final, --release
Supprimer l'identifiant de prérelease, utilisé par Maven
-m, --metadata ID
Spécifier un identifiant de build, à ajouter au numéro de version.
-M, --vcs-metadata
Calculer l'identifiant de build à partir de la révision actuelle dans le
gestionnaire de version. Note: pour le moment, seul git est supporté.
--add-metadata ID
Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la
remplacer. Séparer l'identifiant de la valeur précédente avec un '.'
OPTIONS AVANCEES
--show-source
Afficher le type de source qui sera traité, i.e. pom, file, pom-string,
file-string, git-pom-string, git-file-string
--vpath VPATH
Pour les options -e et -E, spécifier le chemin XPATH du tag qui contient
le numéro de version.
--map MAPFILE
Cette option permet de spécifier un fichier de règles qui indique les
fichiers pom.xml et VERSION.txt qui doivent être mis à jour dans un
projet multi-modules pour lequel les versions doivent être mises à jour
en même temps.
Par défaut, si un fichier nommé .pver-map existe dans le répertoire de
{POM,VERSION}FILE, cette option est automatiquement activée. Ainsi, on
n'aura besoin d'utiliser cette option que si l'on désire charger un
fichier alternatif ou ignorer le fichier par défaut.
Si une valeur vide est fournie, seul le fichier {POM,VERSION}FILE est
traité. Sinon, {POM,VERSION}FILE est utilisé uniquement pour chercher le
fichier .pver-map et seuls les fichiers mentionnés dans MAPFILE sont
traités.
Le fichier MAPFILE est constitué d'un ensemble de lignes de la forme
FILESPEC:VPATH
FILESPEC est requis et prend la forme d'une spécification de chemin
relatif au répertoire de MAPFILE et identifiant un ensemble de fichiers
de version. Si FILESPEC contient des wildcards, alors les fichiers
identifiés par ce chemin sont ignorés s'ils ont déjà été traités par une
règle précédente. Si FILESPEC ne contient pas de wildcards, alors le
fichier est systématiquement traité.
VPATH désigne le chemin XPATH vers le numéro de version qu'il faut
mettre à jour dans les fichiers pom.xml. Certaines valeurs spéciales
pour VPATH sont supportées:
(vide) le chemin par défaut est utilisé pour ce fichier, c'est à
dire /project/version ou /project/parent/version en fonction
du contenu du fichier
- le fichier pom.xml n'est pas modifié (il est ignoré)
D alias pour le chemin XPATH /project/version
P alias pour le chemin XPATH /project/parent/version
Pour les fichiers VERSION.txt, VPATH doit être vide
Le fichier de version correspondant au premier fichier de la première
ligne de MAPFILE contient la version de référence, qui est dupliquée
dans tous les autres fichiers.
--allow-empty
Supporter que la version puisse ne pas être spécifiée ni trouvée. Sans
cette option, on assume que la version effective est 0.0.0 si elle n'est
pas spécifiée ni trouvée.
Avec --show et --update, ne rien afficher si la version est vide.
--convert
--no-convert
Activer (resp. désactiver) la conversion automatique. Par défaut, si la
version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
-t, --maven-update
Mettre à jour le numéro de version selons les règles de Maven. Cette
option est automatiquement activée si -e est sélectionné. Elle n'est
prise en compte qu'avec l'option -u
Si les options -R et -S ne sont pas spécifiée, alors une release est
transformée en snapshot et une snapshot en release. Avec -R, une
snapshot est transformée en release, et une release est traitée /
incrémentée normalement. Avec -S une release est transformée en
snapshot, et un snapshot est traité / incrémentée normalement.
Si l'une des options -x, -z, -p est utilisée, alors la partie spécifiée
est incrémentée selon les règles suivantes. Dans les exemples suivants,
A est un nombre quelconque, B = A + 1, et x, y et z sont des nombres
quelconques.
Avec l'option -x:
A.0.0-SNAPSHOT --> A.0.0
A.x.y-SNAPSHOT --> B.0.0
x.A.y --> x.B.0-SNAPSHOT
Avec l'option -z:
x.A.0-SNAPSHOT --> x.A.0
x.A.y-SNAPSHOT --> x.B.0
x.A.y --> x.B.0-SNAPSHOT
Avec l'option -p, qui est celle sélectionnée par défaut:
x.y.z-SNAPSHOT --> x.y.z
x.y.A --> x.y.B-SNAPSHOT"
}
pver "$@"