diff options
author | Harmen Stoppels <harmenstoppels@gmail.com> | 2022-03-08 10:50:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-08 10:50:48 +0100 |
commit | a39a6c4ea7863031d1c89fea05b3b3be76e25f2f (patch) | |
tree | 6c51c7a5594eb8148acc9a629a328eacdd56179b | |
parent | 4b5e07114118b14a08e70f56b3515b5f65aa8c56 (diff) | |
download | spack-a39a6c4ea7863031d1c89fea05b3b3be76e25f2f.tar.gz spack-a39a6c4ea7863031d1c89fea05b3b3be76e25f2f.tar.bz2 spack-a39a6c4ea7863031d1c89fea05b3b3be76e25f2f.tar.xz spack-a39a6c4ea7863031d1c89fea05b3b3be76e25f2f.zip |
version.py: set is_commit in constructor (#29369)
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)
```
-rw-r--r-- | lib/spack/spack/version.py | 13 |
1 files changed, 3 insertions, 10 deletions
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 @@ -206,15 +208,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. |