semver.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/usr/bin/env sh
  2. function semverParseInto() {
  3. local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)'
  4. #MAJOR
  5. eval $2=`echo $1 | sed -e "s#$RE#\1#"`
  6. #MINOR
  7. eval $3=`echo $1 | sed -e "s#$RE#\2#"`
  8. #MINOR
  9. eval $4=`echo $1 | sed -e "s#$RE#\3#"`
  10. #SPECIAL
  11. eval $5=`echo $1 | sed -e "s#$RE#\4#"`
  12. }
  13. function semverEQ() {
  14. local MAJOR_A=0
  15. local MINOR_A=0
  16. local PATCH_A=0
  17. local SPECIAL_A=0
  18. local MAJOR_B=0
  19. local MINOR_B=0
  20. local PATCH_B=0
  21. local SPECIAL_B=0
  22. semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A
  23. semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B
  24. if [ $MAJOR_A -ne $MAJOR_B ]; then
  25. return 1
  26. fi
  27. if [ $MINOR_A -ne $MINOR_B ]; then
  28. return 1
  29. fi
  30. if [ $PATCH_A -ne $PATCH_B ]; then
  31. return 1
  32. fi
  33. if [[ "_$SPECIAL_A" != "_$SPECIAL_B" ]]; then
  34. return 1
  35. fi
  36. return 0
  37. }
  38. function semverLT() {
  39. local MAJOR_A=0
  40. local MINOR_A=0
  41. local PATCH_A=0
  42. local SPECIAL_A=0
  43. local MAJOR_B=0
  44. local MINOR_B=0
  45. local PATCH_B=0
  46. local SPECIAL_B=0
  47. semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A
  48. semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B
  49. if [ $MAJOR_A -lt $MAJOR_B ]; then
  50. return 0
  51. fi
  52. if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -lt $MINOR_B ]]; then
  53. return 0
  54. fi
  55. if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -le $MINOR_B && $PATCH_A -lt $PATCH_B ]]; then
  56. return 0
  57. fi
  58. if [[ "_$SPECIAL_A" == "_" ]] && [[ "_$SPECIAL_B" == "_" ]] ; then
  59. return 1
  60. fi
  61. if [[ "_$SPECIAL_A" == "_" ]] && [[ "_$SPECIAL_B" != "_" ]] ; then
  62. return 1
  63. fi
  64. if [[ "_$SPECIAL_A" != "_" ]] && [[ "_$SPECIAL_B" == "_" ]] ; then
  65. return 0
  66. fi
  67. if [[ "_$SPECIAL_A" < "_$SPECIAL_B" ]]; then
  68. return 0
  69. fi
  70. return 1
  71. }
  72. function semverGT() {
  73. semverEQ $1 $2
  74. local EQ=$?
  75. semverLT $1 $2
  76. local LT=$?
  77. if [ $EQ -ne 0 ] && [ $LT -ne 0 ]; then
  78. return 0
  79. else
  80. return 1
  81. fi
  82. }
  83. if [ "___semver.sh" == "___`basename $0`" ]; then
  84. MAJOR=0
  85. MINOR=0
  86. PATCH=0
  87. SPECIAL=""
  88. semverParseInto $1 MAJOR MINOR PATCH SPECIAL
  89. echo "$1 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL"
  90. semverParseInto $2 MAJOR MINOR PATCH SPECIAL
  91. echo "$2 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL"
  92. semverEQ $1 $2
  93. echo "$1 == $2 -> $?."
  94. semverLT $1 $2
  95. echo "$1 < $2 -> $?."
  96. semverGT $1 $2
  97. echo "$1 > $2 -> $?."
  98. fi