Skip to content

Commit d7fc4cc

Browse files
Fix package resource assign bug for jar manifests
Signed-off-by: Ayan Sinha Mahapatra <[email protected]>
1 parent 824163f commit d7fc4cc

File tree

9 files changed

+369
-10
lines changed

9 files changed

+369
-10
lines changed

src/packagedcode/maven.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
6868
yield from models.DatafileHandler.assemble(package_data, resource, codebase)
6969
return
7070

71+
if not package_data.purl:
72+
return
73+
7174
datafile_path = resource.path
7275

7376
# This order is important as we want pom.xml to be used for package
@@ -116,11 +119,11 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
116119
parent_resource=parent_resource,
117120
)
118121
elif manifests and not pom_xmls:
119-
yield from JavaJarManifestHandlerMixin.assemble(package_data, resource, codebase)
122+
yield from JavaJarManifestHandlerMixin.assemble(package_data, resource, codebase, package_adder)
120123
elif pom_xmls and not manifests:
121-
yield from MavenPomXmlHandlerMixin.assemble(package_data, resource, codebase)
124+
yield from MavenPomXmlHandlerMixin.assemble(package_data, resource, codebase, package_adder)
122125
else:
123-
yield from models.DatafileHandler.assemble(package_data, resource, codebase)
126+
yield from models.DatafileHandler.assemble(package_data, resource, codebase, package_adder)
124127

125128

