Skip to content

Commit 76a4c01

Browse files
authored
Define Version in calc_release_version.py (#1002)
1 parent ca0790d commit 76a4c01

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

etc/calc_release_version.py

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,45 @@
3838
import re
3939
import subprocess
4040
import sys
41-
try:
42-
# Prefer newer `packaging` over deprecated packages.
43-
from packaging.version import Version as Version
44-
from packaging.version import parse as parse_version
45-
except ImportError:
46-
# Fallback to deprecated pkg_resources.
47-
try:
48-
from pkg_resources.extern.packaging.version import Version
49-
from pkg_resources import parse_version
50-
except ImportError:
51-
# Fallback to deprecated distutils.
52-
from distutils.version import LooseVersion as Version
53-
from distutils.version import LooseVersion as parse_version
41+
42+
class Version:
43+
def __init__(self, s):
44+
pat = r'(\d+)\.(\d+)\.(\d+)(\-\S+)?'
45+
match = re.match(pat, s)
46+
assert match, "Unrecognized version string %s" % s
47+
self.major, self.minor, self.micro = (
48+
map(int, (match.group(1), match.group(2), match.group(3))))
49+
50+
if match.group(4):
51+
self.prerelease = match.group(4)[1:]
52+
else:
53+
self.prerelease = ''
54+
55+
def __lt__(self, other):
56+
if self.major != other.major:
57+
return self.major < other.major
58+
if self.minor != other.minor:
59+
return self.minor < other.minor
60+
if self.micro != other.micro:
61+
return self.micro < other.micro
62+
if self.prerelease != other.prerelease:
63+
if self.prerelease != '' and other.prerelease == '':
64+
# Consider a prerelease less than non-prerelease.
65+
return True
66+
# For simplicity, compare prerelease versions lexicographically.
67+
return self.prerelease < other.prerelease
68+
69+
# Versions are equal.
70+
return False
71+
72+
def __eq__(self, other):
73+
self_tuple = self.major, self.minor, self.micro, self.prerelease
74+
other_tuple = other.major, other.minor, other.micro, other.prerelease
75+
return self_tuple == other_tuple
76+
77+
78+
def parse_version(ver):
79+
return Version(ver)
5480

5581
DEBUG = len(sys.argv) > 1 and '-d' in sys.argv
5682
if DEBUG:

etc/calc_release_version_selftest.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ echo "Test next minor version ... begin"
6666
# failed, then it is probably because a new major/minor release was made.
6767
# Update the expected output to represent the correct next version.
6868
# XXX NOTE XXX NOTE XXX
69-
assert_eq "$got" "1.9.0-$DATE+git$CURRENT_SHORTREF"
69+
assert_eq "$got" "1.14.0-$DATE+git$CURRENT_SHORTREF"
7070
}
7171
echo "Test next minor version ... end"
7272

0 commit comments

Comments
 (0)