Skip to content

Commit 02859cf

Browse files
Fix package resource assign bug for jar manifests
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent 824163f commit 02859cf

File tree

9 files changed

+366
-10
lines changed

9 files changed

+366
-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

+5
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,11 @@ 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.rstrip("-extract")
1204+
archive_resource = codebase.get_resource(archive_resource_path)
1205+
package_adder(package_uid, archive_resource, codebase)
1206+
12021207
if resource and package_uid:
12031208
package_adder(package_uid, resource, codebase)
12041209
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/Jackson-dataformat-XML@2.13.5?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,319 @@
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/spring-web@5.3.20?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/spring-web@5.3.20"
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+
"detected_license_expression": null,
165+
"detected_license_expression_spdx": null,
166+
"license_detections": [],
167+
"license_clues": [],
168+
"percentage_of_license_text": 0,
169+
"scan_errors": []
170+
},
171+
{
172+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract",
173+
"type": "directory",
174+
"package_data": [],
175+
"for_packages": [
176+
"pkg:jar/spring-web@5.3.20?uuid=fixed-uid-done-for-testing-5642512d1758"
177+
],
178+
"detected_license_expression": null,
179+
"detected_license_expression_spdx": null,
180+
"license_detections": [],
181+
"license_clues": [],
182+
"percentage_of_license_text": 0,
183+
"scan_errors": []
184+
},
185+
{
186+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF",
187+
"type": "directory",
188+
"package_data": [],
189+
"for_packages": [
190+
"pkg:jar/spring-web@5.3.20?uuid=fixed-uid-done-for-testing-5642512d1758"
191+
],
192+
"detected_license_expression": null,
193+
"detected_license_expression_spdx": null,
194+
"license_detections": [],
195+
"license_clues": [],
196+
"percentage_of_license_text": 0,
197+
"scan_errors": []
198+
},
199+
{
200+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/MANIFEST.MF",
201+
"type": "file",
202+
"package_data": [
203+
{
204+
"type": "jar",
205+
"namespace": null,
206+
"name": "spring-web",
207+
"version": "5.3.20",
208+
"qualifiers": {},
209+
"subpath": null,
210+
"primary_language": null,
211+
"description": "",
212+
"release_date": null,
213+
"parties": [],
214+
"keywords": [],
215+
"homepage_url": null,
216+
"download_url": null,
217+
"size": null,
218+
"sha1": null,
219+
"md5": null,
220+
"sha256": null,
221+
"sha512": null,
222+
"bug_tracking_url": null,
223+
"code_view_url": null,
224+
"vcs_url": null,
225+
"copyright": null,
226+
"holder": null,
227+
"declared_license_expression": "apache-2.0",
228+
"declared_license_expression_spdx": "Apache-2.0",
229+
"license_detections": [
230+
{
231+
"license_expression": "apache-2.0",
232+
"license_expression_spdx": "Apache-2.0",
233+
"matches": [
234+
{
235+
"license_expression": "apache-2.0",
236+
"license_expression_spdx": "Apache-2.0",
237+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
238+
"start_line": 4,
239+
"end_line": 6,
240+
"matcher": "2-aho",
241+
"score": 100.0,
242+
"matched_length": 27,
243+
"match_coverage": 100.0,
244+
"rule_relevance": 100,
245+
"rule_identifier": "apache-2.0_701.RULE",
246+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
247+
}
248+
],
249+
"detection_log": [],
250+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa"
251+
}
252+
],
253+
"other_license_expression": null,
254+
"other_license_expression_spdx": null,
255+
"other_license_detections": [],
256+
"extracted_license_statement": null,
257+
"notice_text": null,
258+
"source_packages": [],
259+
"file_references": [],
260+
"is_private": false,
261+
"is_virtual": false,
262+
"extra_data": {},
263+
"dependencies": [],
264+
"repository_homepage_url": null,
265+
"repository_download_url": null,
266+
"api_data_url": null,
267+
"datasource_id": "java_jar_manifest",
268+
"purl": "pkg:jar/spring-web@5.3.20"
269+
}
270+
],
271+
"for_packages": [
272+
"pkg:jar/spring-web@5.3.20?uuid=fixed-uid-done-for-testing-5642512d1758"
273+
],
274+
"detected_license_expression": null,
275+
"detected_license_expression_spdx": null,
276+
"license_detections": [],
277+
"license_clues": [],
278+
"percentage_of_license_text": 0,
279+
"scan_errors": []
280+
},
281+
{
282+
"path": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
283+
"type": "file",
284+
"package_data": [],
285+
"for_packages": [
286+
"pkg:jar/spring-web@5.3.20?uuid=fixed-uid-done-for-testing-5642512d1758"
287+
],
288+
"detected_license_expression": "apache-2.0",
289+
"detected_license_expression_spdx": "Apache-2.0",
290+
"license_detections": [
291+
{
292+
"license_expression": "apache-2.0",
293+
"license_expression_spdx": "Apache-2.0",
294+
"matches": [
295+
{
296+
"license_expression": "apache-2.0",
297+
"license_expression_spdx": "Apache-2.0",
298+
"from_file": "spring-web-5.3.20-jar/spring-web-5.3.20.jar-extract/META-INF/notice.txt",
299+
"start_line": 4,
300+
"end_line": 6,
301+
"matcher": "2-aho",
302+
"score": 100.0,
303+
"matched_length": 27,
304+
"match_coverage": 100.0,
305+
"rule_relevance": 100,
306+
"rule_identifier": "apache-2.0_701.RULE",
307+
"rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_701.RULE"
308+
}
309+
],
310+
"detection_log": [],
311+
"identifier": "apache_2_0-dda7c7b6-8825-2c52-d55b-46f66d469baa"
312+
}
313+
],
314+
"license_clues": [],
315+
"percentage_of_license_text": 71.05,
316+
"scan_errors": []
317+
}
318+
]
319+
}
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)