205 lines
10 KiB
Bash
Executable File
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/ulib" || exit 1
|
|
urequire DEFAULTS 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 "$@"
|