Skip to content

Commit d478c25

Browse files
committed
define process_codebase function for matching references
Signed-off-by: akugarg <akanksha.garg2k@gmail.com>
1 parent 6f751e9 commit d478c25

8 files changed

Lines changed: 383 additions & 82 deletions

File tree

src/licensedcode/plugin_license.py

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ def match_reference_license(resource, codebase):
133133
"""
134134
Find instances for any licenses in referenced filenames
135135
"""
136-
137136
if not resource.is_file:
138137
return
139138

@@ -142,37 +141,34 @@ def match_reference_license(resource, codebase):
142141
if not licenses:
143142
return
144143

145-
location = resource.location
146-
from licensedcode import cache
147-
from scancode.api import get_licenses
148-
idx = cache.get_index()
149-
matches = idx.match(
150-
location=location, min_score=0)
151-
152-
for match in matches:
153-
ref_files=match.rule.referenced_filenames
154-
if len(ref_files) != 0:
155-
for i in range(len(ref_files)):
156-
if not ref_files[i].startswith('usr/share/common-licenses'):
157-
new_loc=find_reference_file(location,ref_files[i])
158-
if new_loc:
159-
new_lic=get_licenses(new_loc, min_score=0)
160-
licenses.extend(new_lic['licenses'])
161-
license_expressions.extend(new_lic['license_expressions'])
162-
144+
reference_licenses=[]
145+
reference_license_expressions=[]
146+
unique_files = []
147+
148+
for license in licenses:
149+
referenced_filenames = license['matched_rule']['referenced_filenames']
150+
for referenced_filename in referenced_filenames:
151+
if referenced_filename.startswith('usr/share/common-licenses') or referenced_filename in unique_files:
152+
continue
153+
unique_files.append(referenced_filename)
154+
new_resource = find_reference_licenses(referenced_filename=referenced_filename, resource=resource, codebase=codebase)
155+
if new_resource:
156+
reference_licenses.extend(new_resource.licenses)
157+
reference_license_expressions.extend(new_resource.license_expressions)
158+
159+
licenses.extend(reference_licenses)
160+
license_expressions.extend(reference_license_expressions)
163161
codebase.save_resource(resource)
164162
return resource
165163

166164

167-
def find_reference_file(location,referenced_filename):
165+
def find_reference_licenses(referenced_filename, resource, codebase, **kwargs):
168166
"""
169-
Searches for the referenced filename in the same directory and
170-
returns the found location
167+
Returns the resource which references to referenced_filename if found
171168
"""
172-
file_name=referenced_filename
173-
par_dir=fileutils.parent_directory(location)
174-
for root, dirs, files in os.walk(par_dir):
175-
if file_name in files:
176-
path_file = os.path.join(root,file_name)
177-
return path_file
178-
169+
par = resource.parent(codebase)
170+
171+
for child in par.children(codebase):
172+
file_name = fileutils.file_name(child.path)
173+
if referenced_filename == file_name:
174+
return child

