Skip to content

Commit f8f15ce

Browse files
committed
Retry yarn when npm fails
Signed-off-by: 석지영/책임연구원/SW공학(연)Open Source TP <[email protected]>
1 parent b34c57e commit f8f15ce

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

src/fosslight_dependency/_analyze_dependency.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
3333
ret = True
3434
package_dep_item_list = []
3535
cover_comment = ''
36+
npm_fallback_to_yarn = False
3637

3738
if package_manager_name == const.PYPI:
3839
package_manager = Pypi(input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd)
3940
elif package_manager_name == const.NPM:
4041
package_manager = Npm(input_dir, output_dir)
42+
npm_fallback_to_yarn = True
4143
elif package_manager_name == const.YARN:
4244
package_manager = Yarn(input_dir, output_dir)
4345
elif package_manager_name == const.MAVEN:
@@ -69,14 +71,32 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
6971
else:
7072
logger.error(f"Not supported package manager name: {package_manager_name}")
7173
ret = False
72-
return ret, package_dep_item_list
74+
return ret, package_dep_item_list, cover_comment, package_manager_name
7375

7476
if manifest_file_name:
7577
package_manager.set_manifest_file(manifest_file_name)
7678

7779
if direct:
7880
package_manager.set_direct_dependencies(direct)
7981
ret = package_manager.run_plugin()
82+
83+
if not ret and npm_fallback_to_yarn:
84+
logger.warning("Npm analysis failed. Attempting to use Yarn as fallback...")
85+
del package_manager
86+
package_manager = Yarn(input_dir, output_dir)
87+
package_manager_name = const.YARN
88+
89+
if manifest_file_name:
90+
package_manager.set_manifest_file(manifest_file_name)
91+
if direct:
92+
package_manager.set_direct_dependencies(direct)
93+
94+
ret = package_manager.run_plugin()
95+
if ret:
96+
logger.info("Successfully switched to Yarn")
97+
else:
98+
logger.error("Yarn also failed")
99+
80100
if ret:
81101
if direct:
82102
package_manager.parse_direct_dependencies()
@@ -103,4 +123,4 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
103123

104124
del package_manager
105125

106-
return ret, package_dep_item_list, cover_comment
126+
return ret, package_dep_item_list, cover_comment, package_manager_name

src/fosslight_dependency/run_dependency_scanner.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -275,33 +275,33 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
275275
cover_comment = ''
276276
for pm, manifest_file_name_list in found_package_manager.items():
277277
if not manifest_file_name_list and not autodetect:
278-
ret, package_dep_item_list, cover_comment = analyze_dependency(pm, input_dir, output_path,
278+
ret, package_dep_item_list, cover_comment, actual_pm = analyze_dependency(pm, input_dir, output_path,
279279
pip_activate_cmd, pip_deactivate_cmd,
280280
output_custom_dir, app_name, github_token,
281281
[], direct)
282282
if ret:
283-
success_pm[pm][input_dir].extend(['manual mode (-m option)'])
283+
success_pm[actual_pm][input_dir].extend(['manual mode (-m option)'])
284284
scan_item.append_file_items(package_dep_item_list)
285285
else:
286-
fail_pm[pm][input_dir].extend(['manual mode (-m option)'])
286+
fail_pm[actual_pm][input_dir].extend(['manual mode (-m option)'])
287287
else:
288288
for manifest_dir, manifest_file_name in manifest_file_name_list.items():
289289
input_dir = manifest_dir
290290
if manifest_file_name == pass_key:
291291
continue
292292
os.chdir(input_dir)
293-
ret, package_dep_item_list, cover_comment = analyze_dependency(pm, input_dir, output_path,
293+
ret, package_dep_item_list, cover_comment, actual_pm = analyze_dependency(pm, input_dir, output_path,
294294
pip_activate_cmd, pip_deactivate_cmd,
295295
output_custom_dir, app_name, github_token,
296296
manifest_file_name, direct)
297297
if ret:
298-
success_pm[pm][input_dir].extend(manifest_file_name)
298+
success_pm[actual_pm][input_dir].extend(manifest_file_name)
299299
scan_item.append_file_items(package_dep_item_list)
300300

301301
dup_pm = None
302-
if pm == const.GRADLE and const.ANDROID in found_package_manager:
302+
if actual_pm == const.GRADLE and const.ANDROID in found_package_manager:
303303
dup_pm = const.ANDROID
304-
elif pm == const.ANDROID and const.GRADLE in found_package_manager:
304+
elif actual_pm == const.ANDROID and const.GRADLE in found_package_manager:
305305
dup_pm = const.GRADLE
306306

307307
if dup_pm:
@@ -312,7 +312,7 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
312312
else:
313313
found_package_manager[dup_pm][manifest_dir] = pass_key
314314
else:
315-
fail_pm[pm][input_dir].extend(manifest_file_name)
315+
fail_pm[actual_pm][input_dir].extend(manifest_file_name)
316316

317317
success_pm = {k: dict(v) for k, v in success_pm.items()}
318318
fail_pm = {k: dict(v) for k, v in fail_pm.items()}

0 commit comments

Comments
 (0)