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 "$@"
 |