ajouter les options -g et -M

This commit is contained in:
Jephté Clain 2015-03-05 09:46:23 +04:00
parent 6fa1758a80
commit 632c8cbedc
1 changed files with 97 additions and 24 deletions

109
uversion
View File

@ -4,7 +4,7 @@ source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS semver urequire DEFAULTS semver
function display_help() { function display_help() {
uecho "$scriptname: gérer des numéros de version selon les règles du versionnage sémantique v2.0.0 (http://semver.org/) uecho "$scriptname: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
USAGE USAGE
$scriptname [options] $scriptname [options]
@ -14,20 +14,23 @@ OPTIONS
Gérer le numéro de version se trouvant dans le fichier spécifié. Le Gérer le numéro de version se trouvant dans le fichier spécifié. Le
fichier est créé si nécessaire. C'est l'option par défaut si un fichier fichier est créé si nécessaire. C'est l'option par défaut si un fichier
nommé VERSION.txt se trouve dans le répertoire courant. nommé VERSION.txt se trouve dans le répertoire courant.
-g, --git [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 situé dans le répertoire courant.
-s, --string VERSION -s, --string VERSION
Prendre pour valeur de départ le numéro de version spécifié Prendre pour valeur de départ le numéro de version spécifié
--show --show
Afficher le numéro de version. C'est l'action par défaut Afficher le numéro de version. C'est l'action par défaut
--check --check
Vérifier que le numéro de version est conforme aux règles du versionnage Vérifier que le numéro de version est conforme aux règles du versionage
sémantique sémantique
--convert --convert
--no-convert --no-convert
Activer (resp. désactiver) la conversion automatique. Par défaut, si la 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 version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
XXX Pour le moment, aucune conversion n'est effectuée
--eq VERSION --eq VERSION
--ne VERSION --ne VERSION
--lt VERSION --lt VERSION
@ -38,12 +41,12 @@ OPTIONS
--diff VERSION --diff VERSION
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt, 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 --le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
règle du versionnage sémantique). Les opérateurs --same et --diff règle du versionage sémantique). Les opérateurs --same et --diff
comparent aussi les identifiants de build. comparent aussi les identifiants de build.
-v, --set-version VERSION -v, --set-version VERSION
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. 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 Cette option ne devrait pas être utilisée en temps normal parce que cela
va contre les règles du versionnage sémantique. va contre les règles du versionage sémantique.
-u, --update -u, --update
Mettre à jour le numéro de version. Mettre à jour le numéro de version.
@ -66,16 +69,21 @@ OPTIONS
déjà dans ce type, augmenter la dernière valeur numérique des composants 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, de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
rc1 devient rc2 rc1 devient rc2
XXX ces fonctions ne sont pas encore implémentées
-R, --final, --release -R, --final, --release
Supprimer l'identifiant de prérelease Supprimer l'identifiant de prérelease
-m, --metadata ID -m, --metadata ID
Spécifier un identifiant de build, à ajouter au numéro de version." Spécifier un identifiant de build, à ajouter au numéro de version.
-M, --vcs-metadata
Spécifier l'identifiant à partir de la révision actuelle dans le
gestionnaire de version. Note: pour le moment, seul git est supporté."
} }
action=auto action=auto
source=auto source=auto
file= file=
git=
version= version=
convert=auto convert=auto
operator= operator=
@ -88,9 +96,11 @@ setbeta=
setrc= setrc=
setrelease= setrelease=
setmetadata= setmetadata=
vcsmetadata=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-f:,--file: '$set@ file; source=' \ -f:,--file: '$set@ file; source=file' \
-g:,--git: '$set@ git; source=git' \
-s:,--string: '$set@ version; source=' \ -s:,--string: '$set@ version; source=' \
--show action=show \ --show action=show \
--check action=check \ --check action=check \
@ -114,26 +124,80 @@ parse_opts "${PRETTYOPTS[@]}" \
-r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \ -r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \
-R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \ -R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \
-m:,--metadata: '$action=update; set@ setmetadata' \ -m:,--metadata: '$action=update; set@ setmetadata' \
-M,--vcs-metadata '$action=update; vcsmetadata=1' \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
# Calculer la source # Calculer la source
if [ "$source" == auto ]; then if [ "$source" == auto ]; then
source=file
for i in VERSION.txt version.txt; do for i in VERSION.txt version.txt; do
if [ -f "$i" ]; then if [ -f "$i" ]; then
file="$i" file="$i"
break break
fi fi
done done
[ -n "$file" ] || file=VERSION.txt elif [ "$source" == file ]; then
elif [ -n "$file" ]; then
[ "$action" == auto ] && action=update [ "$action" == auto ] && action=update
fi fi
[ "$source" == file -a -z "$file" ] && file=VERSION.txt
[ "$action" == auto ] && action=show [ "$action" == auto ] && action=show
# Lire la version # Lire la version
if [ -n "$file" ]; then if [ "$source" == file ]; then
[ -f "$file" ] && version="$(<"$file")" [ -f "$file" ] && version="$(<"$file")"
[ -n "$version" ] || version=0.0.0 [ -n "$version" ] || version=0.0.0
elif [ "$source" == git ]; then
splitfsep2 "$git" / branch name
[ -n "$branch" ] || branch=master
[ -n "$name" ] || name=VERSION.txt
if git rev-parse --verify --quiet "$branch:$name" >/dev/null; then
version="$(git cat-file blob "$branch:$name" 2>/dev/null)"
fi
[ -n "$version" ] || version=0.0.0
fi
# Conversion éventuelle du numéro de version
psemver_parse "$version"
if [ "$convert" == auto ]; then
[ -z "$valid" ] && convert=1 || convert=
fi
if [ -n "$convert" ]; then
mversion="$(awkrun version="$version" '
function nbdot(s) {
gsub(/[^.]/, "", s)
return length(s)
}
BEGIN {
if (version ~ /[0-9]+(\.[0-9]+)*(-r[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9])?$/) {
metadata = ""
# traiter release date
pos = length(version) - 12
if (pos > 0) {
rdate = substr(version, pos + 3)
metadata = substr(rdate, 7, 4) substr(rdate, 4, 2) substr(rdate, 1, 2)
version = substr(version, 1, pos)
}
# traiter metadata
match(version, /[0-9]+(\.[0-9]+(\.[0-9]+)?)?/)
pos = RLENGTH
if (pos < length(version)) {
if (metadata != "") metadata = metadata "."
metadata = metadata substr(version, pos + 2)
}
version = substr(version, 1, pos)
# ajouter les éléments manquants
while (nbdot(version) < 2) {
version = version ".0"
}
# afficher la version migrée au format semver
if (metadata != "") print version "+" metadata
else print version
}
}')"
if [ -n "$mversion" ]; then
version="$mversion"
psemver_parse "$version"
fi
fi fi
# Actions # Actions
@ -147,7 +211,6 @@ if [ "$action" == show ]; then
exit 0 exit 0
fi fi
psemver_parse "$version"
if [ "$action" == check ]; then if [ "$action" == check ]; then
[ -n "$valid" ] || die "Numéro de version invalide: $version" [ -n "$valid" ] || die "Numéro de version invalide: $version"
@ -251,6 +314,11 @@ elif [ "$action" == update ]; then
psemver_setversion "$setversion" "" || die "Numéro de version invalide: $setversion" psemver_setversion "$setversion" "" || die "Numéro de version invalide: $setversion"
fi fi
# Calculer metadata
if [ -n "$vcsmetadata" ]; then
setmetadata="$(git rev-parse --short HEAD)" || die
fi
# incrémenter les numéros de version # incrémenter les numéros de version
if [ "$incversion" == auto ]; then if [ "$incversion" == auto ]; then
if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then
@ -260,10 +328,10 @@ elif [ "$action" == update ]; then
fi fi
fi fi
if [ "$incversion" == menu ]; then if [ "$incversion" == menu ]; then
psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setvar versionx x psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setmetadata "$setmetadata" x; psemver_setvar versionx x
psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setvar versionz z psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setmetadata "$setmetadata" z; psemver_setvar versionz z
psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setvar versionp p psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setmetadata "$setmetadata" p; psemver_setvar versionp p
psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setvar versionk k psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setmetadata "$setmetadata" k; psemver_setvar versionk k
nextvs=( nextvs=(
"$versionx : maj incompatibles de l'API (-x)" "$versionx : maj incompatibles de l'API (-x)"
"$versionz : maj compatibles de l'API (-z)" "$versionz : maj compatibles de l'API (-z)"
@ -281,11 +349,16 @@ elif [ "$action" == update ]; then
*) incversion=;; *) incversion=;;
esac esac
fi fi
if [ -n "$incversion" ]; then
case "$incversion" in case "$incversion" in
major) psemver_incmajor;; major) psemver_incmajor;;
minor) psemver_incminor;; minor) psemver_incminor;;
patchlevel) psemver_incpatchlevel;; patchlevel) psemver_incpatchlevel;;
esac esac
# Quand on incrémente, réinitialiser la valeur de prérelease et metadata
psemver_setprelease
psemver_setmetadata
fi
# spécifier prerelease # spécifier prerelease
if [ -n "$setrelease" ]; then if [ -n "$setrelease" ]; then
@ -294,11 +367,11 @@ elif [ "$action" == update ]; then
psemver_setprelease "$setprelease" || die "Identifiant de pre-release invalide: $setprelease" psemver_setprelease "$setprelease" || die "Identifiant de pre-release invalide: $setprelease"
fi fi
if [ -n "$setalpha" ]; then if [ -n "$setalpha" ]; then
: : #XXX
elif [ -n "$setbeta" ]; then elif [ -n "$setbeta" ]; then
: : #XXX
elif [ -n "$setrc" ]; then elif [ -n "$setrc" ]; then
: : #XXX
fi fi
# spécifier metadata # spécifier metadata