implémenter la comparaison
This commit is contained in:
parent
aafca0172d
commit
c3243fddb1
58
ulib/semver
58
ulib/semver
|
@ -122,7 +122,60 @@ function semver_setprelease() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function semver_compare_prelease() {
|
function semver_compare_prelease() {
|
||||||
echo err
|
local -a __cp_pr1 __cp_pr2 __cp_len i __cp_v1 __cp_v2
|
||||||
|
array_copy __cp_pr1 "$1"
|
||||||
|
array_copy __cp_pr2 "$2"
|
||||||
|
if [ ${#__cp_pr1[*]} -eq 0 -a ${#__cp_pr2[*]} -eq 0 ]; then
|
||||||
|
# final == final
|
||||||
|
echo eq; return
|
||||||
|
elif [ ${#__cp_pr1[*]} -gt 0 -a ${#__cp_pr2[*]} -eq 0 ]; then
|
||||||
|
# prelease < final
|
||||||
|
echo lt; return
|
||||||
|
elif [ ${#__cp_pr1[*]} -eq 0 -a ${#__cp_pr2[*]} -gt 0 ]; then
|
||||||
|
# final > prelease
|
||||||
|
echo gt; return
|
||||||
|
fi
|
||||||
|
# calculer le nombre d'éléments à comparer dans les deux tableaux soit
|
||||||
|
# min(len(__cp_pr1), len(__cp_pr2))
|
||||||
|
__cp_len=${#__cp_pr1[*]}
|
||||||
|
[ ${#__cp_pr2[*]} -lt $__cp_len ] && __cp_len=${#__cp_pr2[*]}
|
||||||
|
# comparer __cp_len éléments
|
||||||
|
i=0
|
||||||
|
while [ $i -lt $__cp_len ]; do
|
||||||
|
__cp_v1="${__cp_pr1[$i]}"
|
||||||
|
__cp_v2="${__cp_pr2[$i]}"
|
||||||
|
if [ "$__cp_v1" == "$__cp_v2" ]; then
|
||||||
|
:
|
||||||
|
elif isnum "$__cp_v1" && isnum "$__cp_v2"; then
|
||||||
|
if [ $__cp_v1 -lt $__cp_v2 ]; then
|
||||||
|
echo lt; return
|
||||||
|
elif [ $__cp_v1 -gt $__cp_v2 ]; then
|
||||||
|
echo gt; return
|
||||||
|
fi
|
||||||
|
elif isnum "$__cp_v1"; then
|
||||||
|
echo lt; return
|
||||||
|
elif isnum "$__cp_v2"; then
|
||||||
|
echo gt; return
|
||||||
|
else
|
||||||
|
# comparaison chaine
|
||||||
|
if [ "$(echo "$__cp_v1"$'\n'"$__cp_v2" | LANG=C sort | head -n1)" == "$__cp_v1" ]; then
|
||||||
|
echo lt; return
|
||||||
|
else
|
||||||
|
echo gt; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
i=$(($i + 1))
|
||||||
|
done
|
||||||
|
# comparer ce qui reste
|
||||||
|
__cp_pr1=("${__cp_pr1[@]:$__cp_len}")
|
||||||
|
__cp_pr2=("${__cp_pr2[@]:$__cp_len}")
|
||||||
|
if [ ${#__cp_pr1[*]} -gt 0 ]; then
|
||||||
|
echo gt; return
|
||||||
|
elif [ ${#__cp_pr2[*]} -gt 0 ]; then
|
||||||
|
echo lt; return
|
||||||
|
fi
|
||||||
|
# en définitive, c'est égal
|
||||||
|
echo eq
|
||||||
}
|
}
|
||||||
|
|
||||||
function semver_setmetadata() {
|
function semver_setmetadata() {
|
||||||
|
@ -136,7 +189,8 @@ function semver_setmetadata() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function semver_compare_metadata() {
|
function semver_compare_metadata() {
|
||||||
echo err
|
# même algo que pour prelease
|
||||||
|
semver_compare_prelease "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
function semver_copy() {
|
function semver_copy() {
|
||||||
|
|
8
uversion
8
uversion
|
@ -35,9 +35,10 @@ OPTIONS
|
||||||
--ge VERSION
|
--ge VERSION
|
||||||
--same VERSION
|
--same VERSION
|
||||||
--diff VERSION
|
--diff VERSION
|
||||||
Comparer avec la version spécifiée
|
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
|
||||||
eq, ne, lt, le, gt, ge ne testent pas la valeur des metadata
|
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
|
||||||
same et diff comparent aussi la valeur des metadata
|
règle du versionnage sémantique). Les opérateurs --same et --diff
|
||||||
|
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
|
||||||
|
@ -151,6 +152,7 @@ if [ "$action" == check ]; then
|
||||||
|
|
||||||
elif [ "$action" == compare ]; then
|
elif [ "$action" == compare ]; then
|
||||||
psemver_parse "$oversion" o
|
psemver_parse "$oversion" o
|
||||||
|
|
||||||
case "$operator" in
|
case "$operator" in
|
||||||
eq|same)
|
eq|same)
|
||||||
for var in valid major minor patchlevel; do
|
for var in valid major minor patchlevel; do
|
||||||
|
|
Loading…
Reference in New Issue