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() {
|
||||
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() {
|
||||
|
@ -136,7 +189,8 @@ function semver_setmetadata() {
|
|||
}
|
||||
|
||||
function semver_compare_metadata() {
|
||||
echo err
|
||||
# même algo que pour prelease
|
||||
semver_compare_prelease "$@"
|
||||
}
|
||||
|
||||
function semver_copy() {
|
||||
|
|
8
uversion
8
uversion
|
@ -35,9 +35,10 @@ OPTIONS
|
|||
--ge VERSION
|
||||
--same VERSION
|
||||
--diff VERSION
|
||||
Comparer avec la version spécifiée
|
||||
eq, ne, lt, le, gt, ge ne testent pas la valeur des metadata
|
||||
same et diff comparent aussi la valeur des metadata
|
||||
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
|
||||
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
|
||||
|
@ -151,6 +152,7 @@ if [ "$action" == check ]; then
|
|||
|
||||
elif [ "$action" == compare ]; then
|
||||
psemver_parse "$oversion" o
|
||||
|
||||
case "$operator" in
|
||||
eq|same)
|
||||
for var in valid major minor patchlevel; do
|
||||
|
|
Loading…
Reference in New Issue