Skip to content

Commit

Permalink
Use is_prerelase instead of is_earlier_or_prerelease.
Browse files Browse the repository at this point in the history
In the end this is clearer because we also need to test against a
maximum version (but it is allowed to be a prerelease of that
maximum version, as per StrictVersion semantics!)
  • Loading branch information
bartoldeman committed Mar 6, 2024
1 parent 303f453 commit 8f22651
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 13 deletions.
6 changes: 3 additions & 3 deletions easybuild/tools/loose_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ def version(self):
"""Readonly access to the parsed version (list or None)"""
return self._version

def is_earlier_or_prerelease(self, other, markers):
"""Check if this is an earlier version or prerelease of other
def is_prerelease(self, other, markers):
"""Check if this is a prerelease of other
Markers is a list of strings that denote a prerelease
"""
Expand All @@ -67,7 +67,7 @@ def is_earlier_or_prerelease(self, other, markers):
for marker in markers:
if prerelease.startswith(marker):
return True
return self < other
return False

def __str__(self):
return self._vstring
Expand Down
6 changes: 3 additions & 3 deletions easybuild/tools/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,22 +254,22 @@ def set_and_check_version(self):
version = LooseVersion(self.version)
if self.REQ_VERSION is not None:
self.log.debug("Required minimum %s version defined: %s", self.NAME, self.REQ_VERSION)
if version.is_earlier_or_prerelease(self.REQ_VERSION, ['rc', '-beta']):
if version.is_prerelease(self.REQ_VERSION, ['rc', '-beta']) or version < self.REQ_VERSION:
raise EasyBuildError("EasyBuild requires %s >= v%s, found v%s",
self.NAME, self.REQ_VERSION, self.version)
else:
self.log.debug('%s version %s matches requirement >= %s', self.NAME, self.version, self.REQ_VERSION)

if self.DEPR_VERSION is not None:
self.log.debug("Deprecated %s version limit defined: %s", self.NAME, self.DEPR_VERSION)
if version.is_earlier_or_prerelease(self.DEPR_VERSION, ['rc', '-beta']):
if version.is_prerelease(self.DEPR_VERSION, ['rc', '-beta']) or version < self.DEPR_VERSION:
depr_msg = "Support for %s version < %s is deprecated, " % (self.NAME, self.DEPR_VERSION)
depr_msg += "found version %s" % self.version
self.log.deprecated(depr_msg, '6.0')

if self.MAX_VERSION is not None:
self.log.debug("Maximum allowed %s version defined: %s", self.NAME, self.MAX_VERSION)
if version.is_earlier_or_prerelease(self.MAX_VERSION, ['rc', '-beta']):
if not version.is_prerelease(self.MAX_VERSION, ['rc', '-beta']) and self.version > self.MAX_VERSION:
raise EasyBuildError("EasyBuild requires %s <= v%s, found v%s",
self.NAME, self.MAX_VERSION, self.version)
else:
Expand Down
10 changes: 5 additions & 5 deletions test/framework/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,14 @@ def test_avail(self):
ms = self.modtool.available()
version = LooseVersion(self.modtool.version)

if isinstance(self.modtool, Lmod) and not version.is_earlier_or_prerelease('5.7.5', ['rc']):
if isinstance(self.modtool, Lmod) and not version.is_prerelease('5.7.5', ['rc']) and version >= '5.7.5':
# with recent versions of Lmod, also the hidden modules are included in the output of 'avail'
self.assertEqual(len(ms), TEST_MODULES_COUNT + 3)
self.assertIn('bzip2/.1.0.6', ms)
self.assertIn('toy/.0.0-deps', ms)
self.assertIn('OpenMPI/.2.1.2-GCC-6.4.0-2.28', ms)
elif (isinstance(self.modtool, EnvironmentModules)
and not version.is_earlier_or_prerelease('4.6.0', ['-beta'])):
and not version.is_prerelease('4.6.0', ['-beta'])) and version >= '4.6.0':
# bzip2/.1.0.6 is not there, since that's a module file in Lua syntax
self.assertEqual(len(ms), TEST_MODULES_COUNT + 2)
self.assertIn('toy/.0.0-deps', ms)
Expand Down Expand Up @@ -316,7 +316,7 @@ def test_exist(self):
avail_mods = self.modtool.available()
self.assertIn('Java/1.8.0_181', avail_mods)
version = LooseVersion(self.modtool.version)
if isinstance(self.modtool, Lmod) and not version.is_earlier_or_prerelease('7.0', ['rc']):
if isinstance(self.modtool, Lmod) and not version.is_prerelease('7.0', ['rc']) and version >= '7.0':
self.assertIn('Java/1.8', avail_mods)
self.assertIn('Java/site_default', avail_mods)
self.assertIn('JavaAlias', avail_mods)
Expand Down Expand Up @@ -376,7 +376,7 @@ def test_exist(self):
self.assertEqual(self.modtool.exist(['Core/Java/1.8', 'Core/Java/site_default']), [True, True])

# also check with .modulerc.lua for Lmod 7.8 or newer
if isinstance(self.modtool, Lmod) and not version.is_earlier_or_prerelease('7.8', ['rc']):
if isinstance(self.modtool, Lmod) and not version.is_prerelease('7.8', ['rc']) and version >= '7.8':
shutil.move(os.path.join(self.test_prefix, 'Core', 'Java'), java_mod_dir)
reset_module_caches()

Expand Down Expand Up @@ -408,7 +408,7 @@ def test_exist(self):
self.assertEqual(self.modtool.exist(['Core/Java/site_default']), [True])

# Test alias in home directory .modulerc
if isinstance(self.modtool, Lmod) and not version.is_earlier_or_prerelease('7.0', ['rc']):
if isinstance(self.modtool, Lmod) and not version.is_prerelease('7.0', ['rc']) or version >= '7.0':
# Required or temporary HOME would be in MODULEPATH already
self.init_testmods()
# Sanity check: Module aliases don't exist yet
Expand Down
4 changes: 2 additions & 2 deletions test/framework/utilities_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ def test_LooseVersion(self):
self.assertLess(LooseVersion('1'), LooseVersion('1.0'))
# checking prereleases
self.assertGreater(LooseVersion('4.0.0-beta'), LooseVersion('4.0.0'))
self.assertEqual(LooseVersion('4.0.0-beta').is_earlier_or_prerelease('4.0.0', ['-beta']), True)
self.assertEqual(LooseVersion('4.0.0-beta').is_earlier_or_prerelease('4.0.0', ['rc']), False)
self.assertEqual(LooseVersion('4.0.0-beta').is_prerelease('4.0.0', ['-beta']), True)
self.assertEqual(LooseVersion('4.0.0-beta').is_prerelease('4.0.0', ['rc']), False)

# The following test is taken from Python distutils tests
# licensed under the Python Software Foundation License Version 2
Expand Down

0 comments on commit 8f22651

Please sign in to comment.