标签: pre-commit

如何在 cookiecutter 模板上运行黑色格式?

我正在使用预提交blackflake8钩子。

error: cannot format在尝试对以下代码进行黑色格式化时得到了这个

from {{cookiecutter.project_name}} import my_module
Run Code Online (Sandbox Code Playgroud)

无论如何,是否有指示黑色,跳过/忽略特定于 cookiecutter 的语法?

python pre-commit cookiecutter python-black

5
推荐指数
0
解决办法
804
查看次数

pygrep 预提交钩子检查字符串是否存在

如果我想编写一个预提交挂钩来检查,例如,字符串“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)

grep pre-commit pre-commit.com

5
推荐指数
1
解决办法
1322
查看次数

预提交钩子以检查 Django 迁移

我正在尝试为我的 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)

django pre-commit pre-commit-hook pre-commit.com

5
推荐指数
1
解决办法
441
查看次数

基于可执行文件(不是 git repo)的预提交挂钩

我想运行来自 pip 的可执行文件,但该文件不能作为 git 存储库提供。文档似乎假设您想要运行的任何内容都来自 git 存储库:https://pre-commit.com/#plugins。如何将任意 shell 命令作为预提交挂钩运行?

pre-commit

5
推荐指数
1
解决办法
1446
查看次数

从不同目录的预提交中运行 mypy

我的项目结构如下:

\n
project/\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\n
Run Code Online (Sandbox Code Playgroud)\n

每个 API 目录 、api_v1api_v2api_v3都有 python 文件。

\n

仅当代码发生更改时,我才想对每个目录运行预提交。例如,mypy -p api_v1如果目录发生更改,我想运行api_v1。我知道密钥filestypes预提交,但我无法找到一种方法来运行 mypy,就好像它是从目录运行一样backend。另外,当我对其中超过 1 个目录进行更改时,我无法单独为api_v1api_v2或运行 mypy。api_v3

\n

是不可能还是我

\n

python pre-commit python-3.x mypy pre-commit.com

5
推荐指数
1
解决办法
2958
查看次数

预提交使用 cli 正确修复文件,但当我尝试提交文件时将其更改回来

我正在尝试使用 isort 自动修复导入订单。当我pre-commit run --files=myfile.py正确运行时,它会更新我的导入(通过在已知的第三方导入和内部包导入之间添加一行)。但是,当我尝试提交此操作时,预提交将导致提交失败,然后删除第三方导入和内部包之间的行。

我尝试known_third_partysetup.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 应用程序。配置文件位于该子目录中。我已将配置文件移至整个项目的根目录,现在这个特定问题已解决。我想知道是否有一种方法可以进行预提交或排序来识别子目录中的配置,但我将把它留给另一个问题。

python git pre-commit isort pre-commit.com

5
推荐指数
0
解决办法
1270
查看次数

如何修复黑色预提交的 InvalidManifestError?

pre-commit使用black最新版本运行 python23.11.0会导致有线InvalidManifestError.

\n

摘自.pre-commit-config.yaml

\n
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`\n
Run 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)

python pre-commit python-black pre-commit.com

5
推荐指数
1
解决办法
970
查看次数

使用Precommit Hook运行Django测试

我想使用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)

python django version-control mercurial pre-commit

4
推荐指数
1
解决办法
1574
查看次数

bash 未找到“预提交”命令,但 macOS 上已安装该命令

问题描述

当我尝试使用以下命令进行提交时,我在提交时遇到问题,例如:

$ 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)

我的尝试失败了,所以我尝试了一些其他解决方案,但它们不起作用。

导出bash:

我已经尝试过所描述的解决方案,即使用~./bashrc命令导出我的:source ~/.profile但出现以下错误:

bash:/Users/pvieira/.profile: No such file or directory
Run Code Online (Sandbox Code Playgroud)

使用自制软件安装:

这会导致与上述手动安装时发生的错误相同的错误pip

git bash pre-commit git-commit pre-commit.com

4
推荐指数
1
解决办法
3万
查看次数

在预提交挂钩参数中使用环境变量

我正在努力将环境变量使用到预提交挂钩配置的参数部分

以下是一个示例 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 pre-commit-hook pre-commit.com semgrep

4
推荐指数
1
解决办法
2629
查看次数