Skip to content

Commit 792b762

Browse files
committed
PYTHON-1021 - Support git describe based server versions
1 parent a3cf3cf commit 792b762

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

test/version.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def _padded(cls, iter, length, padding=0):
3232
@classmethod
3333
def from_string(cls, version_string):
3434
mod = 0
35+
bump_patch_level = False
3536
if version_string.endswith("+"):
3637
version_string = version_string[0:-1]
3738
mod = 1
@@ -42,19 +43,43 @@ def from_string(cls, version_string):
4243
version_string = version_string[0:-1]
4344
mod = -1
4445
# Deal with '-rcX' substrings
45-
if version_string.find('-rc') != -1:
46+
if '-rc' in version_string:
4647
version_string = version_string[0:version_string.find('-rc')]
4748
mod = -1
49+
# Deal with git describe generated substrings
50+
elif '-' in version_string:
51+
version_string = version_string[0:version_string.find('-')]
52+
mod = -1
53+
bump_patch_level = True
54+
4855

4956
version = [int(part) for part in version_string.split(".")]
5057
version = cls._padded(version, 3)
58+
# Make from_string and from_version_array agree. For example:
59+
# MongoDB Enterprise > db.runCommand('buildInfo').versionArray
60+
# [ 3, 2, 1, -100 ]
61+
# MongoDB Enterprise > db.runCommand('buildInfo').version
62+
# 3.2.0-97-g1ef94fe
63+
if bump_patch_level:
64+
version[-1] += 1
5165
version.append(mod)
5266

5367
return Version(*version)
5468

69+
@classmethod
70+
def from_version_array(cls, version_array):
71+
version = list(version_array)
72+
if version[-1] < 0:
73+
version[-1] = -1
74+
version = cls._padded(version, 3)
75+
return Version(*version)
76+
5577
@classmethod
5678
def from_client(cls, client):
57-
return cls.from_string(client.server_info()['version'])
79+
info = client.server_info()
80+
if 'versionArray' in info:
81+
return cls.from_version_array(info['versionArray'])
82+
return cls.from_string(info['version'])
5883

5984
def at_least(self, *other_version):
6085
return self >= Version(*other_version)

0 commit comments

Comments
 (0)