diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2019-10-24 16:02:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-24 16:02:28 -0700 |
commit | dbee91f7f1616113e21ebc5e186f0f66bfc21a9c (patch) | |
tree | 2d6362d45d4604f1ea981dc683c4a7a1eecd80ec | |
parent | 757387dc2a43a0add5a6d49ccc8bbc6a73352720 (diff) | |
download | spack-dbee91f7f1616113e21ebc5e186f0f66bfc21a9c.tar.gz spack-dbee91f7f1616113e21ebc5e186f0f66bfc21a9c.tar.bz2 spack-dbee91f7f1616113e21ebc5e186f0f66bfc21a9c.tar.xz spack-dbee91f7f1616113e21ebc5e186f0f66bfc21a9c.zip |
bugfix: allow fetching no-code packages (#13429)
Previously, spack would error out if we tried to fetch something with no
code, but that would prevent fetching dependencies. In particular, this
would fail:
spack fetch --dependencies xsdk
- [x] Instead of raising an error, just print a message that there is nothing
to be fetched for packages like xsdk that do not have code.
- [x] Make BundleFetchStrategy a bit more quiet about doing nothing.
-rw-r--r-- | lib/spack/spack/fetch_strategy.py | 18 | ||||
-rw-r--r-- | lib/spack/spack/package.py | 4 | ||||
-rw-r--r-- | lib/spack/spack/test/install.py | 12 |
3 files changed, 12 insertions, 22 deletions
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index 4812211812..8105402f99 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -201,28 +201,16 @@ class BundleFetchStrategy(FetchStrategy): url_attr = '' def fetch(self): - tty.msg("No code to fetch.") + """Simply report success -- there is no code to fetch.""" return True - def check(self): - tty.msg("No code to check.") - - def expand(self): - tty.msg("No archive to expand.") - - def reset(self): - tty.msg("No code to reset.") - - def archive(self, destination): - tty.msg("No code to archive.") - @property def cachable(self): - tty.msg("No code to cache.") + """Report False as there is no code to cache.""" return False def source_id(self): - tty.msg("No code to be uniquely identified.") + """BundlePackages don't have a source id.""" return '' diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index b49c8c1a23..8a65d7b733 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -1046,7 +1046,9 @@ class PackageBase(with_metaclass(PackageMeta, PackageViewMixin, object)): raise ValueError("Can only fetch concrete packages.") if not self.has_code: - raise InvalidPackageOpError("Can only fetch a package with a URL.") + tty.msg( + "No fetch required for %s: package has no code." % self.name + ) start_time = time.time() checksum = spack.config.get('config:checksum') diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py index e0a83f20b2..571e9fcd58 100644 --- a/lib/spack/spack/test/install.py +++ b/lib/spack/spack/test/install.py @@ -9,8 +9,7 @@ import shutil from llnl.util.filesystem import mkdirp, touch, working_dir -from spack.package import \ - InstallError, InvalidPackageOpError, PackageBase, PackageStillNeededError +from spack.package import InstallError, PackageBase, PackageStillNeededError import spack.patch import spack.repo import spack.store @@ -327,7 +326,9 @@ def test_uninstall_by_spec_errors(mutable_database): PackageBase.uninstall_by_spec(rec.spec) -def test_nosource_pkg_install(install_mockery, mock_fetch, mock_packages): +@pytest.mark.disable_clean_stage_check +def test_nosource_pkg_install( + install_mockery, mock_fetch, mock_packages, capfd): """Test install phases with the nosource package.""" spec = Spec('nosource').concretized() pkg = spec.package @@ -336,9 +337,8 @@ def test_nosource_pkg_install(install_mockery, mock_fetch, mock_packages): pkg.do_install() # Also make sure an error is raised if `do_fetch` is called. - with pytest.raises(InvalidPackageOpError, - match="fetch a package with a URL"): - pkg.do_fetch() + pkg.do_fetch() + assert "No fetch required for nosource" in capfd.readouterr()[0] def test_nosource_pkg_install_post_install( |