Skip to content

Commit 3a0a58b

Browse files
authored
Fix the direct/transitive bug (#178)
Signed-off-by: Jiyeong Seok <[email protected]>
1 parent 89b0775 commit 3a0a58b

File tree

1 file changed

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

1 file changed

+23
-13
lines changed

src/fosslight_dependency/package_manager/Npm.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def start_license_checker(self):
4545
npm_install_cmd = 'npm install --omit=dev'
4646

4747
if os.path.isdir(node_modules) != 1:
48-
logger.info("node_modules directory is not existed. So it executes 'npm install'.")
48+
logger.info(f"node_modules directory is not existed. So it executes '{npm_install_cmd}'.")
4949
self.flag_tmp_node_modules = True
5050
cmd_ret = subprocess.call(npm_install_cmd, shell=True)
5151
if cmd_ret != 0:
@@ -99,29 +99,39 @@ def parse_transitive_relationship(self):
9999
_dependencies = 'dependencies'
100100
_version = 'version'
101101
_name = 'name'
102+
ret = True
103+
err_msg = ''
102104

103105
cmd = 'npm ls -a --omit=dev --json -s'
104106
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
105107
rel_tree = result.stdout
106108
if rel_tree is None:
107109
logger.error(f"It returns the error: {cmd}")
108110
logger.error(f"No output for {cmd}")
109-
return False
110-
111-
if result.returncode == 1:
112-
logger.warning(f'npm ls returns an error code: {result.stderr}')
113-
114-
try:
115-
rel_json = json.loads(rel_tree)
116-
self.package_name = f'{rel_json[_name]}({rel_json[_version]})'
117-
self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
118-
except Exception as e:
119-
logger.error(f"Fail to parse transitive relationship: {e}")
111+
ret = False
112+
if ret:
113+
if result.returncode == 1:
114+
logger.warning(f'npm ls returns an error code: {result.stderr}')
115+
116+
try:
117+
rel_json = json.loads(rel_tree)
118+
if len(rel_json) < 1:
119+
ret = False
120+
else:
121+
self.package_name = f'{rel_json[_name]}({rel_json[_version]})'
122+
self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
123+
except Exception as e:
124+
ret = False
125+
err_msg = e
126+
return ret, err_msg
120127

121128
def parse_direct_dependencies(self):
122129
try:
123130
if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
124-
self.parse_transitive_relationship()
131+
ret, err_msg = self.parse_transitive_relationship()
132+
if not ret:
133+
self.direct_dep = False
134+
logger.warning(f'It cannot print direct/transitive dependency: {err_msg}')
125135
else:
126136
logger.info('Direct/transitive support is not possible because the package.json file does not exist.')
127137
self.direct_dep = False

0 commit comments

Comments
 (0)