126129
class JavaJarManifestHandler(MavenBasePackageHandler):
@@ -149,7 +152,7 @@ def assign_package_to_resources(cls, package, resource, codebase, package_adder)
149152
# we want to root of the jar, two levels up
150153
parent = resource.parent(codebase)
151154
if parent:
152-
parent = resource.parent(codebase)
155+
parent = parent.parent(codebase)
153156
if parent:
154157
models.DatafileHandler.assign_package_to_resources(
155158
package,

src/packagedcode/models.py

+6
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,12 @@ def assign_package_to_resources(cls, package, resource, codebase, package_adder=
11991199
# NOTE: we do not attach files to the Package level. Instead we
12001200
# update `for_packages` of a codebase resource.
12011201
package_uid = package.package_uid
1202+
if resource.path.endswith("-extract"):
1203+
archive_resource_path = resource.path.removesuffix("-extract")
1204+
archive_resource = codebase.get_resource(archive_resource_path)
1205+
if archive_resource:
1206+
package_adder(package_uid, archive_resource, codebase)
1207+
12021208
if resource and package_uid:
12031209
package_adder(package_uid, resource, codebase)
12041210
for res in resource.walk(codebase):

tests/packagedcode/data/maven_misc/assemble/jackson-dataformat-xml-2.13.5-expected.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@
188188
"path": "jackson-dataformat-xml-2.13.5",
189189
"type": "directory",
190190
"package_data": [],
191-
"for_packages": [],
191+
"for_packages": [
192+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
193+
],
192194
"detected_license_expression": null,
193195
"detected_license_expression_spdx": null,
194196
"license_detections": [],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,321 @@
1+
{
2+
"packages": [
3+
{
4+
"type": "jar",
5+
"namespace": null,
6+
"name": "spring-web",
7+
"version": "5.3.20",
8+
"qualifiers": {},
9+
"subpath": null,
10+
"primary_language": null,
11+
"description": null,
12+
"release_date": null,
13+
"parties": [],
14+
"keywords": [],
15+
"homepage_url": null,
16+
"download_url": null,
17+
"size": null,
18+
"sha1": null,
19+
"md5": null,
20+
"sha256": null,
21+
"sha512": null,
22+
"bug_tracking_url": null,
23+
"code_view_url": null,
24+
"vcs_url": null,
25+
"copyright": null,
26+
"holder": null,
27+
"declared_license_expression": "apache-2.0",
28+
"declared_license_expression_spdx": "Apache-2.0",
29+
"license_detections": [
30+
{
31+
"license_expression": "apache-2.0",
32+
"license_expression_spdx": "Apache-2.0",
33+
"matches": [
34+
{
35+
"license_expression": "apache-2.0",
36+
"license_expression_spdx": "Apache-2.0",
37+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
38+
"start_line": 4,
39+
"end_line": 6,
40+
"matcher": "2-aho",
41+
"score": 100.0,
42+
"matched_length": 27,
43+
"match_coverage": 100.0,
44+
"rule_relevance": 100,
45+
"rule_identifier": "apache-2.0_701.RULE",
46+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
47+
}
48+
],
49+
"detection_log": [],
50+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa"
51+
}
52+
],
53+
"other_license_expression": null,
54+
"other_license_expression_spdx": null,
55+
"other_license_detections": [],
56+
"extracted_license_statement": null,
57+
"notice_text": null,
58+
"source_packages": [],
59+
"is_private": false,
60+
"is_virtual": false,
61+
"extra_data": {},
62+
"repository_homepage_url": null,
63+
"repository_download_url": null,
64+
"api_data_url": null,
65+
"package_uid": "pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758",
66+
"datafile_paths": [
67+
"spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/MANIFEST.MF"
68+
],
69+
"datasource_ids": [
70+
"java_jar_manifest"
71+
],
72+
"purl": "pkg:jar/[email protected]"
73+
}
74+
],
75+
"dependencies": [],
76+
"license_detections": [
77+
{
78+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa",
79+
"license_expression": "apache-2.0",
80+
"license_expression_spdx": "Apache-2.0",
81+
"detection_count": 2,
82+
"detection_log": [],
83+
"reference_matches": [
84+
{
85+
"license_expression": "apache-2.0",
86+
"license_expression_spdx": "Apache-2.0",
87+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
88+
"start_line": 4,
89+
"end_line": 6,
90+
"matcher": "2-aho",
91+
"score": 100.0,
92+
"matched_length": 27,
93+
"match_coverage": 100.0,
94+
"rule_relevance": 100,
95+
"rule_identifier": "apache-2.0_701.RULE",
96+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
97+
}
98+
]
99+
}
100+
],
101+
"files": [
102+
{
103+
"path": "spring-web-5.3.20-jar",
104+
"type": "directory",
105+
"package_data": [],
106+
"for_packages": [],
107+
"detected_license_expression": null,
108+
"detected_license_expression_spdx": null,
109+
"license_detections": [],
110+
"license_clues": [],
111+
"percentage_of_license_text": 0,
112+
"scan_errors": []
113+
},
114+
{
115+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar",
116+
"type": "file",
117+
"package_data": [
118+
{
119+
"type": "jar",
120+
"namespace": null,
121+
"name": null,
122+
"version": null,
123+
"qualifiers": {},
124+
"subpath": null,
125+
"primary_language": null,
126+
"description": null,
127+
"release_date": null,
128+
"parties": [],
129+
"keywords": [],
130+
"homepage_url": null,
131+
"download_url": null,
132+
"size": null,
133+
"sha1": null,
134+
"md5": null,
135+
"sha256": null,
136+
"sha512": null,
137+
"bug_tracking_url": null,
138+
"code_view_url": null,
139+
"vcs_url": null,
140+
"copyright": null,
141+
"holder": null,
142+
"declared_license_expression": null,
143+
"declared_license_expression_spdx": null,
144+
"license_detections": [],
145+
"other_license_expression": null,
146+
"other_license_expression_spdx": null,
147+
"other_license_detections": [],
148+
"extracted_license_statement": null,
149+
"notice_text": null,
150+
"source_packages": [],
151+
"file_references": [],
152+
"is_private": false,
153+
"is_virtual": false,
154+
"extra_data": {},
155+
"dependencies": [],
156+
"repository_homepage_url": null,
157+
"repository_download_url": null,
158+
"api_data_url": null,
159+
"datasource_id": "java_jar",
160+
"purl": null
161+
}
162+
],
163+
"for_packages": [
164+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
165+
],
166+
"detected_license_expression": null,
167+
"detected_license_expression_spdx": null,
168+
"license_detections": [],
169+
"license_clues": [],
170+
"percentage_of_license_text": 0,
171+
"scan_errors": []
172+
},
173+
{
174+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract",
175+
"type": "directory",
176+
"package_data": [],
177+
"for_packages": [
178+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
179+
],
180+
"detected_license_expression": null,
181+
"detected_license_expression_spdx": null,
182+
"license_detections": [],
183+
"license_clues": [],
184+
"percentage_of_license_text": 0,
185+
"scan_errors": []
186+
},
187+
{
188+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF",
189+
"type": "directory",
190+
"package_data": [],
191+
"for_packages": [
192+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
193+
],
194+
"detected_license_expression": null,
195+
"detected_license_expression_spdx": null,
196+
"license_detections": [],
197+
"license_clues": [],
198+
"percentage_of_license_text": 0,
199+
"scan_errors": []
200+
},
201+
{
202+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/MANIFEST.MF",
203+
"type": "file",
204+
"package_data": [
205+
{
206+
"type": "jar",
207+
"namespace": null,
208+
"name": "spring-web",
209+
"version": "5.3.20",
210+
"qualifiers": {},
211+
"subpath": null,
212+
"primary_language": null,
213+
"description": "",
214+
"release_date": null,
215+
"parties": [],
216+
"keywords": [],
217+
"homepage_url": null,
218+
"download_url": null,
219+
"size": null,
220+
"sha1": null,
221+
"md5": null,
222+
"sha256": null,
223+
"sha512": null,
224+
"bug_tracking_url": null,
225+
"code_view_url": null,
226+
"vcs_url": null,
227+
"copyright": null,
228+
"holder": null,
229+
"declared_license_expression": "apache-2.0",
230+
"declared_license_expression_spdx": "Apache-2.0",
231+
"license_detections": [
232+
{
233+
"license_expression": "apache-2.0",
234+
"license_expression_spdx": "Apache-2.0",
235+
"matches": [
236+
{
237+
"license_expression": "apache-2.0",
238+
"license_expression_spdx": "Apache-2.0",
239+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
240+
"start_line": 4,
241+
"end_line": 6,
242+
"matcher": "2-aho",
243+
"score": 100.0,
244+
"matched_length": 27,
245+
"match_coverage": 100.0,
246+
"rule_relevance": 100,
247+
"rule_identifier": "apache-2.0_701.RULE",
248+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
249+
}
250+
],
251+
"detection_log": [],
252+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa"
253+
}
254+
],
255+
"other_license_expression": null,
256+
"other_license_expression_spdx": null,
257+
"other_license_detections": [],
258+
"extracted_license_statement": null,
259+
"notice_text": null,
260+
"source_packages": [],
261+
"file_references": [],
262+
"is_private": false,
263+
"is_virtual": false,
264+
"extra_data": {},
265+
"dependencies": [],
266+
"repository_homepage_url": null,
267+
"repository_download_url": null,
268+
"api_data_url": null,
269+
"datasource_id": "java_jar_manifest",
270+
"purl": "pkg:jar/[email protected]"
271+
}
272+
],
273+
"for_packages": [
274+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
275+
],
276+
"detected_license_expression": null,
277+
"detected_license_expression_spdx": null,
278+
"license_detections": [],
279+
"license_clues": [],
280+
"percentage_of_license_text": 0,
281+
"scan_errors": []
282+
},
283+
{
284+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
285+
"type": "file",
286+
"package_data": [],
287+
"for_packages": [
288+
"pkg:jar/[email protected]?uuid=fixed-uid-done-for-testing-5642512d1758"
289+
],
290+
"detected_license_expression": "apache-2.0",
291+
"detected_license_expression_spdx": "Apache-2.0",
292+
"license_detections": [
293+
{
294+
"license_expression": "apache-2.0",
295+
"license_expression_spdx": "Apache-2.0",
296+
"matches": [
297+
{
298+
"license_expression": "apache-2.0",
299+
"license_expression_spdx": "Apache-2.0",
300+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
301+
"start_line": 4,
302+
"end_line": 6,
303+
"matcher": "2-aho",
304+
"score": 100.0,
305+
"matched_length": 27,
306+
"match_coverage": 100.0,
307+
"rule_relevance": 100,
308+
"rule_identifier": "apache-2.0_701.RULE",
309+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
310+
}
311+
],
312+
"detection_log": [],
313+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa"
314+
}
315+
],
316+
"license_clues": [],
317+
"percentage_of_license_text": 71.05,
318+
"scan_errors": []
319+
}
320+
]
321+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Manifest-Version: 1.0
2+
Implementation-Title: spring-web
3+
Automatic-Module-Name: spring.web
4+
Implementation-Version: 5.3.20
5+
Created-By: 1.8.0_332 (Oracle Corporation)
6+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Spring Framework 5.3.20
2+
Copyright (c) 2002-2022 Pivotal, Inc.
3+
4+
This product is licensed to you under the Apache License, Version 2.0
5+
(the "License"). You may not use this product except in compliance with
6+
the License.

0 commit comments

Comments
 (0)