Skip to content

Commit cfc528f

Browse files
committed
Rename get_key_files to get_top_level_resources
* Add test for get_top_level_resources in maven tests * Add test in test_classify Signed-off-by: Jono Yang <[email protected]>
1 parent 585a77e commit cfc528f

File tree

6 files changed

+948
-10
lines changed

6 files changed

+948
-10
lines changed

src/packagedcode/maven.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,17 @@ def assign_package_to_resources(cls, package, resource, codebase, package_adder)
153153
)
154154

155155
@classmethod
156-
def get_key_files(cls, manifest_resource, codebase):
156+
def get_top_level_resources(cls, manifest_resource, codebase):
157157
"""
158-
Yield Resources that are key files based on a JAR's directory structure
158+
Yield Resources that are top-level based on a JAR's directory structure
159159
"""
160160
if 'META-INF' in manifest_resource.path:
161161
path_segments = manifest_resource.path.split('META-INF')
162162
leading_segment = path_segments[0].strip()
163163
meta_inf_dir_path = f'{leading_segment}/META-INF'
164164
meta_inf_resource = codebase.get_resource(meta_inf_dir_path)
165165
if meta_inf_resource:
166+
yield meta_inf_resource
166167
yield from meta_inf_resource.walk(codebase)
167168

168169

src/packagedcode/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,9 +1305,9 @@ def populate_license_fields(cls, package_data):
13051305
package_data.extracted_license_statement = repr(package_data.extracted_license_statement)
13061306

13071307
@classmethod
1308-
def get_key_files(cls, manifest_resource, codebase):
1308+
def get_top_level_resources(cls, manifest_resource, codebase):
13091309
"""
1310-
Yield Resources that are considered key files for a Package type.
1310+
Yield Resources that are considered top-level for a Package type.
13111311
"""
13121312
pass
13131313

src/summarycode/classify_plugin.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ def process_codebase(self, codebase, classify, **kwargs):
117117
real_root = codebase.root
118118
real_root_dist = real_root.distance(codebase)
119119

120+
seen_resources = set()
120121
for resource in codebase.walk(topdown=True):
122+
if resource.path in seen_resources:
123+
continue
124+
121125
has_package_data = bool(getattr(resource, 'package_data', False))
122126
if not has_package_data:
123127
real_dist = resource.distance(codebase) - real_root_dist
@@ -127,14 +131,17 @@ def process_codebase(self, codebase, classify, **kwargs):
127131
# TODO: should we do something about directories? for now we only consider files
128132
set_classification_flags(resource)
129133
resource.save(codebase)
134+
seen_resources.add(resource.path)
130135
else:
131136
for package_data in resource.package_data:
132137
pd = PackageData.from_dict(package_data)
133138
package_handler = get_package_handler(pd)
134-
key_files = package_handler.get_key_files(resource, codebase)
135-
if not key_files:
139+
top_level_resources = package_handler.get_top_level_resources(resource, codebase)
140+
if not top_level_resources:
136141
break
137-
for key_file in key_files:
138-
key_file.is_top_level = True
139-
set_classification_flags(key_file)
140-
key_file.save(codebase)
142+
for r in top_level_resources:
143+
r.is_top_level = True
144+
set_classification_flags(r)
145+
r.save(codebase)
146+
seen_resources.add(r.path)
147+
seen_resources.add(resource.path)

tests/packagedcode/test_maven.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from packagedcode import maven
2121
from packagedcode import models
2222
from packagedcode.licensing import get_license_detections_and_expression
23+
from scancode.cli import run_scan
2324
from scancode.cli_test_utils import check_json_scan
2425
from scancode.cli_test_utils import run_scan_click
2526
from scancode_config import REGEN_TEST_FIXTURES
@@ -222,6 +223,37 @@ def test_package_dependency_populate_is_resolved_field(self):
222223
test_file = self.get_test_loc('maven_misc/parse/swagger-java-sample-app_2.10-1.3.1.pom')
223224
self.check_parse_to_package(test_file, regen=REGEN_TEST_FIXTURES)
224225

226+
def test_get_top_level_resources(self):
227+
processes = 2
228+
test_dir = self.get_test_loc('maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract')
229+
_, codebase = run_scan(
230+
input=test_dir,
231+
processes=processes,
232+
quiet=True,
233+
verbose=False,
234+
max_in_memory=0,
235+
return_results=False,
236+
return_codebase=True,
237+
system_package=True,
238+
)
239+
pom_resource = codebase.get_resource(
240+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml'
241+
)
242+
self.assertTrue(pom_resource)
243+
top_level_resources_paths = [
244+
r.path for r in maven.MavenPomXmlHandler.get_top_level_resources(pom_resource, codebase)
245+
]
246+
expected_resource_paths = [
247+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF',
248+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF',
249+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven',
250+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti',
251+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator',
252+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties',
253+
'activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml',
254+
]
255+
self.assertEquals(expected_resource_paths, top_level_resources_paths)
256+
225257

226258
class TestPomProperties(testcase.FileBasedTesting):
227259
test_data_dir = os.path.join(os.path.dirname(__file__), 'data')

0 commit comments

Comments
 (0)