repo: fix construction of UnknownPackageError (#16865)

Also improve the error messages
This commit is contained in:
Sergey Kosukhin 2020-05-29 20:07:44 +02:00 committed by GitHub
parent ec5959694c
commit 9d1f71e89f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 15 deletions

View File

@ -759,8 +759,8 @@ def _create_namespace(self):
"""
parent = None
for l in range(1, len(self._names) + 1):
ns = '.'.join(self._names[:l])
for i in range(1, len(self._names) + 1):
ns = '.'.join(self._names[:i])
if ns not in sys.modules:
module = SpackNamespace(ns)
@ -773,7 +773,7 @@ def _create_namespace(self):
# This ensures that we can do things like:
# import spack.pkg.builtin.mpich as mpich
if parent:
modname = self._names[l - 1]
modname = self._names[i - 1]
setattr(parent, modname, module)
else:
# no need to set up a module
@ -882,9 +882,7 @@ def get(self, spec):
raise UnknownPackageError(spec.name)
if spec.namespace and spec.namespace != self.namespace:
raise UnknownPackageError(
"Repository %s does not contain package %s"
% (self.namespace, spec.fullname))
raise UnknownPackageError(spec.name, self.namespace)
package_class = self.get_pkg_class(spec.name)
try:
@ -1271,16 +1269,22 @@ class UnknownPackageError(UnknownEntityError):
def __init__(self, name, repo=None):
msg = None
if repo:
msg = "Package '%s' not found in repository '%s'" % (name, repo)
else:
msg = "Package '%s' not found." % name
# special handling for specs that may have been intended as filenames
# prompt the user to ask whether they intended to write './<name>'
long_msg = None
if name:
if repo:
msg = "Package '{0}' not found in repository '{1}'"
msg = msg.format(name, repo)
else:
msg = "Package '{0}' not found.".format(name)
# Special handling for specs that may have been intended as
# filenames: prompt the user to ask whether they intended to write
# './<name>'.
if name.endswith(".yaml"):
long_msg = "Did you mean to specify a filename with './%s'?" % name
long_msg = "Did you mean to specify a filename with './{0}'?"
long_msg = long_msg.format(name)
else:
msg = "Attempting to retrieve anonymous package."
super(UnknownPackageError, self).__init__(msg, long_msg)
self.name = name

View File

@ -51,6 +51,11 @@ def test_repo_unknown_pkg(mutable_mock_repo):
mutable_mock_repo.get('builtin.mock.nonexistentpackage')
def test_repo_anonymous_pkg(mutable_mock_repo):
with pytest.raises(spack.repo.UnknownPackageError):
mutable_mock_repo.get('+variant')
@pytest.mark.maybeslow
def test_repo_last_mtime():
latest_mtime = max(os.path.getmtime(p.module.__file__)