From 4432e9b2b5c5c596c3cc31bf8e24c2f38502dc59 Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Wed, 14 Aug 2024 17:59:22 +0200 Subject: [PATCH] fix sort order of JDK listing by select_jdk --- common.json | 14 +++++++------- src/mx/_impl/mx.py | 2 +- src/mx/_impl/select_jdk.py | 19 ++++++++++++++++++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/common.json b/common.json index 3a48ad42..1e47cd9b 100644 --- a/common.json +++ b/common.json @@ -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": { diff --git a/src/mx/_impl/mx.py b/src/mx/_impl/mx.py index a1315668..85457e7e 100755 --- a/src/mx/_impl/mx.py +++ b/src/mx/_impl/mx.py @@ -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() diff --git a/src/mx/_impl/select_jdk.py b/src/mx/_impl/select_jdk.py index 4d5aa0cf..241cf7a1 100755 --- a/src/mx/_impl/select_jdk.py +++ b/src/mx/_impl/select_jdk.py @@ -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()