From c3243fddb1cb14de69bd678663fd6153b2931dc4 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 18 Jan 2014 23:07:41 +0400 Subject: [PATCH] =?UTF-8?q?impl=C3=A9menter=20la=20comparaison?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ulib/semver | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++-- uversion | 8 +++++--- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/ulib/semver b/ulib/semver index da21919..bde408a 100644 --- a/ulib/semver +++ b/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() { diff --git a/uversion b/uversion index 67806f0..acb28fb 100755 --- a/uversion +++ b/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