|
8 | 8 | import subprocess
|
9 | 9 | import json
|
10 | 10 | import shutil
|
| 11 | +import re |
11 | 12 | import fosslight_util.constant as constant
|
12 | 13 | import fosslight_dependency.constant as const
|
13 | 14 | from fosslight_dependency._package_manager import PackageManager
|
@@ -115,14 +116,14 @@ def parse_oss_information(self, f_name):
|
115 | 116 | if self.package_name:
|
116 | 117 | if self.package_name == oss_init_name:
|
117 | 118 | comment = 'root package'
|
118 |
| - multi_license = check_multi_license(license_name) |
| 119 | + |
119 | 120 | manifest_file_path = os.path.join(package_path, const.SUPPORT_PACKAE.get(self.package_manager_name))
|
120 |
| - if multi_license: |
121 |
| - for l_idx in range(0, len(license_name)): |
122 |
| - license_name = license_name[l_idx].replace(",", "") |
123 |
| - license_name = check_unknown_license(license_name, manifest_file_path) |
124 |
| - sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name), |
125 |
| - oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment]) |
| 121 | + multi_license, license_comment = check_multi_license(license_name, manifest_file_path) |
| 122 | + |
| 123 | + if license_comment != '': |
| 124 | + comment = f'{comment}, {license_comment}' |
| 125 | + sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name), |
| 126 | + oss_name, oss_version, multi_license, dn_loc, homepage, '', '', comment]) |
126 | 127 | else:
|
127 | 128 | license_name = license_name.replace(",", "")
|
128 | 129 | license_name = check_unknown_license(license_name, manifest_file_path)
|
@@ -155,13 +156,28 @@ def parse_direct_dependencies(self):
|
155 | 156 | logger.warning(f'Cannot print if it is direct dependency: {e}')
|
156 | 157 |
|
157 | 158 |
|
158 |
| -def check_multi_license(license_name): |
159 |
| - if isinstance(license_name, list): |
160 |
| - multi_license = True |
161 |
| - else: |
162 |
| - multi_license = False |
163 |
| - |
164 |
| - return multi_license |
| 159 | +def check_multi_license(license_name, manifest_file_path): |
| 160 | + multi_license_list = [] |
| 161 | + multi_license = '' |
| 162 | + license_comment = '' |
| 163 | + try: |
| 164 | + if isinstance(license_name, list): |
| 165 | + for i in range(0, len(license_name)): |
| 166 | + l_i = license_name[i].replace(",", "") |
| 167 | + multi_license_list.append(check_unknown_license(l_i, manifest_file_path)) |
| 168 | + multi_license = ','.join(multi_license_list) |
| 169 | + else: |
| 170 | + if license_name.startswith('(') and license_name.endswith(')'): |
| 171 | + license_name = license_name[1:] |
| 172 | + license_name = license_name[:-1] |
| 173 | + license_comment = license_name |
| 174 | + re_result = re.findall(r'(\S+)\s(AND|OR)\s(\S+)', license_comment) |
| 175 | + multi_license = f'{re_result[0][0]},{re_result[0][2]}' |
| 176 | + except Exception as e: |
| 177 | + multi_license = license_name |
| 178 | + logger.warning(f'Fail to parse multi license in npm: {e}') |
| 179 | + |
| 180 | + return multi_license, license_comment |
165 | 181 |
|
166 | 182 |
|
167 | 183 | def check_unknown_license(license_name, manifest_file_path):
|
|
0 commit comments