Comments (10)
hi @asottile .
Indeed using tempfile is not a big performance issue. I tested.
The main problem. is the pre-commit running time.
@RonnyPfannschmidt asked me for using same version of black (in editor and command line) via pre-commit.
I see 2 ways of doing it keeping run time as slow as possible:
- pre-commit could have a "skip-pre-commit" ;-) option to directly run the hook, skipping all the precommit stuf. if it accepts arguments we are ultimate.
- expose the hook path via a "hook info" option or something like this so we could run directly the right executable from pre-commit repo.
from pre-commit.com.
@jgirardet would it be sufficient to limit the pre-commit hook run to only/exactly the black hook, if the env is cached already that might be really quick
from pre-commit.com.
pre-commit could have a "skip-pre-commit" ;-) option to directly run the hook, skipping all the precommit stuf. if it accepts arguments we are ultimate.
I'm not sure what you mean here, that's essentially what pre-commit run <hookid> --files ...
is
from pre-commit.com.
the idea was to run black via precommit but without the whole bunch of things that pre commit do, to save some time.
from pre-commit.com.
there isn't really anything that pre-commit does beyond collect the args and subprocess, last time I profiled it it essentially boiled down to:
- 5%: python interpreter startup
- 80%: import of pkg_resources module
- 1%: subprocess to determine
git rev-parse --show-toplevel
- 1%: parsing yaml configurations
- 1%: subprocess
git ls-files
to cross reference--files
- 1% subprocess
git diff
to know when files change
And factoring out pkg_resources isn't easy.
from pre-commit.com.
some rough numbers:
$ time ~/opt/venv/bin/python -c ''
real 0m0.028s
user 0m0.020s
sys 0m0.008s
$ time ~/opt/venv/bin/python -c 'import pre_commit.main'
real 0m0.185s
user 0m0.169s
sys 0m0.017s
$ time pre-commit run echo --verbose --files setup.py
[echo] echo..............................................................Passed
hookid: echo
setup.py
real 0m0.204s
user 0m0.181s
sys 0m0.025s
from pre-commit.com.
thank you for your answers @asottile
from pre-commit.com.
Note that pkg_resources
will be factored out in the next release: pre-commit/pre-commit#840
from pre-commit.com.
@asottile great job, thanks π
from pre-commit.com.
feel free to send PRs for editor integrations -- going to close this since there isn't really anything actionable at the moment
from pre-commit.com.
Related Issues (20)
- (π) pre-commit-config section doesn't mention the `ci` key HOT 1
- document pre-commit in a merge-request pipeline HOT 1
- Link to `default_install_hook_types` is not correct HOT 4
- Documentation assumes incorrectly that a tag is an immutable ref - leading to a supply-chain security risk HOT 1
- Add sql-formatter hook HOT 2
- Add `Rome` formatter as a mirror. HOT 2
- Itβs not clear which languages canβt be used for local hooks HOT 2
- Version in docs is out of date HOT 1
- pre-commit ci incorrectly reports an error with the walrus operator (python 3.11) HOT 2
- License still necessary
- Ambiguous documentation HOT 1
- `pretty-format-json` timeout error HOT 3
- Filter hooks by language
- Bot keeps bumping ruff-pre-commit to incompatible release HOT 6
- Will a hook be accepted if one of the hooks in `.pre-commit-hooks.yaml` is `system`? HOT 3
- [pre-commit]: Spellcheck hook for source code and gitlab/github for commit messages and MR/PR descriptions HOT 1
- If possible, please remove stackoverflow from https://pre-commit.com/#getting-help HOT 2
- Hook fail_fast stops pre-commit if any prior hook fails HOT 2
- pipx installation option HOT 5
- Add Dark Theme HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pre-commit.com.