ajouter les options -g et -M
This commit is contained in:
parent
6fa1758a80
commit
632c8cbedc
109
uversion
109
uversion
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue