versions: do not drop 2.0.X if 2.0 is a declared version in the package (#23217)
This commit is contained in:
		| @@ -12,7 +12,7 @@ | |||||||
| 
 | 
 | ||||||
| import spack.cmd.common.arguments as arguments | import spack.cmd.common.arguments as arguments | ||||||
| import spack.repo | import spack.repo | ||||||
| from spack.version import VersionList, ver | from spack.version import ver, infinity_versions | ||||||
| 
 | 
 | ||||||
| description = "list available versions of a package" | description = "list available versions of a package" | ||||||
| section = "packaging" | section = "packaging" | ||||||
| @@ -66,7 +66,10 @@ def versions(parser, args): | |||||||
|     if args.new: |     if args.new: | ||||||
|         if sys.stdout.isatty(): |         if sys.stdout.isatty(): | ||||||
|             tty.msg('New remote versions (not yet checksummed):') |             tty.msg('New remote versions (not yet checksummed):') | ||||||
|         highest_safe_version = VersionList(safe_versions).highest_numeric() |         numeric_safe_versions = list(filter( | ||||||
|  |             lambda v: str(v) not in infinity_versions, | ||||||
|  |             safe_versions)) | ||||||
|  |         highest_safe_version = max(numeric_safe_versions) | ||||||
|         remote_versions  = set([ver(v) for v in set(fetched_versions) |         remote_versions  = set([ver(v) for v in set(fetched_versions) | ||||||
|                                 if v > highest_safe_version]) |                                 if v > highest_safe_version]) | ||||||
|     else: |     else: | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
| import pytest | import pytest | ||||||
| 
 | 
 | ||||||
| from spack.main import SpackCommand | from spack.main import SpackCommand | ||||||
|  | from spack.version import Version | ||||||
| 
 | 
 | ||||||
| versions = SpackCommand('versions') | versions = SpackCommand('versions') | ||||||
| 
 | 
 | ||||||
| @@ -37,12 +38,32 @@ def test_remote_versions_only(): | |||||||
|     versions('--remote', 'zlib') |     versions('--remote', 'zlib') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @pytest.mark.maybeslow |  | ||||||
| @pytest.mark.usefixtures('mock_packages') | @pytest.mark.usefixtures('mock_packages') | ||||||
| def test_new_versions_only(): | def test_new_versions_only(monkeypatch): | ||||||
|     """Test a package for which new versions should be available.""" |     """Test a package for which new versions should be available.""" | ||||||
|  |     from spack.pkg.builtin.mock.brillig import Brillig | ||||||
| 
 | 
 | ||||||
|     versions('--new', 'brillig') |     def mock_fetch_remote_versions(*args, **kwargs): | ||||||
|  |         mock_remote_versions = { | ||||||
|  |             # new version, we expect this to be in output: | ||||||
|  |             Version('99.99.99'): {}, | ||||||
|  |             # some packages use '3.2' equivalently to '3.2.0' | ||||||
|  |             # thus '3.2.1' is considered to be a new version | ||||||
|  |             # and expected in the output also | ||||||
|  |             Version('3.2.1'): {},  # new version, we expect this to be in output | ||||||
|  |             Version('3.2'): {}, | ||||||
|  |             Version('1.0.0'): {}, | ||||||
|  |         } | ||||||
|  |         return mock_remote_versions | ||||||
|  |     mock_versions = { | ||||||
|  |         # already checksummed versions: | ||||||
|  |         Version('3.2'): {}, | ||||||
|  |         Version('1.0.0'): {}, | ||||||
|  |     } | ||||||
|  |     monkeypatch.setattr(Brillig, 'versions', mock_versions) | ||||||
|  |     monkeypatch.setattr(Brillig, 'fetch_remote_versions', mock_fetch_remote_versions) | ||||||
|  |     v = versions('--new', 'brillig') | ||||||
|  |     assert(v.strip(' \n\t') == "99.99.99\n  3.2.1") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @pytest.mark.maybeslow | @pytest.mark.maybeslow | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Valentin Volkl
					Valentin Volkl