Skip to content

Commit

Permalink
[GR-57280] Fix sort order of JDK listing by select_jdk.
Browse files Browse the repository at this point in the history
PullRequest: mx/1827
  • Loading branch information
dougxc committed Aug 19, 2024
2 parents 7f24fe3 + 4432e9b commit 93bee43
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
14 changes: 7 additions & 7 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@
"labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.2+13-jvmci-23.1-b33-sulong", "platformspecific": true },
"graalvm-ee-21": {"name": "graalvm-java21", "version": "23.1.3", "platformspecific": true },

"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+9", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+9-jvmci-b01", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+9-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+9-jvmci-b01-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+9-jvmci-b01", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+9-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+9-jvmci-b01-sulong", "platformspecific": true }
"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+11", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+11-jvmci-b01", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+11-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+11-jvmci-b01-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+11-jvmci-b01", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+11-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+11-jvmci-b01-sulong", "platformspecific": true }
},

"eclipse": {
Expand Down
2 changes: 1 addition & 1 deletion src/mx/_impl/mx.py
Original file line number Diff line number Diff line change
Expand Up @@ -18196,7 +18196,7 @@ def alarm_handler(signum, frame):
_CACHE_DIR = get_env('MX_CACHE_DIR', join(dot_mx_dir(), 'cache'))

# The version must be updated for every PR (checked in CI) and the comment should reflect the PR's issue
version = VersionSpec("7.29.3") # GR-57188 Too verbose output when using mx maven_deploy()
version = VersionSpec("7.29.4") # GR-57280 select_jdk sort order sometimes wrong

_mx_start_datetime = datetime.utcnow()

Expand Down
19 changes: 18 additions & 1 deletion src/mx/_impl/select_jdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,25 @@ def as_jdk_cache_line(self):
timestamp = JDKInfo.release_timestamp(self.java_home)
return f'{self.java_home}|{self.java_specification_version}|{self.java_version}|{self.java_vm_version}|{timestamp}'

@staticmethod
def zero_pad_int(version_element):
if isinstance(version_element, str) and version_element.isdigit():
return f"{int(version_element):016}"
return version_element

@staticmethod
def zero_pad_ints(version_tuple):
"""
Adds leading zeroes to any numeric strings in `version_tuple` so that
lexicographic ordering is also numeric ordering.
"""
return tuple((JDKInfo.zero_pad_int(e) for e in version_tuple))

def sort_key(self):
return (self.name, self.java_specification_version, self.java_vm_version, self.java_home)
# Splits a VM version into its components: "24+10-jvmci-b01" -> "24", "10", "jvmci", "b01"
java_vm_version = JDKInfo.zero_pad_ints(re.split(r'[^0-9A-Za-z]', self.java_vm_version))
key = (self.name, self.java_specification_version, java_vm_version, self.java_home)
return JDKInfo.zero_pad_ints(key)

def __lt__(self, other):
return self.sort_key() < other.sort_key()
Expand Down

0 comments on commit 93bee43

Please sign in to comment.