55
66import sys
77import os
8+ import platform
89import warnings
910import logging
1011from datetime import datetime
1314from fosslight_util .timer_thread import TimerThread
1415from ._help import print_version , print_help_msg_source_scanner
1516from ._license_matched import get_license_list_to_print
16- from fosslight_util .output_format import check_output_formats , write_output_file
17+ from fosslight_util .output_format import check_output_formats_v2 , write_output_file
1718from fosslight_util .correct import correct_with_yaml
1819from .run_scancode import run_scan
1920from .run_scanoss import run_scanoss_py
@@ -49,7 +50,7 @@ def main() -> None:
4950 write_json_file = False
5051 output_file_name = ""
5152 print_matched_text = False
52- formats = ""
53+ formats = []
5354 selected_scanner = ""
5455 correct_mode = True
5556
@@ -145,7 +146,8 @@ def create_report_file(
145146 selected_scanner : str , need_license : bool = False ,
146147 output_path : str = "" , output_files : list = [],
147148 output_extensions : list = [], correct_mode : bool = True ,
148- correct_filepath : str = "" , path_to_scan : str = "" , path_to_exclude : list = []
149+ correct_filepath : str = "" , path_to_scan : str = "" , path_to_exclude : list = [],
150+ formats : list = []
149151) -> 'ScannerItem' :
150152 """
151153 Create report files for given scanned result.
@@ -168,12 +170,33 @@ def create_report_file(
168170 # If -o does not contains file name, set default name
169171 while len (output_files ) < len (output_extensions ):
170172 output_files .append (None )
173+ to_remove = [] # elements of spdx format on windows that should be removed
171174 for i , output_extension in enumerate (output_extensions ):
172175 if output_files [i ] is None or output_files [i ] == "" :
173- if output_extension == _json_ext :
174- output_files [i ] = f"fosslight_opossum_src_{ _start_time } "
176+ if formats :
177+ if formats [i ].startswith ('spdx' ):
178+ if platform .system () != 'Windows' :
179+ output_files [i ] = f"fosslight_spdx_src_{ _start_time } "
180+ else :
181+ logger .warning ('spdx format is not supported on Windows. Please remove spdx from format.' )
182+ to_remove .append (i )
183+ else :
184+ if output_extension == _json_ext :
185+ output_files [i ] = f"fosslight_opossum_src_{ _start_time } "
186+ else :
187+ output_files [i ] = f"fosslight_report_src_{ _start_time } "
175188 else :
176- output_files [i ] = f"fosslight_report_src_{ _start_time } "
189+ if output_extension == _json_ext :
190+ output_files [i ] = f"fosslight_opossum_src_{ _start_time } "
191+ else :
192+ output_files [i ] = f"fosslight_report_src_{ _start_time } "
193+ for index in sorted (to_remove , reverse = True ):
194+ # remove elements of spdx format on windows
195+ del output_files [index ]
196+ del output_extensions [index ]
197+ del formats [index ]
198+ if len (output_extensions ) < 1 :
199+ sys .exit (0 )
177200
178201 if not correct_filepath :
179202 correct_filepath = path_to_scan
@@ -219,10 +242,10 @@ def create_report_file(
219242
220243 combined_paths_and_files = [os .path .join (output_path , file ) for file in output_files ]
221244 results = []
222- for combined_path_and_file , output_extension in zip (combined_paths_and_files , output_extensions ):
245+ for combined_path_and_file , output_extension , output_format in zip (combined_paths_and_files , output_extensions , formats ):
223246 # if need_license and output_extension == _json_ext and "scanoss_reference" in sheet_list:
224247 # del sheet_list["scanoss_reference"]
225- results .append (write_output_file (combined_path_and_file , output_extension , scan_item , extended_header , "" ))
248+ results .append (write_output_file (combined_path_and_file , output_extension , scan_item , extended_header , "" , output_format ))
226249 for success , msg , result_file in results :
227250 if success :
228251 logger .info (f"Output file: { result_file } " )
@@ -295,8 +318,9 @@ def run_scanners(
295318 license_list = []
296319 spdx_downloads = {}
297320 result_log = {}
321+ scan_item = []
298322
299- success , msg , output_path , output_files , output_extensions = check_output_formats (output_file_name , formats )
323+ success , msg , output_path , output_files , output_extensions , formats = check_output_formats_v2 (output_file_name , formats )
300324
301325 logger , result_log = init_log (os .path .join (output_path , f"fosslight_log_src_{ start_time } .txt" ),
302326 True , logging .INFO , logging .DEBUG , PKG_NAME , path_to_scan , path_to_exclude )
@@ -319,7 +343,7 @@ def run_scanners(
319343 merged_result = merge_results (scancode_result , scanoss_result , spdx_downloads )
320344 scan_item = create_report_file (start_time , merged_result , license_list , scanoss_result , selected_scanner ,
321345 print_matched_text , output_path , output_files , output_extensions , correct_mode ,
322- correct_filepath , path_to_scan , path_to_exclude )
346+ correct_filepath , path_to_scan , path_to_exclude , formats )
323347 else :
324348 print_help_msg_source_scanner ()
325349 result_log [RESULT_KEY ] = "Unsupported scanner"
0 commit comments