Skip to content

Commit 1250647

Browse files
Merge pull request #3983 from aboutcode-org/jar-manifest-assign-package
Fix package resource assign bug for jar manifests
2 parents b0aff52 + 8edc6b0 commit 1250647

File tree

9 files changed

+368
-10
lines changed

9 files changed

+368
-10
lines changed

src/packagedcode/maven.py

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

72+
if not package_data.purl:
73+
return
74+
7275
datafile_path = resource.path
7376

7477
# This order is important as we want pom.xml to be used for package
@@ -117,11 +120,11 @@ def assemble(cls, package_data, resource, codebase, package_adder=models.add_to_
117120
parent_resource=parent_resource,
118121
)
119122
elif manifests and not pom_xmls:
120-
yield from JavaJarManifestHandlerMixin.assemble(package_data, resource, codebase)
123+
yield from JavaJarManifestHandlerMixin.assemble(package_data, resource, codebase, package_adder)
121124
elif pom_xmls and not manifests:
122-
yield from MavenPomXmlHandlerMixin.assemble(package_data, resource, codebase)
125+
yield from MavenPomXmlHandlerMixin.assemble(package_data, resource, codebase, package_adder)
123126
else:
124-
yield from models.DatafileHandler.assemble(package_data, resource, codebase)
127+
yield from models.DatafileHandler.assemble(package_data, resource, codebase, package_adder)
125128

126129

127130
class JavaJarManifestHandler(MavenBasePackageHandler):
@@ -150,7 +153,7 @@ def assign_package_to_resources(cls, package, resource, codebase, package_adder)
150153
# we want to root of the jar, two levels up
151154
parent = resource.parent(codebase)
152155
if parent:
153-
parent = resource.parent(codebase)
156+
parent = parent.parent(codebase)
154157
if parent:
155158
models.DatafileHandler.assign_package_to_resources(
156159
package,

src/packagedcode/models.py

+5
Original file line numberDiff line numberDiff line change
@@ -1221,6 +1221,11 @@ def assign_package_to_resources(cls, package, resource, codebase, package_adder=
12211221
# NOTE: we do not attach files to the Package level. Instead we
12221222
# update `for_packages` of a codebase resource.
12231223
package_uid = package.package_uid
1224+
if resource.path.endswith("-extract"):
1225+
archive_resource = resource.extracted_from(codebase)
1226+
if archive_resource:
1227+
package_adder(package_uid, archive_resource, codebase)
1228+
12241229
if resource and package_uid:
12251230
package_adder(package_uid, resource, codebase)
12261231
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)