Skip to content

Commit bf75f72

Browse files
authored
Fix the npm issue(no dependencies in package.json) (#185)
Signed-off-by: Jiyeong Seok <[email protected]>
1 parent 953f894 commit bf75f72

File tree

1 file changed

+38
-23
lines changed
  • src/fosslight_dependency/package_manager

1 file changed

+38
-23
lines changed

src/fosslight_dependency/package_manager/Npm.py

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Npm(PackageManager):
2222

2323
dn_url = 'https://www.npmjs.com/package/'
2424
input_file_name = 'tmp_npm_license_output.json'
25+
tmp_custom_json = 'custom.json'
2526
flag_tmp_node_modules = False
2627

2728
def __init__(self, input_dir, output_dir):
@@ -32,17 +33,18 @@ def __del__(self):
3233
os.remove(self.input_file_name)
3334
if self.flag_tmp_node_modules:
3435
shutil.rmtree(node_modules, ignore_errors=True)
36+
if os.path.exists(self.tmp_custom_json):
37+
os.remove(self.tmp_custom_json)
3538

3639
def run_plugin(self):
3740
ret = self.start_license_checker()
3841
return ret
3942

4043
def start_license_checker(self):
4144
ret = True
42-
tmp_custom_json = 'custom.json'
43-
license_checker_cmd = f'license-checker --excludePrivatePackages --production --json --out {self.input_file_name}'
45+
license_checker_cmd = f'license-checker --production --json --out {self.input_file_name}'
4446
custom_path_option = ' --customPath '
45-
npm_install_cmd = 'npm install --omit=dev'
47+
npm_install_cmd = 'npm install --production'
4648

4749
if os.path.isdir(node_modules) != 1:
4850
logger.info(f"node_modules directory is not existed. So it executes '{npm_install_cmd}'.")
@@ -53,18 +55,18 @@ def start_license_checker(self):
5355
return False
5456

5557
# customized json file for obtaining specific items with license-checker
56-
self.make_custom_json(tmp_custom_json)
58+
self.make_custom_json(self.tmp_custom_json)
5759

58-
cmd = license_checker_cmd + custom_path_option + tmp_custom_json
60+
cmd = license_checker_cmd + custom_path_option + self.tmp_custom_json
5961
cmd_ret = subprocess.call(cmd, shell=True)
6062
if cmd_ret != 0:
6163
logger.error(f"It returns the error: {cmd}")
6264
logger.error("Please check if the license-checker is installed.(sudo npm install -g license-checker)")
63-
return False
65+
ret = False
6466
else:
6567
self.append_input_package_list_file(self.input_file_name)
66-
67-
os.remove(tmp_custom_json)
68+
if os.path.exists(self.tmp_custom_json):
69+
os.remove(self.tmp_custom_json)
6870

6971
return ret
7072

@@ -111,21 +113,24 @@ def parse_transitive_relationship(self):
111113
ret = False
112114
if ret:
113115
if result.returncode == 1:
114-
logger.warning(f'npm ls returns an error code: {result.stderr}')
116+
logger.warning(f"'{cmd}' returns error code: {result.stderr}")
115117

116118
try:
117119
rel_json = json.loads(rel_tree)
118120
if len(rel_json) < 1:
119121
ret = False
120122
else:
121123
self.package_name = f'{rel_json[_name]}({rel_json[_version]})'
122-
self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
124+
if _dependencies in rel_json:
125+
self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
123126
except Exception as e:
124127
ret = False
125128
err_msg = e
126129
return ret, err_msg
127130

128131
def parse_direct_dependencies(self):
132+
if not self.direct_dep:
133+
return
129134
try:
130135
if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
131136
ret, err_msg = self.parse_transitive_relationship()
@@ -145,6 +150,9 @@ def parse_oss_information(self, f_name):
145150

146151
sheet_list = []
147152
comment = ''
153+
_licenses = 'licenses'
154+
_repository = 'repository'
155+
_private = 'private'
148156

149157
keys = [key for key in json_data]
150158

@@ -153,31 +161,38 @@ def parse_oss_information(self, f_name):
153161
oss_init_name = d['name']
154162
oss_name = self.package_manager_name + ":" + oss_init_name
155163

156-
if d['licenses']:
157-
license_name = d['licenses']
164+
if d[_licenses]:
165+
license_name = d[_licenses]
158166
else:
159167
license_name = ''
160168

161169
oss_version = d['version']
162170
package_path = d['path']
163171

164-
if d['repository']:
165-
dn_loc = d['repository']
166-
else:
167-
dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_version}"
172+
private_pkg = False
173+
if _private in d:
174+
if d[_private]:
175+
private_pkg = True
168176

169177
homepage = self.dn_url + oss_init_name
178+
dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_version}"
179+
if d[_repository]:
180+
dn_loc = d[_repository]
181+
elif private_pkg:
182+
dn_loc = ''
170183

171184
comment_list = []
172185
deps_list = []
173-
if self.direct_dep and len(self.relation_tree) > 0:
174-
if self.package_name == f'{oss_init_name}({oss_version})':
175-
comment_list.append('root package')
186+
if private_pkg:
187+
homepage = dn_loc
188+
comment_list.append('private')
189+
if self.package_name == f'{oss_init_name}({oss_version})':
190+
comment_list.append('root package')
191+
elif self.direct_dep and len(self.relation_tree) > 0:
192+
if f'{oss_init_name}({oss_version})' in self.relation_tree[self.package_name]:
193+
comment_list.append('direct')
176194
else:
177-
if f'{oss_init_name}({oss_version})' in self.relation_tree[self.package_name]:
178-
comment_list.append('direct')
179-
else:
180-
comment_list.append('transitive')
195+
comment_list.append('transitive')
181196

182197
if f'{oss_init_name}({oss_version})' in self.relation_tree:
183198
rel_items = [f'npm:{ri}' for ri in self.relation_tree[f'{oss_init_name}({oss_version})']]

0 commit comments

Comments
 (0)