This is an automated email from the ASF dual-hosted git repository.

jshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new db737f6880 [#7029] improvement(version): version parse supports 
complex suffix (#7030)
db737f6880 is described below

commit db737f6880c324b035de4eb92b39b405da2979e4
Author: mchades <[email protected]>
AuthorDate: Tue Apr 22 13:57:42 2025 +0800

    [#7029] improvement(version): version parse supports complex suffix (#7030)
    
    ### What changes were proposed in this pull request?
    
    version parse supports complex suffix
    
    ### Why are the changes needed?
    
    Fix: #7029
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    tests added
---
 .../apache/gravitino/client/GravitinoVersion.java  |  2 +-
 .../gravitino/client/TestGravitinoVersion.java     | 56 +++++++++++++++
 .../tests/unittests/test_gravitino_version.py      | 80 ++++++++++++++++++++++
 3 files changed, 137 insertions(+), 1 deletion(-)

diff --git 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
index 25fc8c50e9..3324422366 100644
--- 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
+++ 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoVersion.java
@@ -41,7 +41,7 @@ public class GravitinoVersion extends VersionDTO implements 
Comparable {
   @VisibleForTesting
   /** @return parse the version number for a version string */
   int[] getVersionNumber() {
-    Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)([-\\w]+)?");
+    Pattern pattern = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)(?:[-].+)?$");
     Matcher matcher = pattern.matcher(version());
     if (matcher.matches()) {
       int[] versionNumbers = new int[VERSION_PART_NUMBER];
diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
index 99d426b8a4..15c9c222d3 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoVersion.java
@@ -35,6 +35,13 @@ public class TestGravitinoVersion {
     assertEquals(5, versionNumber[1]);
     assertEquals(3, versionNumber[2]);
 
+    // Test a valid the version string with hyphen separator
+    version = new GravitinoVersion("2.5.3-1.0.1", "2023-01-01", "1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(2, versionNumber[0]);
+    assertEquals(5, versionNumber[1]);
+    assertEquals(3, versionNumber[2]);
+
     // Test a valid the version string with SNAPSHOT
     version = new GravitinoVersion("2.5.3-SNAPSHOT", "2023-01-01", "1234567");
     versionNumber = version.getVersionNumber();
@@ -42,6 +49,13 @@ public class TestGravitinoVersion {
     assertEquals(5, versionNumber[1]);
     assertEquals(3, versionNumber[2]);
 
+    // Test a valid the version string with SNAPSHOT and hyphen separator
+    version = new GravitinoVersion("2.5.3-SNAPSHOT-2.5.3-SNAPSHOT", 
"2023-01-01", "1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(2, versionNumber[0]);
+    assertEquals(5, versionNumber[1]);
+    assertEquals(3, versionNumber[2]);
+
     // Test a valid the version string with alpha
     version = new GravitinoVersion("2.5.3-alpha", "2023-01-01", "1234567");
     versionNumber = version.getVersionNumber();
@@ -49,6 +63,13 @@ public class TestGravitinoVersion {
     assertEquals(5, versionNumber[1]);
     assertEquals(3, versionNumber[2]);
 
+    // Test a valid the version string with alpha and hyphen separator
+    version = new GravitinoVersion("2.5.3-alpha-2.5.3-alpha", "2023-01-01", 
"1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(2, versionNumber[0]);
+    assertEquals(5, versionNumber[1]);
+    assertEquals(3, versionNumber[2]);
+
     // Test incubator version
     version = new GravitinoVersion("2.5.3-incubating", "2023-01-01", 
"1234567");
     versionNumber = version.getVersionNumber();
@@ -56,6 +77,13 @@ public class TestGravitinoVersion {
     assertEquals(5, versionNumber[1]);
     assertEquals(3, versionNumber[2]);
 
+    // Test incubator version with hyphen separator
+    version = new GravitinoVersion("2.5.3-incubating-2.5.3-incubating", 
"2023-01-01", "1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(2, versionNumber[0]);
+    assertEquals(5, versionNumber[1]);
+    assertEquals(3, versionNumber[2]);
+
     // Test incubator snapshot version
     version = new GravitinoVersion("2.5.3-incubating-SNAPSHOT", "2023-01-01", 
"1234567");
     versionNumber = version.getVersionNumber();
@@ -63,17 +91,45 @@ public class TestGravitinoVersion {
     assertEquals(5, versionNumber[1]);
     assertEquals(3, versionNumber[2]);
 
+    // Test incubator snapshot version with hyphen separator
+    version =
+        new GravitinoVersion(
+            "2.5.3-incubating-SNAPSHOT-2.5.3-incubating-SNAPSHOT", 
"2023-01-01", "1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(2, versionNumber[0]);
+    assertEquals(5, versionNumber[1]);
+    assertEquals(3, versionNumber[2]);
+
+    version =
+        new GravitinoVersion("0.9.0-incubating-SNAPSHOT-0.8.0-SNAPSHOT", 
"2023-01-01", "1234567");
+    versionNumber = version.getVersionNumber();
+    assertEquals(0, versionNumber[0]);
+    assertEquals(9, versionNumber[1]);
+    assertEquals(0, versionNumber[2]);
+
     // Test an invalid the version string with 2 part
     version = new GravitinoVersion("2.5", "2023-01-01", "1234567");
     assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
 
+    // Test an invalid the version string with 2 part and hyphen separator
+    version = new GravitinoVersion("2.5-2.5", "2023-01-01", "1234567");
+    assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
+
     // Test an invalid the version string with 4 part
     version = new GravitinoVersion("2.5.7.6", "2023-01-01", "1234567");
     assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
 
+    // Test an invalid the version string with 4 part and hyphen separator
+    version = new GravitinoVersion("2.5.7.6-2.5.7.6", "2023-01-01", "1234567");
+    assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
+
     // Test an invalid the version string with not number
     version = new GravitinoVersion("a.b.c", "2023-01-01", "1234567");
     assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
+
+    // Test an invalid the version string with not number and hyphen separator
+    version = new GravitinoVersion("a.b.c-a.b.c", "2023-01-01", "1234567");
+    assertThrows(GravitinoRuntimeException.class, version::getVersionNumber);
   }
 
   @Test
diff --git a/clients/client-python/tests/unittests/test_gravitino_version.py 
b/clients/client-python/tests/unittests/test_gravitino_version.py
index c0f3125e20..5cc0f299bf 100644
--- a/clients/client-python/tests/unittests/test_gravitino_version.py
+++ b/clients/client-python/tests/unittests/test_gravitino_version.py
@@ -31,6 +31,13 @@ class TestGravitinoVersion(unittest.TestCase):
         self.assertEqual(version.minor, 6)
         self.assertEqual(version.patch, 0)
 
+        # Test a valid the version string with hyphen separator
+        version = GravitinoVersion(VersionDTO("0.6.0-0.6.0", "2023-01-01", 
"1234567"))
+
+        self.assertEqual(version.major, 0)
+        self.assertEqual(version.minor, 6)
+        self.assertEqual(version.patch, 0)
+
         # Test a valid the version string with SNAPSHOT
         version = GravitinoVersion(
             VersionDTO("0.6.0-SNAPSHOT", "2023-01-01", "1234567")
@@ -40,6 +47,23 @@ class TestGravitinoVersion(unittest.TestCase):
         self.assertEqual(version.minor, 6)
         self.assertEqual(version.patch, 0)
 
+        # Test a valid the version string with SNAPSHOT and hyphen separator
+        version = GravitinoVersion(
+            VersionDTO("0.6.0-SNAPSHOT-0.6.0-SNAPSHOT", "2023-01-01", 
"1234567")
+        )
+
+        self.assertEqual(version.major, 0)
+        self.assertEqual(version.minor, 6)
+        self.assertEqual(version.patch, 0)
+
+        version = GravitinoVersion(
+            VersionDTO("0.9.0-incubating-SNAPSHOT-0.8.0-SNAPSHOT", 
"2023-01-01", "1234567")
+        )
+
+        self.assertEqual(version.major, 0)
+        self.assertEqual(version.minor, 9)
+        self.assertEqual(version.patch, 0)
+
         # Test a valid the version string with alpha
         version = GravitinoVersion(VersionDTO("0.6.0-alpha", "2023-01-01", 
"1234567"))
 
@@ -47,6 +71,13 @@ class TestGravitinoVersion(unittest.TestCase):
         self.assertEqual(version.minor, 6)
         self.assertEqual(version.patch, 0)
 
+        # Test a valid the version string with alpha and hyphen separator
+        version = GravitinoVersion(VersionDTO("0.6.0-alpha-0.6.0-alpha", 
"2023-01-01", "1234567"))
+
+        self.assertEqual(version.major, 0)
+        self.assertEqual(version.minor, 6)
+        self.assertEqual(version.patch, 0)
+
         # Test a valid the version string with pypi format
         version = GravitinoVersion(VersionDTO("0.6.0.dev21", "2023-01-01", 
"1234567"))
 
@@ -54,14 +85,29 @@ class TestGravitinoVersion(unittest.TestCase):
         self.assertEqual(version.minor, 6)
         self.assertEqual(version.patch, 0)
 
+        # Test a valid the version string with pypi format and hyphen separator
+        version = GravitinoVersion(VersionDTO("0.6.0.dev21-0.6.0.dev21", 
"2023-01-01", "1234567"))
+
+        self.assertEqual(version.major, 0)
+        self.assertEqual(version.minor, 6)
+        self.assertEqual(version.patch, 0)
+
         # Test an invalid the version string with 2 part
         with self.assertRaises(BadRequestException):
             GravitinoVersion(VersionDTO("0.6", "2023-01-01", "1234567"))
 
+        # Test an invalid the version string with 2 part and hyphen separator
+        with self.assertRaises(BadRequestException):
+            GravitinoVersion(VersionDTO("0.6-0.6", "2023-01-01", "1234567"))
+
         # Test an invalid the version string with not number
         with self.assertRaises(BadRequestException):
             GravitinoVersion(VersionDTO("a.b.c", "2023-01-01", "1234567"))
 
+        # Test an invalid the version string with not number and hyphen 
separator
+        with self.assertRaises(BadRequestException):
+            GravitinoVersion(VersionDTO("a.b.c-a.b.c", "2023-01-01", 
"1234567"))
+
     def test_version_compare(self):
         # test equal
         version1 = GravitinoVersion(VersionDTO("0.6.0", "2023-01-01", 
"1234567"))
@@ -69,18 +115,33 @@ class TestGravitinoVersion(unittest.TestCase):
 
         self.assertEqual(version1, version2)
 
+        version1 = GravitinoVersion(VersionDTO("0.6.0-0.7.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("0.6.0-0.7.0", "2023-01-01", 
"1234567"))
+
+        self.assertEqual(version1, version2)
+
         # test less than
         version1 = GravitinoVersion(VersionDTO("0.6.0", "2023-01-01", 
"1234567"))
         version2 = GravitinoVersion(VersionDTO("0.12.0", "2023-01-01", 
"1234567"))
 
         self.assertLess(version1, version2)
 
+        version1 = GravitinoVersion(VersionDTO("0.6.0-0.12.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("0.12.0-0.6.0", "2023-01-01", 
"1234567"))
+
+        self.assertLess(version1, version2)
+
         # test greater than
         version1 = GravitinoVersion(VersionDTO("1.6.0", "2023-01-01", 
"1234567"))
         version2 = GravitinoVersion(VersionDTO("0.6.0", "2023-01-01", 
"1234567"))
 
         self.assertGreater(version1, version2)
 
+        version1 = GravitinoVersion(VersionDTO("1.6.0-0.6.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("0.6.0-1.6.0", "2023-01-01", 
"1234567"))
+
+        self.assertGreater(version1, version2)
+
         # version1.minor < version2.minor and version1.patch > version.patch
         version1 = GravitinoVersion(VersionDTO("0.6.1", "2023-01-01", 
"1234567"))
         version2 = GravitinoVersion(VersionDTO("0.7.0", "2023-01-01", 
"1234567"))
@@ -88,6 +149,12 @@ class TestGravitinoVersion(unittest.TestCase):
         self.assertFalse(version1 > version2)
         self.assertGreater(version2, version1)
 
+        version1 = GravitinoVersion(VersionDTO("0.6.1-0.7.0", "2023-01-01", 
"1234567"))
+        version2 = GravitinoVersion(VersionDTO("0.7.0-0.6.1", "2023-01-01", 
"1234567"))
+
+        self.assertFalse(version1 > version2)
+        self.assertGreater(version2, version1)
+
         # test equal with suffix
         version1 = GravitinoVersion(
             VersionDTO("0.6.0-SNAPSHOT", "2023-01-01", "1234567")
@@ -96,6 +163,13 @@ class TestGravitinoVersion(unittest.TestCase):
 
         self.assertEqual(version1, version2)
 
+        version1 = GravitinoVersion(
+            VersionDTO("0.6.0-SNAPSHOT-0.6.0", "2023-01-01", "1234567")
+        )
+        version2 = GravitinoVersion(VersionDTO("0.6.0-0.6.0-SNAPSHOT", 
"2023-01-01", "1234567"))
+
+        self.assertEqual(version1, version2)
+
         # test compare with other class
 
         version1 = GravitinoVersion(VersionDTO("0.6.0", "2023-01-01", 
"1234567"))
@@ -103,3 +177,9 @@ class TestGravitinoVersion(unittest.TestCase):
 
         self.assertRaises(GravitinoRuntimeException, version1.__eq__, version2)
         self.assertRaises(GravitinoRuntimeException, version1.__gt__, version2)
+
+        version1 = GravitinoVersion(VersionDTO("0.6.0-0.6.0", "2023-01-01", 
"1234567"))
+        version2 = "0.6.0-0.6.0"
+
+        self.assertRaises(GravitinoRuntimeException, version1.__eq__, version2)
+        self.assertRaises(GravitinoRuntimeException, version1.__gt__, version2)

Reply via email to