#!/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 "$@"