File tree Expand file tree Collapse file tree 1 file changed +23
-10
lines changed
Expand file tree Collapse file tree 1 file changed +23
-10
lines changed Original file line number Diff line number Diff line change @@ -105,18 +105,31 @@ compare_versions() {
105105 local version1=$1
106106 local version2=$2
107107
108- # Remove prerelease parts for comparison
109- local v1_stable=$( echo " $version1 " | sed -E ' s/(-.*)?$//' )
110- local v2_stable=$( echo " $version2 " | sed -E ' s/(-.*)?$//' )
111-
112- if [[ " $v1_stable " == " $v2_stable " ]]; then
113- echo 0
114- return
108+ local v1_base=${version1%% -* }
109+ local v2_base=${version2%% -* }
110+ local v1_pre=" "
111+ local v2_pre=" "
112+
113+ [[ " $version1 " == * -* ]] && v1_pre=${version1#* -}
114+ [[ " $version2 " == * -* ]] && v2_pre=${version2#* -}
115+
116+ # When base versions match, a stable release outranks any prerelease
117+ if [[ " $v1_base " == " $v2_base " ]]; then
118+ if [[ -z " $v1_pre " && -n " $v2_pre " ]]; then
119+ echo 1
120+ return
121+ elif [[ -n " $v1_pre " && -z " $v2_pre " ]]; then
122+ echo -1
123+ return
124+ elif [[ " $version1 " == " $version2 " ]]; then
125+ echo 0
126+ return
127+ fi
115128 fi
116129
117- # Use sort -V to compare versions
118- local sorted=$( printf " %s\n%s" " $v1_stable " " $v2_stable " | sort -V)
119- if [[ " $( echo " $sorted " | head -1) " == " $v1_stable " ]]; then
130+ # Fallback to version sort for differing bases or two prereleases
131+ local sorted=$( printf " %s\n%s" " $version1 " " $version2 " | sort -V)
132+ if [[ " $( echo " $sorted " | head -1) " == " $version1 " ]]; then
120133 echo -1
121134 else
122135 echo 1
You can’t perform that action at this time.
0 commit comments