summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2019-10-24 16:02:28 -0700
committerGitHub <noreply@github.com>2019-10-24 16:02:28 -0700
commitdbee91f7f1616113e21ebc5e186f0f66bfc21a9c (patch)
tree2d6362d45d4604f1ea981dc683c4a7a1eecd80ec
parent757387dc2a43a0add5a6d49ccc8bbc6a73352720 (diff)
downloadspack-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.py18
-rw-r--r--lib/spack/spack/package.py4
-rw-r--r--lib/spack/spack/test/install.py12
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(