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

121
uversion
View File

@ -4,7 +4,7 @@ source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS semver
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
$scriptname [options]
@ -14,20 +14,23 @@ OPTIONS
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
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
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 versionnage
Vérifier que le numéro de version est conforme aux règles du versionage
sémantique
--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
XXX Pour le moment, aucune conversion n'est effectuée
--eq VERSION
--ne VERSION
--lt VERSION
@ -38,12 +41,12 @@ OPTIONS
--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 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.
-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 versionnage sémantique.
va contre les règles du versionage sémantique.
-u, --update
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
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
-R, --final, --release
Supprimer l'identifiant de prérelease
-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
source=auto
file=
git=
version=
convert=auto
operator=
@ -88,9 +96,11 @@ setbeta=
setrc=
setrelease=
setmetadata=
vcsmetadata=
parse_opts "${PRETTYOPTS[@]}" \
--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=' \
--show action=show \
--check action=check \
@ -114,26 +124,80 @@ parse_opts "${PRETTYOPTS[@]}" \
-r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \
-R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \
-m:,--metadata: '$action=update; set@ setmetadata' \
-M,--vcs-metadata '$action=update; vcsmetadata=1' \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
# Calculer la source
if [ "$source" == auto ]; then
source=file
for i in VERSION.txt version.txt; do
if [ -f "$i" ]; then
file="$i"
break
fi
done
[ -n "$file" ] || file=VERSION.txt
elif [ -n "$file" ]; then
elif [ "$source" == file ]; then
[ "$action" == auto ] && action=update
fi
[ "$source" == file -a -z "$file" ] && file=VERSION.txt
[ "$action" == auto ] && action=show
# Lire la version
if [ -n "$file" ]; then
if [ "$source" == file ]; then
[ -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
# Actions
@ -147,7 +211,6 @@ if [ "$action" == show ]; then
exit 0
fi
psemver_parse "$version"
if [ "$action" == check ]; then
[ -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"
fi
# Calculer metadata
if [ -n "$vcsmetadata" ]; then
setmetadata="$(git rev-parse --short HEAD)" || die
fi
# incrémenter les numéros de version
if [ "$incversion" == auto ]; then
if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then
@ -260,10 +328,10 @@ elif [ "$action" == update ]; then
fi
fi
if [ "$incversion" == menu ]; then
psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setvar versionx x
psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setvar versionz z
psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setvar versionp p
psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setvar versionk k
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_setmetadata "$setmetadata" z; psemver_setvar versionz z
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_setmetadata "$setmetadata" k; psemver_setvar versionk k
nextvs=(
"$versionx : maj incompatibles de l'API (-x)"
"$versionz : maj compatibles de l'API (-z)"
@ -281,11 +349,16 @@ elif [ "$action" == update ]; then
*) incversion=;;
esac
fi
case "$incversion" in
major) psemver_incmajor;;
minor) psemver_incminor;;
patchlevel) psemver_incpatchlevel;;
esac
if [ -n "$incversion" ]; then
case "$incversion" in
major) psemver_incmajor;;
minor) psemver_incminor;;
patchlevel) psemver_incpatchlevel;;
esac
# Quand on incrémente, réinitialiser la valeur de prérelease et metadata
psemver_setprelease
psemver_setmetadata
fi
# spécifier prerelease
if [ -n "$setrelease" ]; then
@ -294,11 +367,11 @@ elif [ "$action" == update ]; then
psemver_setprelease "$setprelease" || die "Identifiant de pre-release invalide: $setprelease"
fi
if [ -n "$setalpha" ]; then
:
: #XXX
elif [ -n "$setbeta" ]; then
:
: #XXX
elif [ -n "$setrc" ]; then
:
: #XXX
fi
# spécifier metadata