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)