diff --git a/lib/spack/spack/cmd/env.py b/lib/spack/spack/cmd/env.py index 4df75195725..b7b45fa4372 100644 --- a/lib/spack/spack/cmd/env.py +++ b/lib/spack/spack/cmd/env.py @@ -425,7 +425,7 @@ def env_view_setup_parser(subparser): "--force", action="store_true", dest="force", - help="regenerate even if regeneration cannot be done atomically" + help="regenerate even if regeneration cannot be done atomically", ) subparser.add_argument( "action", choices=ViewAction.actions(), help="action to take for the environment's view" diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py index 90b367f94fa..17f22feac03 100644 --- a/lib/spack/spack/environment/environment.py +++ b/lib/spack/spack/environment/environment.py @@ -626,11 +626,8 @@ def raise_if_symlink_before_exchange(self, force): def raise_if_exchange_before_symlink(self, force): if os.path.isdir(self.root) and not os.path.islink(self.root): if force: - try: - shutil.rmtree(self.root) - return - except: - pass + shutil.rmtree(self.root, ignore_errors=True) + return msg = f"The view at {self.root} cannot be updated with the 'symlink' update method" msg += " because it was originally constructed with the 'exchange' method." msg += "\n Either change the update method to 'exchange' or" diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py index 59715ff084b..8204e880dcb 100644 --- a/lib/spack/spack/test/cmd/env.py +++ b/lib/spack/spack/test/cmd/env.py @@ -3329,6 +3329,7 @@ def test_view_update_mismatch(update_method, tmpdir, install_mockery, mock_fetch view.regenerate([spec], force=True) assert os.path.exists(view.root) + @pytest.mark.parametrize("update_method", ["symlink", "exchange"]) def test_view_update_fails(update_method, tmpdir, install_mockery, mock_fetch, monkeypatch): root = str(tmpdir.join("root"))