pre-commit / pre-commit/identify

Identify named pipes and sockets

Open
#72 1 comment 0 reactions 0 assignees View on GitHub

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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.