我正在尝试运行预提交挂钩,但是当它们遇到 isort 挂钩时会失败,该挂钩会引发以下错误:
File "/home/el/.cache/pre-commit/repoffrjhcx0/py_env-python3/lib/python3.10/site-packages/_distutils_hack/__init__.py", line 92, in create_module
return importlib.import_module('setuptools._distutils')
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named 'setuptools'
Run Code Online (Sandbox Code Playgroud)
我正在使用 docker,并且我已经检查了 setuptools 是否已安装在我的全局计算机和 docker 上。我不明白为什么会出现这个错误。我认为 isort 设置了它自己的环境,但是为什么它不会被安装,因为它是在配置文件pyproject.toml中定义的。
以下是我的预提交和 isort 配置:
.pre-commit-config.yaml
repos:
- repo: https://github.com/pycqa/isort
rev: 5.8.0
hooks:
- id: isort
args: ["--multi-line=5", "--line-length=120", "--use-parentheses", "--filter-files"]
exclude: "migrations"
stages: [commit]
Run Code Online (Sandbox Code Playgroud)
毒物文件
[isort]
line_length=120
skip_glob=*migrations*
multi_line_output=5
sections=FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
use_parentheses=true
include_trailing_comma=true
lines_between_types=1
lines_after_imports=2
[testenv:isort]
deps =
isort
commands =
isort . --check-only --diff
Run Code Online (Sandbox Code Playgroud)
系统上的Python版本:3.10.1 …
我的管道中有一个步骤在 Bitbucket 上运行我们配置的预提交:
...
- step:
name: Passing linters
image: python:3.7-slim-stretch
script:
- pip3 install "pre-commit==2.17.0"
- apt-get update && apt-get --assume-yes install git
- pre-commit run --all-files
Run Code Online (Sandbox Code Playgroud)
没有进行任何更改,但它突然停止工作。
管道结果:
+ pre-commit run --all-files
[INFO] Initializing environment for https://github.com/psf/black.
[INFO] Initializing environment for https://github.com/psf/black:click==8.0.4.
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Initializing environment for https://github.com/maximevast/pre-commit-tslint/.
[INFO] Initializing environment for https://github.com/maximevast/pre-commit-tslint/:tslint-react@4.1.0,tslint@5.20.1,typescript@4.0.2.
[INFO] Installing environment for https://github.com/psf/black.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] …
Run Code Online (Sandbox Code Playgroud) bitbucket pre-commit pre-commit-hook bitbucket-pipelines pre-commit.com
在我的中.pre-commit-config.yaml
,我有以下配置mypy
:
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.971
hooks:
- id: mypy
args: [--strict]
additional_dependencies:
[
apache-airflow==2.3.3,
apache-airflow-providers-apache-hive==4.0.0,
apache-airflow-providers-apache-livy==3.1.0,
types-protobuf==3.20.4,
]
Run Code Online (Sandbox Code Playgroud)
如果所有这些依赖项都来自公共 pypi 索引,则此方法可以正常工作。如果我有一个包来自自定义 pypi 索引,我该怎么办?在这种情况下我该如何更新我的配置?谢谢。
这是.pre-commit-config.yaml
来自预提交的。
它将 git 克隆指定的rev
git 存储库。
我怎样才能忽略rev
并始终 git clone 最新的?
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
Run Code Online (Sandbox Code Playgroud) 我正在写一个预提交钩子,或者更好,我正在编辑tigris SVN版本标准的钩子.
我的目标是适度的,我只想在没有提交提交消息的情况下向提交的人写一条错误消息.
所以我的想法只是用简单的错误信息写入stderr.但出于某种原因,我的信息似乎永远无法通过.
互联网上的每个人都说我必须写信给stderr.但不知何故,这是行不通的.
REPOS="$1"
TXN="$2"
LOG=""
#here is where it seems to wrong
#if [ ${#LOG} -lt 1 ]
echo "You did not provide a commit message, please try again." 2>&1
#fi
echo
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > LOG || exit 1
# Exit on all errors.
set -e
# All checks passed, so allow the commit.
exit 0
Run Code Online (Sandbox Code Playgroud)
如果这是一个愚蠢的问题你不得不原谅我,但我是一个Linux新手,所以事先道歉.
谢谢,贾斯帕
这是我当前的checkstyle shell脚本.如果我在TRUNK上提交但在分支上没有,它可以正常工作.我真的不明白为什么它不起作用.有人可以帮帮我吗?
#!/bin/sh
###################################################
#
# Verify Checkstyle
#
###################################################
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
JAVA=/opt/ibm/java2-i386-50/bin/java
CHECKSTYLE=/usr/local/checkstyle/checkstyle-all-5.1.jar
TMPDIR=/tmp/$TXN
REPORT=/tmp/$TXN/report
CHECKSTYLE_CONFIG=/usr/local/checkstyle/checkstyle.xml
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep -v "^D" | awk '{print $2}'`
mkdir -p $TMPDIR
for LINE in $CHANGED ; do
FILE=`echo $LINE | egrep -v Test\\.java$ | egrep -v \\/src\\/test\\/ | egrep -v \\/js\\/ext`
if [ -n "$FILE" ] ; then
DIRNAME=`dirname $FILE`
mkdir -p $TMPDIR/$DIRNAME
$SVNLOOK cat $REPOS --transaction $TXN $FILE > $TMPDIR/$FILE
fi
done
$JAVA -jar $CHECKSTYLE -c …
Run Code Online (Sandbox Code Playgroud) 我有一个Centos 7虚拟机(VirtualBox guest)作为我的svn服务器,已配置svn - mod_dav_svn并使一切工作正常:可以结帐并做提交.问题是,当添加预提交钩子然后尝试从Windows机器(VirtualBox主机)提交时TortoiseSVN失败并出现此错误
提交被预提交挂钩(退出代码255)阻止而没有输出.
从我得到的httpd日志
[client xx.xx.xx.xxx:57]无法将资源"/ svn/testrepo /!svn/txn/5-2f"合并到"/ svn/testrepo/trunk"中.[500,#0]
所有权限都设置正确,我甚至尝试777,除非我删除钩子它不起作用.
这是我设置的参考:http: //www.unixmen.com/install-subversion-centos-7/
我想知道我的10-subversion.conf文件中是否缺少某些内容......
我正在使用默认的预提交,它已经设置为可执行文件,并且所有者是apache用户.我做的另一个测试是删除预提交脚本中的所有代码,只留下"退出0"指令.
这就是我的10-subversion.conf文件的样子:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /etc/svn-auth-users
Require valid-user
</Location>
CustomLog logs/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION
Run Code Online (Sandbox Code Playgroud) 我正在尝试添加签入策略以防止某些文件类型被提交到我们的源代码控制,但是当我从VS2015中添加签入策略时,"添加签入策略"中提供的列出的选项窗口未显示"禁止模式策略"作为选项:
我通过执行以下操作来实现此选项:
如何在VS2015中设置禁止模式策略?它移动了吗?
我可以确认此政策目前尚未在我们的源代码管理中设置.我们正在使用TFS.
我想做一些像git commit --no-verify
mercurial 这样的事情.有什么办法吗?
我使用pyenv来支持拥有不同版本的 python。
在使用 python 3.7的项目中,我还希望在进行代码更改时使用预提交进行linting 。
但是当 lint 规则运行时,预提交似乎正在用户下的缓存文件夹中查找 python 包,因此无法找到它们......即使它们安装在系统级别。例如:
>git ci -m'lint test'
...
...
/Users/[]/.cache/pre-commit/repo180cws4u/py_env-python3.7/lib/python3.7/site-packages/
...
ModuleNotFoundError: No module named 'six'
>pip list | grep six
six 1.11.0
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题。(一位同事通过运行/Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six
解决了问题,但感觉不对..必须可以配置为使用系统包或类似的......?
pre-commit ×10
hook ×3
python ×3
svn ×3
bitbucket ×1
checkstyle ×1
commit ×1
git ×1
isort ×1
mercurial ×1
mypy ×1
pyenv ×1
python-3.x ×1
svn-hooks ×1
tfs ×1