Update developer docs wrt pre-commit

This commit is contained in:
Jean-Paul Calderone 2020-12-01 09:52:38 -05:00
parent d50a1151bc
commit 272d6d0aef
2 changed files with 11 additions and 72 deletions

View File

@ -13,8 +13,6 @@ MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
# Local target variables # Local target variables
VCS_HOOK_SAMPLES=$(wildcard .git/hooks/*.sample)
VCS_HOOKS=$(VCS_HOOK_SAMPLES:%.sample=%)
PYTHON=python PYTHON=python
export PYTHON export PYTHON
PYFLAKES=flake8 PYFLAKES=flake8
@ -31,15 +29,6 @@ TEST_SUITE=allmydata
default: default:
@echo "no default target" @echo "no default target"
.PHONY: install-vcs-hooks
## Install the VCS hooks to run linters on commit and all tests on push
install-vcs-hooks: .git/hooks/pre-commit .git/hooks/pre-push
.PHONY: uninstall-vcs-hooks
## Remove the VCS hooks
uninstall-vcs-hooks: .tox/create-venvs.log
"./$(dir $(<))py36/bin/pre-commit" uninstall || true
"./$(dir $(<))py36/bin/pre-commit" uninstall -t pre-push || true
.PHONY: test .PHONY: test
## Run all tests and code reports ## Run all tests and code reports
test: .tox/create-venvs.log test: .tox/create-venvs.log
@ -215,7 +204,7 @@ clean:
rm -f *.pkg rm -f *.pkg
.PHONY: distclean .PHONY: distclean
distclean: clean uninstall-vcs-hooks distclean: clean
rm -rf src/*.egg-info rm -rf src/*.egg-info
rm -f src/allmydata/_version.py rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py rm -f src/allmydata/_appname.py
@ -261,6 +250,3 @@ src/allmydata/_version.py:
.tox/create-venvs.log: tox.ini setup.py .tox/create-venvs.log: tox.ini setup.py
tox --notest -p all | tee -a "$(@)" tox --notest -p all | tee -a "$(@)"
$(VCS_HOOKS): .tox/create-venvs.log .pre-commit-config.yaml
"./$(dir $(<))py36/bin/pre-commit" install --hook-type $(@:.git/hooks/%=%)

View File

@ -5,23 +5,17 @@ Developer Guide
Pre-commit Checks Pre-commit Checks
----------------- -----------------
This project is configured for use with `pre-commit`_ to install `VCS/git hooks`_ which This project is configured for use with `pre-commit`_ to install `VCS/git hooks`_ which perform some static code analysis checks and other code checks to catch common errors.
perform some static code analysis checks and other code checks to catch common errors These hooks can be configured to run before commits or pushes
before each commit and to run the full self-test suite to find less obvious regressions
before each push to a remote.
For example:: For example::
tahoe-lafs $ make install-vcs-hooks tahoe-lafs $ pre-commit install --hook-type pre-push
...
+ ./.tox//py36/bin/pre-commit install --hook-type pre-commit
pre-commit installed at .git/hooks/pre-commit
+ ./.tox//py36/bin/pre-commit install --hook-type pre-push
pre-commit installed at .git/hooks/pre-push pre-commit installed at .git/hooks/pre-push
tahoe-lafs $ python -c "import pathlib; pathlib.Path('src/allmydata/tabbed.py').write_text('def foo():\\n\\tpass\\n')" tahoe-lafs $ echo "undefined" > src/allmydata/undefined_name.py
tahoe-lafs $ git add src/allmydata/tabbed.py tahoe-lafs $ git add src/allmydata/undefined_name.py
tahoe-lafs $ git commit -a -m "Add a file that violates flake8" tahoe-lafs $ git commit -a -m "Add a file that violates flake8"
... tahoe-lafs $ git push
codechecks...............................................................Failed codechecks...............................................................Failed
- hook id: codechecks - hook id: codechecks
- exit code: 1 - exit code: 1
@ -30,58 +24,17 @@ For example::
codechecks inst-nodeps: ... codechecks inst-nodeps: ...
codechecks installed: ... codechecks installed: ...
codechecks run-test-pre: PYTHONHASHSEED='...' codechecks run-test-pre: PYTHONHASHSEED='...'
codechecks run-test: commands[0] | flake8 src static misc setup.py codechecks run-test: commands[0] | flake8 src/allmydata/undefined_name.py
src/allmydata/tabbed.py:2:1: W191 indentation contains tabs src/allmydata/undefined_name.py:1:1: F821 undefined name 'undefined'
ERROR: InvocationError for command ./tahoe-lafs/.tox/codechecks/bin/flake8 src static misc setup.py (exited with code 1) ERROR: InvocationError for command ./tahoe-lafs/.tox/codechecks/bin/flake8 src/allmydata/undefined_name.py (exited with code 1)
___________________________________ summary ____________________________________ ___________________________________ summary ____________________________________
ERROR: codechecks: commands failed ERROR: codechecks: commands failed
...
To uninstall:: To uninstall::
tahoe-lafs $ make uninstall-vcs-hooks tahoe-lafs $ pre-commit uninstall --hook-type pre-push
...
+ ./.tox/py36/bin/pre-commit uninstall
pre-commit uninstalled
+ ./.tox/py36/bin/pre-commit uninstall -t pre-push
pre-push uninstalled pre-push uninstalled
Note that running the full self-test suite takes several minutes so expect pushing to
take some time. If you can't or don't want to wait for the hooks in some cases, use the
``--no-verify`` option to ``$ git commit ...`` or ``$ git push ...``. Alternatively,
see the `pre-commit`_ documentation and CLI help output and use the committed
`pre-commit configuration`_ as a starting point to write a local, uncommitted
``../.pre-commit-config.local.yaml`` configuration to use instead. For example::
tahoe-lafs $ ./.tox/py36/bin/pre-commit --help
tahoe-lafs $ ./.tox/py36/bin/pre-commit instll --help
tahoe-lafs $ cp "./.pre-commit-config.yaml" "./.pre-commit-config.local.yaml"
tahoe-lafs $ editor "./.pre-commit-config.local.yaml"
...
tahoe-lafs $ ./.tox/py36/bin/pre-commit install -c "./.pre-commit-config.local.yaml" -t pre-push
pre-commit installed at .git/hooks/pre-push
tahoe-lafs $ git commit -a -m "Add a file that violates flake8"
[3398.pre-commit 29f8f43d2] Add a file that violates flake8
1 file changed, 2 insertions(+)
create mode 100644 src/allmydata/tabbed.py
tahoe-lafs $ git push
...
codechecks...............................................................Failed
- hook id: codechecks
- exit code: 1
GLOB sdist-make: ./tahoe-lafs/setup.py
codechecks inst-nodeps: ...
codechecks installed: ...
codechecks run-test-pre: PYTHONHASHSEED='...'
codechecks run-test: commands[0] | flake8 src static misc setup.py
src/allmydata/tabbed.py:2:1: W191 indentation contains tabs
ERROR: InvocationError for command ./tahoe-lafs/.tox/codechecks/bin/flake8 src static misc setup.py (exited with code 1)
___________________________________ summary ____________________________________
ERROR: codechecks: commands failed
...
error: failed to push some refs to 'github.com:jaraco/tahoe-lafs.git'
.. _`pre-commit`: https://pre-commit.com .. _`pre-commit`: https://pre-commit.com