Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeError: expected string or bytes-like object #1336

Closed
particledecay opened this issue Feb 19, 2020 · 5 comments · Fixed by #1341
Closed

TypeError: expected string or bytes-like object #1336

particledecay opened this issue Feb 19, 2020 · 5 comments · Fixed by #1341

Comments

@particledecay
Copy link
Contributor

OS: Ubuntu 19.10
App Version: pre-commit 2.1.0

Trying to create a commit-msg hook with the following hook yaml:

---
- id: conform
  name: Conform
  description: Run 'conform enforce' for policy enforcement
  entry: conform enforce --commit-msg-file
  language: golang
  stages: [commit-msg]

However, when I run the try-repo command...

➜ pre-commit try-repo --hook-stage commit-msg .
[WARNING] Creating temporary repo with uncommitted changes...
[INFO] Initializing environment for /tmp/tmpinmhjsj2/shadow-repo.
===============================================================================
Using config:
===============================================================================
repos:
-   repo: /tmp/tmpinmhjsj2/shadow-repo
    rev: a4536d3f16eeddbe6faa39a19b3857b77967bd03
    hooks:
    -   id: conform
===============================================================================
[INFO] Installing environment for /tmp/tmpinmhjsj2/shadow-repo.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
An unexpected error has occurred: TypeError: expected string or bytes-like object
Check the log at /home/joelinux/.cache/pre-commit/pre-commit.log

The pre-commit.log file shows me this traceback:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/error_handler.py", line 54, in error_handler
    yield
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/main.py", line 375, in main
    return try_repo(args)
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/commands/try_repo.py", line 77, in try_repo
    return run(config_filename, store, args)
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/commands/run.py", line 339, in run
    return _run_hooks(config, hooks, args, environ)
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/commands/run.py", line 242, in _run_hooks
    _all_filenames(args), config['files'], config['exclude'],
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/commands/run.py", line 62, in filter_by_include_exclude
    filename for filename in names
  File "/usr/local/lib/python3.7/dist-packages/pre_commit/commands/run.py", line 63, in <listcomp>
    if include_re.search(filename)
TypeError: expected string or bytes-like object

Looking through the code it looks like it's expecting to run the filter_by_include_exclude() method and it attempts to iterate over names which has a value of (None,). Not sure if this is expected behavior but I wouldn't expect a commit-msg hook to filter any files since the only thing it should get is the filename of the commit message?

@asottile
Copy link
Member

for try-repo --hook-stage commit-msg you need to pass --commit-msg-filename ...

the error message can probably be improved here

please in the future include the full contents of pre-commit.log, the entire output is very important here

@asottile
Copy link
Member

would you like to work on improving the error message?

@particledecay
Copy link
Contributor Author

Is that required flag in a doc somewhere? If not, I can submit a PR for it.

@particledecay
Copy link
Contributor Author

@asottile also I'm not so sure it's an error message thing as much as it is an error. It's failing to find files, not failing intentionally, so while I'm not sure I'm familiar enough here to get the logic right for differentiating this specific failure scenario versus others (in different hook types, for instance), I can certainly take a crack at it.

@asottile
Copy link
Member

it's a user error and probably not documented beyond --help -- the docs live at https://github.com/pre-commit/pre-commit.github.io if you'd like to improve them

as for the code change here, it probably needs a check similar to this one here -- notably it needs to check that if --hook-type is commit-msg or prepare-commit-msg that args.commit_msg_filename is present and otherwise produce an error indicating that

particledecay added a commit to particledecay/pre-commit that referenced this issue Feb 22, 2020
If using the prepare-commit-msg and commit-msg stages specifically (such
    as with the try-repo command), the `--commit-msg-filename` arg must be
provided.

[fixes pre-commit#1336]
particledecay added a commit to particledecay/pre-commit that referenced this issue Feb 23, 2020
If using the prepare-commit-msg and commit-msg stages specifically (such
    as with the try-repo command), the `--commit-msg-filename` arg must be
provided.

[fixes pre-commit#1336]

chore: improve error message for hook stage check
asottile pushed a commit to particledecay/pre-commit that referenced this issue Feb 23, 2020
If using the prepare-commit-msg and commit-msg stages specifically (such
    as with the try-repo command), the `--commit-msg-filename` arg must be
provided.

[fixes pre-commit#1336]

chore: improve error message for hook stage check
ssbarnea pushed a commit to ssbarnea/pre-commit that referenced this issue May 9, 2020
If using the prepare-commit-msg and commit-msg stages specifically (such
    as with the try-repo command), the `--commit-msg-filename` arg must be
provided.

[fixes pre-commit#1336]

chore: improve error message for hook stage check
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

2 participants