Open
Description
Description
scancode crashes with an error IsADirectoryError
when supplying an existing directory to --json-pp
instead of the name of a file.
How To Reproduce
Tell us how to reproduce the issue.
$ mkdir /tmp/bla
$ ./scancode -l scancode --json-pp /tmp/bla
This results in the following error:
$ ./scancode -l scancode --json-pp /tmp/bla
Setup plugins...
Collect file inventory...
Scan files for: licenses with 1 process(es)...
[####################] 2
ERROR: failed to run output plugin: json-pp:
Traceback (most recent call last):
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 152, in open
rv, self.should_close = open_stream(
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/_compat.py", line 404, in open_stream
return _wrap_io_open(filename, mode, encoding, errors), True
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/_compat.py", line 379, in _wrap_io_open
return open(file, mode, encoding=encoding, errors=errors)
IsADirectoryError: [Errno 21] Is a directory: '/tmp/bla'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/armijn/git/scancode-toolkit/src/scancode/cli.py", line 1084, in run_codebase_plugins
plugin.process_codebase(codebase, **kwargs)
File "/home/armijn/git/scancode-toolkit/src/formattedcode/output_json.py", line 77, in process_codebase
write_results(codebase, output_file=output_json_pp, pretty=True, **kwargs)
File "/home/armijn/git/scancode-toolkit/src/formattedcode/output_json.py", line 101, in write_results
with jsonstreams.Stream(
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 596, in __init__
self.__inst = self._types[jtype](
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 349, in __init__
self._writer.raw_write('{', indent=_indent, newline=indent)
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 165, in raw_write
self.fd.write(value)
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 137, in __getattr__
return getattr(self.open(), name)
File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 158, in open
raise FileError(self.name, hint=e.strerror) from e
click.exceptions.FileError: Is a directory
Scanning done.
Summary: licenses with 1 process(es)
Errors count: 0
Scan Speed: 1.89 files/sec.
Initial counts: 1 resource(s): 1 file(s) and 0 directorie(s)
Final counts: 1 resource(s): 1 file(s) and 0 directorie(s)
Timings:
scan_start: 2023-11-17T130042.965142
scan_end: 2023-11-17T130046.632893
setup_scan:licenses: 3.13s
setup: 3.13s
scan: 0.53s
total: 3.68s
Removing temporary files...done.
One solution is to add a few more checks to see if the files that are supplied to scancode as output files already exist and only continue if it is a file (or even then maybe not) before scancode is run.
System configuration
For bug reports, it really helps us to know:
- What OS are you running on? Linux
- What version of scancode-toolkit was used to generate the scan file? Git 8de1e90
- What installation method was used to install/run scancode? (pip/source download/other) source download