diff --git a/src/main/java/run/halo/app/utils/Version.java b/src/main/java/run/halo/app/utils/Version.java index 943586a63..f5ee356af 100644 --- a/src/main/java/run/halo/app/utils/Version.java +++ b/src/main/java/run/halo/app/utils/Version.java @@ -47,6 +47,11 @@ public class Version implements Comparable { */ private static final Version EMPTY_VERSION = new Version(0, 0, 0); + /** + * Maximum version. + */ + private static final Version MAXIMUM_VERSION = new Version(Long.MAX_VALUE, Long.MAX_VALUE, Long.MAX_VALUE); + /** * Major number. */ @@ -128,7 +133,7 @@ public class Version implements Comparable { } // handle unknown version if (StringUtils.equalsIgnoreCase(version, HaloConst.UNKNOWN_VERSION)) { - return Optional.of(new Version()); + return Optional.of(MAXIMUM_VERSION); } // get matcher for version Matcher matcher = PATTERN.matcher(version); diff --git a/src/main/java/run/halo/app/utils/VersionUtil.java b/src/main/java/run/halo/app/utils/VersionUtil.java index c2b7bdc20..fd4507ff5 100644 --- a/src/main/java/run/halo/app/utils/VersionUtil.java +++ b/src/main/java/run/halo/app/utils/VersionUtil.java @@ -1,11 +1,6 @@ package run.halo.app.utils; import lombok.extern.slf4j.Slf4j; -import org.springframework.util.Assert; -import run.halo.app.model.support.HaloConst; - -import java.util.Objects; -import java.util.StringTokenizer; /** * Version utility. @@ -16,85 +11,11 @@ import java.util.StringTokenizer; * @date 2020-08-03 */ @Slf4j -public class VersionUtil { - - private static final String UNDERLINE = "_"; +public final class VersionUtil { private VersionUtil() { } - @Deprecated - public static int[] getCanonicalVersion(String version) { - Assert.hasText(version, "Version must not be blank"); - - if (Objects.equals(version, HaloConst.UNKNOWN_VERSION)) { - log.warn("Unknown version will be converted to {}.{}.{}.{}", - Integer.MAX_VALUE, - Integer.MAX_VALUE, - Integer.MAX_VALUE, - Integer.MAX_VALUE); - return new int[] {Integer.MAX_VALUE, - Integer.MAX_VALUE, - Integer.MAX_VALUE, - Integer.MAX_VALUE}; - } - - int[] canonicalVersion = new int[] {1, 1, 0, 0}; - StringTokenizer tokenizer = new StringTokenizer(version, "."); - String token = tokenizer.nextToken(); - canonicalVersion[0] = Integer.parseInt(token); - token = tokenizer.nextToken(); - StringTokenizer subTokenizer; - if (!token.contains(UNDERLINE)) { - canonicalVersion[1] = Integer.parseInt(token); - } else { - subTokenizer = new StringTokenizer(token, UNDERLINE); - canonicalVersion[1] = Integer.parseInt(subTokenizer.nextToken()); - canonicalVersion[3] = Integer.parseInt(subTokenizer.nextToken()); - } - - if (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (!token.contains(UNDERLINE)) { - canonicalVersion[2] = Integer.parseInt(token); - if (tokenizer.hasMoreTokens()) { - canonicalVersion[3] = Integer.parseInt(tokenizer.nextToken()); - } - } else { - subTokenizer = new StringTokenizer(token, UNDERLINE); - canonicalVersion[2] = Integer.parseInt(subTokenizer.nextToken()); - canonicalVersion[3] = Integer.parseInt(subTokenizer.nextToken()); - } - } - - return canonicalVersion; - } - - @Deprecated - public static int compare(String version1, String version2) { - log.debug("Comparing version [{}] with [{}]", version1, version2); - - int[] canonicalVersion1 = getCanonicalVersion(version1); - int[] canonicalVersion2 = getCanonicalVersion(version2); - if (canonicalVersion1[0] < canonicalVersion2[0]) { - return -1; - } else if (canonicalVersion1[0] > canonicalVersion2[0]) { - return 1; - } else if (canonicalVersion1[1] < canonicalVersion2[1]) { - return -1; - } else if (canonicalVersion1[1] > canonicalVersion2[1]) { - return 1; - } else if (canonicalVersion1[2] < canonicalVersion2[2]) { - return -1; - } else if (canonicalVersion1[2] > canonicalVersion2[2]) { - return 1; - } else if (canonicalVersion1[3] < canonicalVersion2[3]) { - return -1; - } else { - return canonicalVersion1[3] > canonicalVersion2[3] ? 1 : 0; - } - } - /** * Compare version. * diff --git a/src/test/java/run/halo/app/utils/VersionUtilTest.java b/src/test/java/run/halo/app/utils/VersionUtilTest.java index fdd22db3d..c11adbf28 100644 --- a/src/test/java/run/halo/app/utils/VersionUtilTest.java +++ b/src/test/java/run/halo/app/utils/VersionUtilTest.java @@ -4,7 +4,8 @@ import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Test; import run.halo.app.model.support.HaloConst; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author ryanwang @@ -29,17 +30,7 @@ class VersionUtilTest { RandomStringUtils.randomNumeric(1), RandomStringUtils.randomNumeric(2), RandomStringUtils.randomNumeric(3)); - assertFalse(VersionUtil.compareVersion(HaloConst.UNKNOWN_VERSION, randomVersion)); + assertTrue(VersionUtil.compareVersion(HaloConst.UNKNOWN_VERSION, randomVersion)); } - @Test - void unknownOrEmptyCanonicalVersionTest() { - assertThrows(IllegalArgumentException.class, () -> VersionUtil.getCanonicalVersion(null)); - int[] version = VersionUtil.getCanonicalVersion(HaloConst.UNKNOWN_VERSION); - assertNotNull(version); - assertEquals(4, version.length); - for (int v : version) { - assertEquals(Integer.MAX_VALUE, v); - } - } } \ No newline at end of file