diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 09:36:19 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 09:36:19 +0000 |
commit | 3d936fdee35694f7baf0b52e4f6104168ca7aea6 (patch) | |
tree | df27762550944b33bbb1eabf6e257d4f6d5e3b1d /libraries/sts-common-util/util/src/com/android/sts/common/util | |
parent | cccf2c7a682045c0e26e5b95ef8400405f3a9854 (diff) | |
parent | 539a419cf93efa512a20c07c2a0e3fbf2bff8bc9 (diff) | |
download | platform_testing-8c56750611c150d5574f2f93bc9a213513a34e20.tar.gz |
Snap for 11224086 from 539a419cf93efa512a20c07c2a0e3fbf2bff8bc9 to mainline-tzdata5-releaseaml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz5_341510010
Change-Id: Ie62f8c6f1e007a94b4cfec3b3086ba557ed3b22a
Diffstat (limited to 'libraries/sts-common-util/util/src/com/android/sts/common/util')
-rw-r--r-- | libraries/sts-common-util/util/src/com/android/sts/common/util/KernelVersion.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/libraries/sts-common-util/util/src/com/android/sts/common/util/KernelVersion.java b/libraries/sts-common-util/util/src/com/android/sts/common/util/KernelVersion.java new file mode 100644 index 000000000..c9329b969 --- /dev/null +++ b/libraries/sts-common-util/util/src/com/android/sts/common/util/KernelVersion.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sts.common.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** Tools for parsing kernel version strings */ +public final class KernelVersion implements Comparable<KernelVersion> { + public final int version; + public final int patchLevel; + public final int subLevel; + + public KernelVersion(int version, int patchLevel, int subLevel) { + this.version = version; + this.patchLevel = patchLevel; + this.subLevel = subLevel; + } + + /** + * Parse a kernel version string in the format "version.patchlevel.sublevel" - "5.4.123". + * Trailing values are ignored so `uname -r` can be parsed properly. + * + * @param versionString The version string to parse + */ + public static KernelVersion parse(String versionString) { + Pattern kernelReleasePattern = + Pattern.compile("(?<version>\\d+)\\.(?<patchLevel>\\d+)\\.(?<subLevel>\\d+)(.*)"); + Matcher matcher = kernelReleasePattern.matcher(versionString); + if (matcher.find()) { + return new KernelVersion( + Integer.parseInt(matcher.group("version")), + Integer.parseInt(matcher.group("patchLevel")), + Integer.parseInt(matcher.group("subLevel"))); + } + throw new IllegalArgumentException( + String.format("Could not parse kernel version string (%s)", versionString)); + } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + // 2147483647 (INT_MAX) + // vvppppssss + return version * 10000000 + patchLevel * 10000 + subLevel; + } + + /** Compare by version, patchlevel, and sublevel in that order. */ + public int compareTo(KernelVersion o) { + if (version != o.version) { + return Integer.compare(version, o.version); + } + if (patchLevel != o.patchLevel) { + return Integer.compare(patchLevel, o.patchLevel); + } + return Integer.compare(subLevel, o.subLevel); + } + + /** {@inheritDoc} */ + @Override + public boolean equals(Object o) { + if (o instanceof KernelVersion) { + return this.compareTo((KernelVersion) o) == 0; + } + return false; + } + + /** Format as "version.patchlevel.sublevel" */ + @Override + public String toString() { + return String.format("%d.%d.%d", version, patchLevel, subLevel); + } + + /** Format as "version.patchlevel" */ + public String toStringShort() { + return String.format("%d.%d", version, patchLevel); + } +} |