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

View file

@ -131,6 +131,18 @@ class NodePackageRequirement(Requirement):
return "%s(%r)" % (type(self).__name__, self.package) 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): class CargoCrateRequirement(Requirement):
crate: str crate: str

View file

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