Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 46 additions & 30 deletions semver.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
#!/usr/bin/env sh
#!/bin/bash

function semverParseInto() {
semverParseInto() {
local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)'
#MAJOR
eval $2=`echo $1 | sed -e "s#$RE#\1#"`
# shellcheck disable=SC2001
eval "$2"="$(echo "$1" | sed -e "s#$RE#\1#")"
#MINOR
eval $3=`echo $1 | sed -e "s#$RE#\2#"`
# shellcheck disable=SC2001
eval "$3"="$(echo "$1" | sed -e "s#$RE#\2#")"
#MINOR
eval $4=`echo $1 | sed -e "s#$RE#\3#"`
# shellcheck disable=SC2001
eval "$4"="$(echo "$1" | sed -e "s#$RE#\3#")"
#SPECIAL
eval $5=`echo $1 | sed -e "s#$RE#\4#"`
# shellcheck disable=SC2001
eval "$5"="$(echo "$1" | sed -e "s#$RE#\4#")"
}

function semverEQ() {
semverEQ() {
local MAJOR_A=0
local MINOR_A=0
local PATCH_A=0
Expand All @@ -23,18 +27,18 @@ function semverEQ() {
local PATCH_B=0
local SPECIAL_B=0

semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A
semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B
semverParseInto "$1" MAJOR_A MINOR_A PATCH_A SPECIAL_A
semverParseInto "$2" MAJOR_B MINOR_B PATCH_B SPECIAL_B

if [ $MAJOR_A -ne $MAJOR_B ]; then
if [[ "$MAJOR_A" -ne "$MAJOR_B" ]]; then
return 1
fi

if [ $MINOR_A -ne $MINOR_B ]; then
if [[ "$MINOR_A" -ne "$MINOR_B" ]]; then
return 1
fi

if [ $PATCH_A -ne $PATCH_B ]; then
if [[ "$PATCH_A" -ne "$PATCH_B" ]]; then
return 1
fi

Expand All @@ -47,7 +51,7 @@ function semverEQ() {

}

function semverLT() {
semverLT() {
local MAJOR_A=0
local MINOR_A=0
local PATCH_A=0
Expand All @@ -58,21 +62,33 @@ function semverLT() {
local PATCH_B=0
local SPECIAL_B=0

semverParseInto $1 MAJOR_A MINOR_A PATCH_A SPECIAL_A
semverParseInto $2 MAJOR_B MINOR_B PATCH_B SPECIAL_B
semverParseInto "$1" MAJOR_A MINOR_A PATCH_A SPECIAL_A
semverParseInto "$2" MAJOR_B MINOR_B PATCH_B SPECIAL_B

if [ $MAJOR_A -lt $MAJOR_B ]; then
if [[ "$MAJOR_A" -lt "$MAJOR_B" ]]; then
return 0
fi

if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -lt $MINOR_B ]]; then
if [[ "$MAJOR_A" -gt "$MAJOR_B" ]]; then
return 1
fi

if [[ "$MINOR_A" -lt "$MINOR_B" ]]; then
return 0
fi

if [[ "$MINOR_A" -gt "$MINOR_B" ]]; then
return 1
fi

if [[ $MAJOR_A -le $MAJOR_B && $MINOR_A -le $MINOR_B && $PATCH_A -lt $PATCH_B ]]; then
if [[ "$PATCH_A" -lt "$PATCH_B" ]]; then
return 0
fi

if [[ "$PATCH_A" -gt "$PATCH_B" ]]; then
return 1
fi

if [[ "_$SPECIAL_A" == "_" ]] && [[ "_$SPECIAL_B" == "_" ]] ; then
return 1
fi
Expand All @@ -91,40 +107,40 @@ function semverLT() {

}

function semverGT() {
semverEQ $1 $2
local EQ=$?
semverGT() {
semverEQ "$1" "$2"
local EQ="$?"

semverLT $1 $2
local LT=$?
semverLT "$1" "$2"
local LT="$?"

if [ $EQ -ne 0 ] && [ $LT -ne 0 ]; then
if [[ "$EQ" -ne 0 ]] && [[ "$LT" -ne 0 ]]; then
return 0
else
return 1
fi
}

if [ "___semver.sh" == "___`basename $0`" ]; then
if [[ "___semver.sh" == "___$(basename "$0")" ]]; then

MAJOR=0
MINOR=0
PATCH=0
SPECIAL=""

semverParseInto $1 MAJOR MINOR PATCH SPECIAL
semverParseInto "$1" MAJOR MINOR PATCH SPECIAL
echo "$1 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL"

semverParseInto $2 MAJOR MINOR PATCH SPECIAL
semverParseInto "$2" MAJOR MINOR PATCH SPECIAL
echo "$2 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL"

semverEQ $1 $2
semverEQ "$1" "$2"
echo "$1 == $2 -> $?."

semverLT $1 $2
semverLT "$1" "$2"
echo "$1 < $2 -> $?."

semverGT $1 $2
semverGT "$1" "$2"
echo "$1 > $2 -> $?."

fi