131 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | #!/usr/bin/env sh
 | ||
|  | 
 | ||
|  | function 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#"` | ||
|  |     #MINOR | ||
|  |     eval $3=`echo $1 | sed -e "s#$RE#\2#"` | ||
|  |     #MINOR | ||
|  |     eval $4=`echo $1 | sed -e "s#$RE#\3#"` | ||
|  |     #SPECIAL | ||
|  |     eval $5=`echo $1 | sed -e "s#$RE#\4#"` | ||
|  | } | ||
|  | 
 | ||
|  | function semverEQ() { | ||
|  |     local MAJOR_A=0 | ||
|  |     local MINOR_A=0 | ||
|  |     local PATCH_A=0 | ||
|  |     local SPECIAL_A=0 | ||
|  | 
 | ||
|  |     local MAJOR_B=0 | ||
|  |     local MINOR_B=0 | ||
|  |     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 | ||
|  | 
 | ||
|  |     if [ $MAJOR_A -ne $MAJOR_B ]; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [ $MINOR_A -ne $MINOR_B ]; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [ $PATCH_A -ne $PATCH_B ]; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [[ "_$SPECIAL_A" != "_$SPECIAL_B" ]]; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  | 
 | ||
|  | 
 | ||
|  |     return 0 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function semverLT() { | ||
|  |     local MAJOR_A=0 | ||
|  |     local MINOR_A=0 | ||
|  |     local PATCH_A=0 | ||
|  |     local SPECIAL_A=0 | ||
|  | 
 | ||
|  |     local MAJOR_B=0 | ||
|  |     local MINOR_B=0 | ||
|  |     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 | ||
|  | 
 | ||
|  |     if [ $MAJOR_A -lt $MAJOR_B ]; then | ||
|  |         return 0 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [[ $MAJOR_A -le $MAJOR_B  && $MINOR_A -lt $MINOR_B ]]; then | ||
|  |         return 0 | ||
|  |     fi | ||
|  |      | ||
|  |     if [[ $MAJOR_A -le $MAJOR_B  && $MINOR_A -le $MINOR_B && $PATCH_A -lt $PATCH_B ]]; then | ||
|  |         return 0 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [[ "_$SPECIAL_A"  == "_" ]] && [[ "_$SPECIAL_B"  == "_" ]] ; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  |     if [[ "_$SPECIAL_A"  == "_" ]] && [[ "_$SPECIAL_B"  != "_" ]] ; then | ||
|  |         return 1 | ||
|  |     fi | ||
|  |     if [[ "_$SPECIAL_A"  != "_" ]] && [[ "_$SPECIAL_B"  == "_" ]] ; then | ||
|  |         return 0 | ||
|  |     fi | ||
|  | 
 | ||
|  |     if [[ "_$SPECIAL_A" < "_$SPECIAL_B" ]]; then | ||
|  |         return 0 | ||
|  |     fi | ||
|  | 
 | ||
|  |     return 1 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function semverGT() { | ||
|  |     semverEQ $1 $2 | ||
|  |     local EQ=$? | ||
|  | 
 | ||
|  |     semverLT $1 $2 | ||
|  |     local LT=$? | ||
|  | 
 | ||
|  |     if [ $EQ -ne 0 ] && [ $LT -ne 0 ]; then | ||
|  |         return 0 | ||
|  |     else | ||
|  |         return 1 | ||
|  |     fi | ||
|  | } | ||
|  | 
 | ||
|  | if [ "___semver.sh" == "___`basename $0`" ]; then | ||
|  | 
 | ||
|  | MAJOR=0 | ||
|  | MINOR=0 | ||
|  | PATCH=0 | ||
|  | SPECIAL="" | ||
|  | 
 | ||
|  | semverParseInto $1 MAJOR MINOR PATCH SPECIAL | ||
|  | echo "$1 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL" | ||
|  | 
 | ||
|  | semverParseInto $2 MAJOR MINOR PATCH SPECIAL | ||
|  | echo "$2 -> M: $MAJOR m:$MINOR p:$PATCH s:$SPECIAL" | ||
|  | 
 | ||
|  | semverEQ $1 $2 | ||
|  | echo "$1 == $2 -> $?." | ||
|  | 
 | ||
|  | semverLT $1 $2 | ||
|  | echo "$1 < $2 -> $?." | ||
|  | 
 | ||
|  | semverGT $1 $2 | ||
|  | echo "$1 > $2 -> $?." | ||
|  | 
 | ||
|  | fi |