pre-commit / pre-commit/identify
Identify named pipes and sockets
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 297
- Forks
- 179
- PR merge metrics
- No merged PRs in 30d
Description
The current version (v1.4.0) can not identify named pipes and socket files.
I do not know if identify should work on this type of files, but I can show the reproduction, and can add a suggestion for fixing it.
Reproduction for named-pipes (in the last command it hangs):
$ mkfifo /tmp/my-custom-named-pipe
$ file /tmp/my-custom-named-pipe
/tmp/my-custom-named-pipe: fifo (named pipe)
$ identify-cli /tmp/my-custom-named-pipe
bt:
^CTraceback (most recent call last):
File "/usr/local/bin/identify-cli", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/identify/cli.py", line 23, in main
tags = sorted(func(args.path))
File "/usr/local/lib/python3.6/dist-packages/identify/identify.py", line 66, in tags_from_path
if file_is_text(path):
File "/usr/local/lib/python3.6/dist-packages/identify/identify.py", line 128, in file_is_text
with open(path, 'rb') as f:
KeyboardInterrupt
Reproduction for socket files:
$ python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/my-custom-socket')"
$ file /tmp/my-custom-socket
/tmp/my-custom-socket: socket
$ identify-cli /tmp/my-custom-socket
bt:
Traceback (most recent call last):
File "/usr/local/bin/identify-cli", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/identify/cli.py", line 23, in main
tags = sorted(func(args.path))
File "/usr/local/lib/python3.6/dist-packages/identify/identify.py", line 59, in tags_from_path
shebang = parse_shebang_from_file(path)
File "/usr/local/lib/python3.6/dist-packages/identify/identify.py", line 172, in parse_shebang_from_file
with open(path, 'rb') as f:
OSError: [Errno 6] No such device or address: '/tmp/my-custom-socket'
My suggestion to fix these issues is to use stat module of python. With the help of this modul identify could check all other file types as well.
URL: https://docs.python.org/3/library/stat.html
If possible I can propose a PR with pleasure.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with identify/identify.py, especially tags_from_path, file_is_text, and parse_shebang_from_file, using the named-pipe and socket reproductions in the issue. Review Python's stat module as suggested. Done means identify-cli no longer hangs on named pipes or raises an error for socket files, with behavior for these file types established.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100