tests/licensedcode/data/plugin_license/license_reference/scan-ref.expected.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"short_name": "MIT License",
3131
"category": "Permissive",
3232
"is_exception": false,
33+
"is_unknown": false,
3334
"owner": "MIT",
3435
"homepage_url": "http://opensource.org/licenses/mit-license.php",
3536
"text_url": "http://opensource.org/licenses/mit-license.php",
@@ -46,11 +47,13 @@
4647
"licenses": [
4748
"mit"
4849
],
50+
"referenced_filenames": [],
4951
"is_license_text": false,
5052
"is_license_notice": true,
5153
"is_license_reference": false,
5254
"is_license_tag": false,
5355
"is_license_intro": false,
56+
"has_unknown": false,
5457
"matcher": "1-hash",
5558
"rule_length": 10,
5659
"matched_length": 10,
@@ -77,6 +80,7 @@
7780
"short_name": "Unknown License reference",
7881
"category": "Unstated License",
7982
"is_exception": false,
83+
"is_unknown": true,
8084
"owner": "Unspecified",
8185
"homepage_url": null,
8286
"text_url": "",
@@ -93,11 +97,15 @@
9397
"licenses": [
9498
"unknown-license-reference"
9599
],
100+
"referenced_filenames": [
101+
"LICENSE"
102+
],
96103
"is_license_text": false,
97104
"is_license_notice": false,
98105
"is_license_reference": false,
99106
"is_license_tag": true,
100107
"is_license_intro": false,
108+
"has_unknown": true,
101109
"matcher": "2-aho",
102110
"rule_length": 5,
103111
"matched_length": 5,
@@ -113,6 +121,7 @@
113121
"short_name": "MIT License",
114122
"category": "Permissive",
115123
"is_exception": false,
124+
"is_unknown": false,
116125
"owner": "MIT",
117126
"homepage_url": "http://opensource.org/licenses/mit-license.php",
118127
"text_url": "http://opensource.org/licenses/mit-license.php",
@@ -129,17 +138,20 @@
129138
"licenses": [
130139
"mit"
131140
],
141+
"referenced_filenames": [],
132142
"is_license_text": false,
133143
"is_license_notice": true,
134144
"is_license_reference": false,
135145
"is_license_tag": false,
136146
"is_license_intro": false,
147+
"has_unknown": false,
137148
"matcher": "1-hash",
138149
"rule_length": 10,
139150
"matched_length": 10,
140151
"match_coverage": 100.0,
141152
"rule_relevance": 100
142-
}
153+
},
154+
"matched_text": "that is licensed under [MIT](http://opensource.org/licenses/MIT)."
143155
}
144156
],
145157
"license_expressions": [

tests/licensedcode/data/plugin_license/license_reference/scan-wref.expected.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"short_name": "Unknown License reference",
3131
"category": "Unstated License",
3232
"is_exception": false,
33+
"is_unknown": true,
3334
"owner": "Unspecified",
3435
"homepage_url": null,
3536
"text_url": "",
@@ -46,11 +47,15 @@
4647
"licenses": [
4748
"unknown-license-reference"
4849
],
50+
"referenced_filenames": [
51+
"LICENSE"
52+
],
4953
"is_license_text": false,
5054
"is_license_notice": false,
5155
"is_license_reference": false,
5256
"is_license_tag": true,
5357
"is_license_intro": false,
58+
"has_unknown": true,
5459
"matcher": "2-aho",
5560
"rule_length": 5,
5661
"matched_length": 5,

tests/summarycode/data/full_summary/summary.expected.json

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"license_expressions": [
2424
{
2525
"value": "zlib",
26-
"count": 12
26+
"count": 19
2727
},
2828
{
2929
"value": null,
@@ -3725,6 +3725,7 @@
37253725
"short_name": "ZLIB License",
37263726
"category": "Permissive",
37273727
"is_exception": false,
3728+
"is_unknown": false,
37283729
"owner": "zlib",
37293730
"homepage_url": "http://www.zlib.net/",
37303731
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
@@ -3741,11 +3742,13 @@
37413742
"licenses": [
37423743
"zlib"
37433744
],
3745+
"referenced_filenames": [],
37443746
"is_license_text": true,
37453747
"is_license_notice": false,
37463748
"is_license_reference": false,
37473749
"is_license_tag": false,
37483750
"is_license_intro": false,
3751+
"has_unknown": false,
37493752
"matcher": "2-aho",
37503753
"rule_length": 144,
37513754
"matched_length": 144,
@@ -3931,6 +3934,7 @@
39313934
"short_name": "ZLIB License",
39323935
"category": "Permissive",
39333936
"is_exception": false,
3937+
"is_unknown": false,
39343938
"owner": "zlib",
39353939
"homepage_url": "http://www.zlib.net/",
39363940
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
@@ -3947,11 +3951,13 @@
39473951
"licenses": [
39483952
"zlib"
39493953
],
3954+
"referenced_filenames": [],
39503955
"is_license_text": true,
39513956
"is_license_notice": false,
39523957
"is_license_reference": false,
39533958
"is_license_tag": false,
39543959
"is_license_intro": false,
3960+
"has_unknown": false,
39553961
"matcher": "2-aho",
39563962
"rule_length": 144,
39573963
"matched_length": 144,
@@ -7234,6 +7240,7 @@
72347240
"short_name": "ZLIB License",
72357241
"category": "Permissive",
72367242
"is_exception": false,
7243+
"is_unknown": false,
72377244
"owner": "zlib",
72387245
"homepage_url": "http://www.zlib.net/",
72397246
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
@@ -7250,11 +7257,13 @@
72507257
"licenses": [
72517258
"zlib"
72527259
],
7260+
"referenced_filenames": [],
72537261
"is_license_text": true,
72547262
"is_license_notice": false,
72557263
"is_license_reference": false,
72567264
"is_license_tag": false,
72577265
"is_license_intro": false,
7266+
"has_unknown": false,
72587267
"matcher": "2-aho",
72597268
"rule_length": 144,
72607269
"matched_length": 144,
@@ -7348,9 +7357,48 @@
73487357
"match_coverage": 100.0,
73497358
"rule_relevance": 100
73507359
}
7360+
},
7361+
{
7362+
"key": "zlib",
7363+
"score": 100.0,
7364+
"name": "ZLIB License",
7365+
"short_name": "ZLIB License",
7366+
"category": "Permissive",
7367+
"is_exception": false,
7368+
"is_unknown": false,
7369+
"owner": "zlib",
7370+
"homepage_url": "http://www.zlib.net/",
7371+
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
7372+
"reference_url": "https://scancode-licensedb.aboutcode.org/zlib",
7373+
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE",
7374+
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml",
7375+
"spdx_license_key": "Zlib",
7376+
"spdx_url": "https://spdx.org/licenses/Zlib",
7377+
"start_line": 6,
7378+
"end_line": 23,
7379+
"matched_rule": {
7380+
"identifier": "zlib_17.RULE",
7381+
"license_expression": "zlib",
7382+
"licenses": [
7383+
"zlib"
7384+
],
7385+
"referenced_filenames": [],
7386+
"is_license_text": true,
7387+
"is_license_notice": false,
7388+
"is_license_reference": false,
7389+
"is_license_tag": false,
7390+
"is_license_intro": false,
7391+
"has_unknown": false,
7392+
"matcher": "2-aho",
7393+
"rule_length": 144,
7394+
"matched_length": 144,
7395+
"match_coverage": 100.0,
7396+
"rule_relevance": 100
73517397
}
7398+
}
73527399
],
73537400
"license_expressions": [
7401+
"zlib",
73547402
"zlib"
73557403
],
73567404
"percentage_of_license_text": 40.0,
@@ -7434,9 +7482,48 @@
74347482
"match_coverage": 100.0,
74357483
"rule_relevance": 100
74367484
}
7485+
},
7486+
{
7487+
"key": "zlib",
7488+
"score": 100.0,
7489+
"name": "ZLIB License",
7490+
"short_name": "ZLIB License",
7491+
"category": "Permissive",
7492+
"is_exception": false,
7493+
"is_unknown": false,
7494+
"owner": "zlib",
7495+
"homepage_url": "http://www.zlib.net/",
7496+
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
7497+
"reference_url": "https://scancode-licensedb.aboutcode.org/zlib",
7498+
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE",
7499+
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml",
7500+
"spdx_license_key": "Zlib",
7501+
"spdx_url": "https://spdx.org/licenses/Zlib",
7502+
"start_line": 6,
7503+
"end_line": 23,
7504+
"matched_rule": {
7505+
"identifier": "zlib_17.RULE",
7506+
"license_expression": "zlib",
7507+
"licenses": [
7508+
"zlib"
7509+
],
7510+
"referenced_filenames": [],
7511+
"is_license_text": true,
7512+
"is_license_notice": false,
7513+
"is_license_reference": false,
7514+
"is_license_tag": false,
7515+
"is_license_intro": false,
7516+
"has_unknown": false,
7517+
"matcher": "2-aho",
7518+
"rule_length": 144,
7519+
"matched_length": 144,
7520+
"match_coverage": 100.0,
7521+
"rule_relevance": 100
74377522
}
7523+
}
74387524
],
74397525
"license_expressions": [
7526+
"zlib",
74407527
"zlib"
74417528
],
74427529
"percentage_of_license_text": 50.0,
@@ -8211,6 +8298,7 @@
82118298
"short_name": "ZLIB License",
82128299
"category": "Permissive",
82138300
"is_exception": false,
8301+
"is_unknown": false,
82148302
"owner": "zlib",
82158303
"homepage_url": "http://www.zlib.net/",
82168304
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
@@ -8227,11 +8315,13 @@
82278315
"licenses": [
82288316
"zlib"
82298317
],
8318+
"referenced_filenames": [],
82308319
"is_license_text": true,
82318320
"is_license_notice": false,
82328321
"is_license_reference": false,
82338322
"is_license_tag": false,
82348323
"is_license_intro": false,
8324+
"has_unknown": false,
82358325
"matcher": "2-aho",
82368326
"rule_length": 144,
82378327
"matched_length": 144,
@@ -8333,6 +8423,7 @@
83338423
"short_name": "ZLIB License",
83348424
"category": "Permissive",
83358425
"is_exception": false,
8426+
"is_unknown": false,
83368427
"owner": "zlib",
83378428
"homepage_url": "http://www.zlib.net/",
83388429
"text_url": "http://www.gzip.org/zlib/zlib_license.html",
@@ -8349,11 +8440,13 @@
83498440
"licenses": [
83508441
"zlib"
83518442
],
8443+
"referenced_filenames": [],
83528444
"is_license_text": true,
83538445
"is_license_notice": false,
83548446
"is_license_reference": false,
83558447
"is_license_tag": false,
83568448
"is_license_intro": false,
8449+
"has_unknown": false,
83578450
"matcher": "2-aho",
83588451
"rule_length": 144,
83598452
"matched_length": 144,

0 commit comments

Comments
 (0)