Distinguish node module and package.

This commit is contained in:
Jelmer Vernooij 2021-03-23 15:37:12 +00:00
parent aa8dd6bb70
commit ddea6f957a
3 changed files with 28 additions and 1 deletions

View file

@ -37,6 +37,7 @@ from buildlog_consultant.common import (
MissingJDK,
MissingJRE,
MissingNodeModule,
MissingNodePackage,
MissingPhpClass,
MissingRubyGem,
MissingLibrary,
@ -86,6 +87,7 @@ from .requirements import (
PythonModuleRequirement,
PythonPackageRequirement,
CertificateAuthorityRequirement,
NodeModuleRequirement,
)
from .resolver import UnsatisfiedRequirements
@ -114,7 +116,9 @@ def problem_to_upstream_requirement(problem): # noqa: C901
elif isinstance(problem, MissingRPackage):
return RPackageRequirement(problem.package, problem.minimum_version)
elif isinstance(problem, MissingNodeModule):
return NodePackageRequirement(problem.module)
return NodeModuleRequirement(problem.module)
elif isinstance(problem, MissingNodePackage):
return NodePackageRequirement(problem.package)
elif isinstance(problem, MissingLibrary):
return LibraryRequirement(problem.library)
elif isinstance(problem, MissingRubyFile):

View file

@ -131,6 +131,18 @@ class NodePackageRequirement(Requirement):
return "%s(%r)" % (type(self).__name__, self.package)
class NodeModuleRequirement(Requirement):
module: str
def __init__(self, module):
super(NodeModuleRequirement, self).__init__("npm-module")
self.module = module
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.module)
class CargoCrateRequirement(Requirement):
crate: str

View file

@ -42,6 +42,7 @@ from ..requirements import (
DhAddonRequirement,
PhpClassRequirement,
RPackageRequirement,
NodeModuleRequirement,
NodePackageRequirement,
LibraryRequirement,
RubyFileRequirement,
@ -293,6 +294,15 @@ def resolve_r_package_req(apt_mgr, req):
return find_reqs_simple(apt_mgr, paths, regex=True)
def resolve_node_module_req(apt_mgr, req):
paths = [
"/usr/share/nodejs/.*/node_modules/%s/index.js" % re.escape(req.module),
"/usr/lib/nodejs/%s/index.js" % re.escape(req.module),
"/usr/share/nodejs/%s/index.js" % re.escape(req.module),
]
return find_reqs_simple(apt_mgr, paths, regex=True)
def resolve_node_package_req(apt_mgr, req):
paths = [
"/usr/share/nodejs/.*/node_modules/%s/package\\.json" % re.escape(req.package),
@ -507,6 +517,7 @@ APT_REQUIREMENT_RESOLVERS = [
(DhAddonRequirement, resolve_dh_addon_req),
(PhpClassRequirement, resolve_php_class_req),
(RPackageRequirement, resolve_r_package_req),
(NodeModuleRequirement, resolve_node_module_req),
(NodePackageRequirement, resolve_node_package_req),
(LibraryRequirement, resolve_library_req),
(RubyFileRequirement, resolve_ruby_file_req),