我正在使用预提交black和flake8钩子。
我error: cannot format在尝试对以下代码进行黑色格式化时得到了这个
from {{cookiecutter.project_name}} import my_module
Run Code Online (Sandbox Code Playgroud)
无论如何,是否有指示黑色,跳过/忽略特定于 cookiecutter 的语法?
如果我想编写一个预提交挂钩来检查,例如,字符串“I love pre-commit”不在我的源代码中的任何位置,我可以这样做
- repo: local
hooks:
- id: love_statement
name: Check that I love pre-commit isn't in source code
types: [python]
entry: 'I love pre-commit'
language: pygrep
Run Code Online (Sandbox Code Playgroud)
但是,如果我想做相反的事情,即检查每个源代码文件中是否存在“我喜欢预提交”,该怎么办?我怎样才能修改我的钩子,这样,如果找到“我喜欢预提交”,它不会失败,而如果没有找到“我喜欢预提交”,它就会失败?
现在可以用以下方法完成
args: [--negate]
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 Django 项目编写一个预提交钩子,以检查丢失的迁移。也就是说,它确保所有更改都反映在迁移文件中。
实现此目的的一种方法是,如果makemigrations命令未返回任何更改,则 PASS 预提交挂钩。
$ ./manage.py makemigrations --dry-run
No changes detected
Run Code Online (Sandbox Code Playgroud)
如果 pre-commit 钩子返回一些东西,则它会失败:
$ ./manage.py makemigrations --dry-run
Migrations for 'myapp':
myapp/migrations/0003_auto_20201213_2233.py
- Alter field type on event
Run Code Online (Sandbox Code Playgroud)
我该如何编写这个预提交钩子?有没有比使用更好的方法makemigrations?这是我到目前为止所拥有的,但它总是通过(我想我需要解析响应):
repos:
- repo: local
hooks:
- id: pre-commit-django-migrations
name: Check django migrations
entry: ./manage.py makemigrations --dry-run
language: system
types: [python]
pass_filenames: false
Run Code Online (Sandbox Code Playgroud) 我想运行来自 pip 的可执行文件,但该文件不能作为 git 存储库提供。文档似乎假设您想要运行的任何内容都来自 git 存储库:https://pre-commit.com/#plugins。如何将任意 shell 命令作为预提交挂钩运行?
我的项目结构如下:
\nproject/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 backend\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api_v1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api_v2\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 api_v3\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 frontend\nRun Code Online (Sandbox Code Playgroud)\n每个 API 目录 、api_v1、api_v2和api_v3都有 python 文件。
仅当代码发生更改时,我才想对每个目录运行预提交。例如,mypy -p api_v1如果目录发生更改,我想运行api_v1。我知道密钥files和types预提交,但我无法找到一种方法来运行 mypy,就好像它是从目录运行一样backend。另外,当我对其中超过 1 个目录进行更改时,我无法单独为api_v1、api_v2或运行 mypy。api_v3
是不可能还是我
\n我正在尝试使用 isort 自动修复导入订单。当我pre-commit run --files=myfile.py正确运行时,它会更新我的导入(通过在已知的第三方导入和内部包导入之间添加一行)。但是,当我尝试提交此操作时,预提交将导致提交失败,然后删除第三方导入和内部包之间的行。
我尝试known_third_party在setup.cfg和 in中设置设置.isort.cfg,并且得到相同的行为。但是,我怀疑配置本身不是问题,因为当我运行时它显然被正确识别pre-commit run ...。那么为什么pre-commit run使用了正确的配置,但在实际提交时,似乎忽略了它呢?
如何让挂钩尊重实际提交的配置?
配置是:
.pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/psf/black
rev: 21.12b0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.10.1
hooks:
- id: isort
name: isort (python)
Run Code Online (Sandbox Code Playgroud)
.isort.cfg
[settings]
known_third_party=django
Run Code Online (Sandbox Code Playgroud)
附加信息:子目录配置可能导致此行为
我尝试过移动配置文件,现在问题似乎已经解决。我的存储库包含多个应用程序的源代码,其中之一是 python django 应用程序。配置文件位于该子目录中。我已将配置文件移至整个项目的根目录,现在这个特定问题已解决。我想知道是否有一种方法可以进行预提交或排序来识别子目录中的配置,但我将把它留给另一个问题。
pre-commit使用black最新版本运行 python23.11.0会导致有线InvalidManifestError.
摘自.pre-commit-config.yaml
repos:\n- repo: https://github.com/psf/black\n rev: 23.11.0\n hooks:\n - id: black\n types: []\n files: ^.*.pyi?$ # format .py and .pyi files`\nRun Code Online (Sandbox Code Playgroud)\n输出消息:
\n\xe2\x94\x82 \xe2\x94\x82 stdout = \'An error has occurred: InvalidManifestError: \\n==> File \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 /Users/robot/.cache/pre-c\'+329 \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 stdout_list = [ \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \'An error has occurred: InvalidManifestError: \\n\', \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \'==> File \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 /Users/robot/.cache/pre-commit/repoxhmwyits/.pre-commit-hooks.yaml\\n\', \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 …Run Code Online (Sandbox Code Playgroud) 我想使用mercurial的precommit钩子运行我所有的django测试.每当测试失败时,提交将被中止.
目标是尽可能频繁地阻止构建破坏的提交.
编辑:使用外部脚本路径结束.这是我的hgrc的相当部分:
[hooks]
precommit = python ./pinax/projects/lgr/manage.py test lgr_photos --verbosity=0 --noinput
commit = hg push
Run Code Online (Sandbox Code Playgroud)
这是我在钩子函数上的进展:
from os.path import join, dirname
import sys
from django.core.management import call_command
def hook(ui, repo, **kwargs):
project_path = join( dirname(repo.path), 'pinax', 'projects')
sys.path.insert(0, project_path)
from lgr.manage import *
output = call_command('test', verbosity=0, interactive=False)
#ui.warn(output)
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
PS - 它提供了一个巨大的错误追溯,它包含在下面的整个内容中
jim@ubuntu:~/workspace/lgr$ hg ci -m 'testing hooks'
No username found, using 'jim@ubuntu.ubuntu-domain' instead
error: precommit hook raised an exception: '_demandmod' object is not iterable
** unknown …Run Code Online (Sandbox Code Playgroud) 当我尝试使用以下命令进行提交时,我在提交时遇到问题,例如:
$ git commit -m "add readme"
pre-commit not found. Install pre-commit with the command pip3 install --user pre-commit or follow the steps on official documentation: https://pre-commit.com /#install
Run Code Online (Sandbox Code Playgroud)
按照我通过命令安装的预提交安装文档中描述的步骤:
$ pip install pre-commit
Run Code Online (Sandbox Code Playgroud)
但是,当我触发命令时,会发生以下错误:
$ pre-commit --version
bash: pre-commit: command not found
Run Code Online (Sandbox Code Playgroud)
我的尝试失败了,所以我尝试了一些其他解决方案,但它们不起作用。
我已经尝试过所描述的解决方案,即使用~./bashrc命令导出我的:source ~/.profile但出现以下错误:
bash:/Users/pvieira/.profile: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这会导致与上述手动安装时发生的错误相同的错误pip。
我正在努力将环境变量使用到预提交挂钩配置的参数部分
以下是一个示例 spinet 来展示我正在尝试做的事情
- repo: https://github.com/returntocorp/semgrep
rev: "v0.1.2"
hooks:
- id: semgrep
name: semgrep my_custom_rule
args:
[
"--config",
"https://PRIVATE-TOKEN:{$TOKEN}@gitlab.com/api/proj/packages/test-rule.yml",
"--error",
]
Run Code Online (Sandbox Code Playgroud)
我已经将 TOKEN 的值设置到环境变量中。但仍在处理中,URL 被视为 https://PRIVATE-TOKEN:{$TOKEN}@gitlab.com/api/proj/packages/test-rule.yml 而不是实际的令牌值。出于安全原因,我想避免将实际令牌放入配置中。
pre-commit ×10
python ×5
django ×2
git ×2
python-black ×2
bash ×1
cookiecutter ×1
git-commit ×1
grep ×1
isort ×1
mercurial ×1
mypy ×1
python-3.x ×1
semgrep ×1