From a39a6c4ea7863031d1c89fea05b3b3be76e25f2f Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Tue, 8 Mar 2022 10:50:48 +0100 Subject: version.py: set is_commit in constructor (#29369) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Speeds up comparison on `Version` by ~2.5x, e.g. ```python In [1]: v = spack.version.Version('1.0.0'); w = spack.version.Version('1.0.2') In [2]: %timeit v < w 1.47 µs ± 5.59 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) 535 ns ± 1.75 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) ``` --- lib/spack/spack/version.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/version.py b/lib/spack/spack/version.py index 385f8f6c03..9108b1feb5 100644 --- a/lib/spack/spack/version.py +++ b/lib/spack/spack/version.py @@ -167,7 +167,7 @@ class VersionStrComponent(object): class Version(object): """Class to represent versions""" - __slots__ = ['version', 'separators', 'string', 'commit_lookup'] + __slots__ = ['version', 'separators', 'string', 'is_commit', 'commit_lookup'] def __init__(self, string): if not isinstance(string, str): @@ -189,6 +189,8 @@ class Version(object): ) self.separators = tuple(m[2] for m in segments) + self.is_commit = len(self.string) == 40 and COMMIT_VERSION.match(self.string) + def _cmp(self, other_lookups=None): commit_lookup = self.commit_lookup or other_lookups @@ -205,15 +207,6 @@ class Version(object): return self.version - @property - def is_commit(self): - """ - Determine if the original string is referencing a commit. - """ - if self.string in infinity_versions: - return False - return COMMIT_VERSION.match(self.string) is not None - @property def dotted(self): """The dotted representation of the version. -- cgit v1.2.3-70-g09d2