@@ -414,33 +414,58 @@ function is_valid_requirement_pattern() {
414414}
415415
416416
417+ # function 'pad_version_to_semver()'
418+ #
419+ # adds '.0' minor/bugfix version parts to a short version number (e.g. 9, 10)
420+ # to make it semver compatible
421+ #
422+ # @param1 a Java version number in short form (9, 10, etc.)
423+ # @return a right-padded semver version number (e.g. 9.0.0, 10.0.0)
424+ # ###############################################################################
425+ function pad_short_version_to_semver() {
426+ local java_ver=$1
427+ if [[ ${java_ver} =~ ^[0-9]+$ ]] ; then
428+ java_ver=" ${java_ver} .0.0"
429+ elif [[ ${java_ver} =~ ^[0-9]+\. 0$ ]] ; then
430+ java_ver=" ${java_ver} .0"
431+ fi
432+ echo ${java_ver}
433+ }
434+
435+
417436# function 'does_java_version_satisfy_requirement()'
418437#
419438# this function checks whether a given java version number
420439# satisfies the given requirement
421440#
422- # @param1 the java major version (6, 7, 8, 9, etc.)
423- # @param2 the java requirement (1.6, 1.7+, etc.)
424- # @return an exit code: 0 (satiesfies), 1 (does not), 2 (error)
441+ # the function returns with an error (exit 2) if the requirement string
442+ # is not supported
443+ #
444+ # @param1 the java version in plain form as 'java -version' returns it
445+ # @param2 the java requirement (1.6, 1.7+, 9, 9.1*, 9.2.3, etc.)
446+ # @return an exit code: 0 (satiesfies), 1 (does not), 2 (invalid requirement)
425447# ###############################################################################
426448function does_java_version_satisfy_requirement() {
427- local java_ver=$1
449+ # update short versions (9, 9.1, 10) to semver form (9.0.0, 9.1.0, 10.0.0)
450+ local java_ver=$( pad_short_version_to_semver $1 )
428451 local java_req=$2
429452
430- # matches requirements with * modifier
453+ if ! is_valid_requirement_pattern ${java_req} ; then
454+ return 2
455+
456+ # requirement ends with * modifier
431457 # e.g. 1.8*, 9*, 9.1*, 9.2.4*, 10*, 10.1*, 10.1.35*
432- if [[ ${java_req} =~ ^[0-9]+ (\. [0-9]+)* \* $ ]] ; then
433- # remove last char (*) from requirement string for comparison
434- java_req_num=${java_req:: ${# java_req} -1}
435- if [ ${java_ver} == ${java_req_num} ] ; then
458+ elif [[ ${java_req} == * \* ]] ; then
459+ # use the * modifier from the requirement string as wildcard for a 'starts with' comparison
460+ if [[ ${java_ver} == ${java_req} ]] ; then
436461 return 0
437462 else
438463 return 1
439464 fi
440465
441- # matches requirements with + modifier
466+ # requirement ends with * modifier
442467 # e.g. 1.8+, 9+, 9.1+, 9.2.4+, 10+, 10.1+, 10.1.35+
443- elif [[ ${java_req} =~ ^[0-9] + ( \. [0-9]+) * \+ $ ]] ; then
468+ elif [[ ${java_req} == * + ]] ; then
444469 local java_req_num=$( get_comparable_java_version ${java_req} )
445470 local java_ver_num=$( get_comparable_java_version ${java_ver} )
446471 if [ ${java_ver_num} -ge ${java_req_num} ] ; then
@@ -451,17 +476,17 @@ function does_java_version_satisfy_requirement() {
451476
452477 # matches standard requirements without modifier
453478 # e.g. 1.8, 9, 9.1, 9.2.4, 10, 10.1, 10.1.35
454- elif [[ ${java_req} =~ ^[0-9]+ (\. [0-9]+)* $ ]] ; then
479+ else
480+ # java version equals requirement string (1.8.0_45 == 1.8.0.45)
455481 if [ ${java_ver} == ${java_req} ] ; then
456482 return 0
483+ # java version starts with requirement string (1.8.0_45 == 1.8)
484+ elif [[ ${java_ver} == ${java_req} * ]] ; then
485+ return 0
457486 else
458487 return 1
459488 fi
460489
461- # not matching any of the above patterns
462- # results in an error
463- else
464- return 2
465490 fi
466491}
467492
0 commit comments