2121# Visit https://github.com/nexB/scancode.io for support and download.
2222
2323from scanpipe .pipelines .scan_codebase import ScanCodebase
24- from scanpipe .pipes import resolve
25- from scanpipe .pipes import update_or_create_package
24+ from scanpipe .pipes import scancode
2625
2726
2827class InspectPackages (ScanCodebase ):
2928 """
30- Inspect a codebase manifest files and resolve their associated packages .
29+ Inspect a codebase for packages and pre-resolved dependencies .
3130
32- Supports resolved packages for:
33- - Python: using nexB/python-inspector, supports requirements.txt and
34- setup.py manifests as input
31+ This pipeline inspects a codebase for application packages
32+ and their dependencies using package manifests and dependency
33+ lockfiles. It does not resolve dependencies, it does instead
34+ collect already pre-resolved dependencies from lockfiles, and
35+ direct dependencies (possibly not resolved) as found in
36+ package manifests' dependency sections.
3537
36- Supports:
37- - BOM: SPDX document, CycloneDX BOM, AboutCode ABOUT file
38- - Python: requirements.txt, setup.py, setup.cfg, Pipfile.lock
39- - JavaScript: yarn.lock lockfile, npm package-lock.json lockfile
40- - Java: Java JAR MANIFEST.MF, Gradle build script
41- - Ruby: RubyGems gemspec manifest, RubyGems Bundler Gemfile.lock
42- - Rust: Rust Cargo.lock dependencies lockfile, Rust Cargo.toml package manifest
43- - PHP: PHP composer lockfile, PHP composer manifest
44- - NuGet: nuspec package manifest
45- - Dart: pubspec manifest, pubspec lockfile
46- - OS: FreeBSD compact package manifest, Debian installed packages database
47-
48- Full list available at https://scancode-toolkit.readthedocs.io/en/
49- doc-update-licenses/reference/available_package_parsers.html
38+ See documentation for the list of supported package manifests and
39+ dependency lockfiles:
40+ https://scancode-toolkit.readthedocs.io/en/stable/reference/available_package_parsers.html
5041 """
5142
5243 @classmethod
@@ -55,46 +46,19 @@ def steps(cls):
5546 cls .copy_inputs_to_codebase_directory ,
5647 cls .extract_archives ,
5748 cls .collect_and_create_codebase_resources ,
49+ cls .flag_empty_files ,
5850 cls .flag_ignored_resources ,
59- cls .get_manifest_inputs ,
60- cls .get_packages_from_manifest ,
61- cls .create_resolved_packages ,
51+ cls .scan_for_application_packages ,
6252 )
6353
64- def get_manifest_inputs (self ):
65- """Locate all the manifest files from the project's input/ directory."""
66- self .manifest_resources = resolve .get_manifest_resources (self .project )
67-
68- def get_packages_from_manifest (self ):
69- """Get packages data from manifest files."""
70- self .resolved_packages = []
71-
72- if not self .manifest_resources .exists ():
73- self .project .add_warning (
74- description = "No manifests found for resolving packages" ,
75- model = "get_packages_from_manifest" ,
76- )
77- return
78-
79- for resource in self .manifest_resources :
80- if packages := resolve .resolve_packages (resource .location ):
81- self .resolved_packages .extend (packages )
82- else :
83- self .project .add_error (
84- description = "No packages could be resolved for" ,
85- model = "get_packages_from_manifest" ,
86- details = {"path" : resource .path },
87- )
88-
89- def create_resolved_packages (self ):
90- """Create the resolved packages and their dependencies in the database."""
91- for package_data in self .resolved_packages :
92- package_data = resolve .set_license_expression (package_data )
93- dependencies = package_data .pop ("dependencies" , [])
94- update_or_create_package (self .project , package_data )
95-
96- for dependency_data in dependencies :
97- resolved_package = dependency_data .get ("resolved_package" )
98- if resolved_package :
99- resolved_package .pop ("dependencies" , [])
100- update_or_create_package (self .project , resolved_package )
54+ def scan_for_application_packages (self ):
55+ """
56+ Scan resources for package information to add DiscoveredPackage
57+ and DiscoveredDependency objects from detected package data.
58+ """
59+ # `assemble` is set to False because here in this pipeline we
60+ # only detect package_data in resources and create
61+ # Package/Dependency instances directly instead of assembling
62+ # the packages and assigning files to them
63+ scancode .scan_for_application_packages (self .project , assemble = False )
64+ scancode .process_package_data (self .project )
0 commit comments