From ddea6f957a269771d04816dffb65121bc80c06ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= Date: Tue, 23 Mar 2021 15:37:12 +0000 Subject: [PATCH] Distinguish node module and package. --- ognibuild/buildlog.py | 6 +++++- ognibuild/requirements.py | 12 ++++++++++++ ognibuild/resolver/apt.py | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/ognibuild/buildlog.py b/ognibuild/buildlog.py index b7b5f3e..5d4d7d3 100644 --- a/ognibuild/buildlog.py +++ b/ognibuild/buildlog.py @@ -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): diff --git a/ognibuild/requirements.py b/ognibuild/requirements.py index 3b6fea9..7f89204 100644 --- a/ognibuild/requirements.py +++ b/ognibuild/requirements.py @@ -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 diff --git a/ognibuild/resolver/apt.py b/ognibuild/resolver/apt.py index e78d182..1463fb3 100644 --- a/ognibuild/resolver/apt.py +++ b/ognibuild/resolver/apt.py @@ -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),