'spack install': make conflict messages as verbose as 'spack spec' (#6436)
"spack spec" was providing helpful error information about conflicts that was missing from "spack install", this updates "spack install" to provide the same information.
This commit is contained in:
		 Massimiliano Culpo
					Massimiliano Culpo
				
			
				
					committed by
					
						 scheibelp
						scheibelp
					
				
			
			
				
	
			
			
			 scheibelp
						scheibelp
					
				
			
						parent
						
							3dafbe901a
						
					
				
				
					commit
					f7c0e24f0a
				
			| @@ -127,7 +127,12 @@ def parse_specs(args, **kwargs): | |||||||
|         sys.exit(1) |         sys.exit(1) | ||||||
|  |  | ||||||
|     except spack.spec.SpecError as e: |     except spack.spec.SpecError as e: | ||||||
|         tty.error(e.message) |  | ||||||
|  |         msgs = [e.message] | ||||||
|  |         if e.long_message: | ||||||
|  |             msgs.append(e.long_message) | ||||||
|  |  | ||||||
|  |         tty.error(*msgs) | ||||||
|         sys.exit(1) |         sys.exit(1) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ | |||||||
| import spack | import spack | ||||||
| import spack.cmd.install | import spack.cmd.install | ||||||
| from spack.spec import Spec | from spack.spec import Spec | ||||||
| from spack.main import SpackCommand | from spack.main import SpackCommand, SpackCommandError | ||||||
|  |  | ||||||
| install = SpackCommand('install') | install = SpackCommand('install') | ||||||
|  |  | ||||||
| @@ -234,3 +234,14 @@ def test_install_overwrite( | |||||||
|     assert os.path.exists(spec.prefix) |     assert os.path.exists(spec.prefix) | ||||||
|     assert fs.hash_directory(spec.prefix) == expected_md5 |     assert fs.hash_directory(spec.prefix) == expected_md5 | ||||||
|     assert fs.hash_directory(spec.prefix) != bad_md5 |     assert fs.hash_directory(spec.prefix) != bad_md5 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.usefixtures( | ||||||
|  |     'builtin_mock', 'mock_archive', 'mock_fetch', 'config', 'install_mockery', | ||||||
|  | ) | ||||||
|  | def test_install_conflicts(conflict_spec): | ||||||
|  |     # Make sure that spec with conflicts exit with 1 | ||||||
|  |     with pytest.raises(SpackCommandError): | ||||||
|  |         install(conflict_spec) | ||||||
|  |  | ||||||
|  |     assert install.returncode == 1 | ||||||
|   | |||||||
| @@ -94,19 +94,6 @@ def spec(request): | |||||||
|     return request.param |     return request.param | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.fixture( |  | ||||||
|     params=[ |  | ||||||
|         'conflict%clang', |  | ||||||
|         'conflict%clang+foo', |  | ||||||
|         'conflict-parent%clang', |  | ||||||
|         'conflict-parent@0.9^conflict~foo' |  | ||||||
|     ] |  | ||||||
| ) |  | ||||||
| def conflict_spec(request): |  | ||||||
|     """Spec to be concretized""" |  | ||||||
|     return request.param |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.mark.usefixtures('config', 'builtin_mock') | @pytest.mark.usefixtures('config', 'builtin_mock') | ||||||
| class TestConcretize(object): | class TestConcretize(object): | ||||||
|     def test_concretize(self, spec): |     def test_concretize(self, spec): | ||||||
|   | |||||||
| @@ -690,3 +690,22 @@ def repo_for_pkg(self, name): | |||||||
|         import collections |         import collections | ||||||
|         Repo = collections.namedtuple('Repo', ['namespace']) |         Repo = collections.namedtuple('Repo', ['namespace']) | ||||||
|         return Repo('mockrepo') |         return Repo('mockrepo') | ||||||
|  |  | ||||||
|  | ########## | ||||||
|  | # Specs of various kind | ||||||
|  | ########## | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.fixture( | ||||||
|  |     params=[ | ||||||
|  |         'conflict%clang', | ||||||
|  |         'conflict%clang+foo', | ||||||
|  |         'conflict-parent%clang', | ||||||
|  |         'conflict-parent@0.9^conflict~foo' | ||||||
|  |     ] | ||||||
|  | ) | ||||||
|  | def conflict_spec(request): | ||||||
|  |     """Specs which violate constraints specified with the "conflicts" | ||||||
|  |     directive in the "conflict" package. | ||||||
|  |     """ | ||||||
|  |     return request.param | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user