Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2043 +/- ##
==========================================
+ Coverage 92.24% 92.29% +0.05%
==========================================
Files 118 118
Lines 24160 24216 +56
==========================================
+ Hits 22286 22350 +64
+ Misses 1874 1866 -8 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
📦 Cargo Bloat ComparisonBinary size change: +0.00% (26.0 MiB → 26.0 MiB) Expand for cargo-bloat outputHead Branch ResultsBase Branch Results |
⚡️ Hyperfine BenchmarksSummary: 0 regressions, 0 improvements above the 10% threshold. Environment
CLI CommandsBenchmarking basic commands in the main repo:
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base --version |
2.4 ± 0.1 | 2.3 | 2.6 | 1.00 |
prek-head --version |
2.5 ± 0.1 | 2.3 | 3.3 | 1.05 ± 0.06 |
prek list
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base list |
9.9 ± 0.2 | 9.3 | 10.2 | 1.02 ± 0.03 |
prek-head list |
9.7 ± 0.2 | 9.4 | 10.2 | 1.00 |
prek validate-config .pre-commit-config.yaml
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base validate-config .pre-commit-config.yaml |
3.4 ± 0.1 | 3.3 | 3.9 | 1.00 |
prek-head validate-config .pre-commit-config.yaml |
3.4 ± 0.1 | 3.3 | 3.5 | 1.00 ± 0.04 |
prek sample-config
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base sample-config |
2.8 ± 0.1 | 2.7 | 2.9 | 1.01 ± 0.02 |
prek-head sample-config |
2.8 ± 0.0 | 2.7 | 2.8 | 1.00 |
Cold vs Warm Runs
Comparing first run (cold) vs subsequent runs (warm cache):
prek run --all-files (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
146.8 ± 3.3 | 143.6 | 154.6 | 1.00 |
prek-head run --all-files |
148.4 ± 3.5 | 144.1 | 153.4 | 1.01 ± 0.03 |
prek run --all-files (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
150.2 ± 4.6 | 142.3 | 156.3 | 1.01 ± 0.04 |
prek-head run --all-files |
148.3 ± 3.6 | 142.7 | 155.6 | 1.00 |
Full Hook Suite
Running the builtin hook suite on the benchmark workspace:
prek run --all-files (full builtin hook suite)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
150.4 ± 4.4 | 143.5 | 160.4 | 1.00 |
prek-head run --all-files |
151.4 ± 8.1 | 143.6 | 198.0 | 1.01 ± 0.06 |
Individual Hook Performance
Benchmarking each hook individually on the test repo:
prek run trailing-whitespace --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run trailing-whitespace --all-files |
21.4 ± 0.3 | 20.6 | 22.3 | 1.00 |
prek-head run trailing-whitespace --all-files |
21.6 ± 0.6 | 20.5 | 22.6 | 1.01 ± 0.03 |
prek run end-of-file-fixer --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run end-of-file-fixer --all-files |
27.7 ± 2.5 | 24.1 | 32.8 | 1.01 ± 0.13 |
prek-head run end-of-file-fixer --all-files |
27.5 ± 2.5 | 24.8 | 36.1 | 1.00 |
prek run check-json --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-json --all-files |
13.2 ± 0.6 | 11.9 | 14.3 | 1.08 ± 0.05 |
prek-head run check-json --all-files |
12.3 ± 0.2 | 11.8 | 12.8 | 1.00 |
prek run check-yaml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-yaml --all-files |
11.9 ± 0.2 | 11.6 | 12.3 | 1.00 |
prek-head run check-yaml --all-files |
11.9 ± 0.2 | 11.7 | 12.4 | 1.00 ± 0.02 |
prek run check-toml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-toml --all-files |
12.4 ± 0.3 | 11.8 | 13.3 | 1.00 |
prek-head run check-toml --all-files |
12.6 ± 0.5 | 12.0 | 14.2 | 1.02 ± 0.05 |
prek run check-xml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-xml --all-files |
12.3 ± 0.3 | 11.8 | 12.7 | 1.00 |
prek-head run check-xml --all-files |
12.7 ± 1.5 | 12.0 | 20.5 | 1.03 ± 0.12 |
prek run detect-private-key --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run detect-private-key --all-files |
18.7 ± 1.4 | 16.4 | 21.8 | 1.04 ± 0.09 |
prek-head run detect-private-key --all-files |
18.0 ± 0.9 | 16.7 | 20.1 | 1.00 |
prek run fix-byte-order-marker --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run fix-byte-order-marker --all-files |
22.8 ± 1.7 | 20.4 | 26.9 | 1.00 |
prek-head run fix-byte-order-marker --all-files |
23.3 ± 1.7 | 20.6 | 26.7 | 1.02 ± 0.11 |
Installation Performance
Benchmarking hook installation (fast path hooks skip Python setup):
prek install-hooks (cold - no cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
5.3 ± 0.0 | 5.2 | 5.3 | 1.03 ± 0.02 |
prek-head install-hooks |
5.1 ± 0.1 | 5.0 | 5.3 | 1.00 |
prek install-hooks (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.9 ± 0.0 | 4.9 | 5.0 | 1.00 |
prek-head install-hooks |
5.1 ± 0.1 | 5.0 | 5.2 | 1.03 ± 0.02 |
File Filtering/Scoping Performance
Testing different file selection modes:
prek run (staged files only)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run |
51.4 ± 0.9 | 49.9 | 53.6 | 1.00 |
prek-head run |
51.8 ± 3.1 | 49.5 | 64.1 | 1.01 ± 0.06 |
prek run --files '*.json' (specific file type)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --files '*.json' |
8.6 ± 0.1 | 8.5 | 8.8 | 1.00 ± 0.02 |
prek-head run --files '*.json' |
8.6 ± 0.1 | 8.5 | 8.7 | 1.00 |
Workspace Discovery & Initialization
Benchmarking hook discovery and initialization overhead:
prek run --dry-run --all-files (measures init overhead)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --dry-run --all-files |
16.6 ± 0.3 | 16.2 | 17.1 | 1.00 |
prek-head run --dry-run --all-files |
16.9 ± 0.1 | 16.7 | 17.2 | 1.02 ± 0.02 |
Meta Hooks Performance
Benchmarking meta hooks separately:
prek run check-hooks-apply --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-hooks-apply --all-files |
14.2 ± 0.4 | 13.2 | 14.6 | 1.08 ± 0.04 |
prek-head run check-hooks-apply --all-files |
13.1 ± 0.3 | 12.8 | 13.6 | 1.00 |
prek run check-useless-excludes --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-useless-excludes --all-files |
13.2 ± 0.1 | 13.1 | 13.4 | 1.00 |
prek-head run check-useless-excludes --all-files |
13.4 ± 0.2 | 13.2 | 13.8 | 1.01 ± 0.01 |
prek run identity --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run identity --all-files |
11.3 ± 0.1 | 11.0 | 11.6 | 1.00 |
prek-head run identity --all-files |
11.5 ± 0.2 | 11.3 | 12.0 | 1.02 ± 0.02 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 062de7b53c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
This PR fixes workspace commit-msg / prepare-commit-msg hook handling so that the Git commit message file is consistently passed through to workspace hooks for each matching project, rather than being dropped during workspace file filtering.
Changes:
- Introduce a
RunInputabstraction to represent either workspace file lists or a Git message file for message stages. - Convert the message file once (to an absolute path) and then project-relativize it at runtime so each project’s hooks receive the correct argument.
- Add an integration test asserting the commit message file argument is passed to hooks in both the root project and a subproject.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| crates/prek/tests/hook_impl.rs | Adds a workspace integration test ensuring commit-msg hooks receive the message file argument per project. |
| crates/prek/src/cli/run/run.rs | Switches hook execution to consume RunInput and introduces per-project input conversion for message-file stages. |
| crates/prek/src/cli/run/mod.rs | Re-exports RunInput and the new collect_run_input API. |
| crates/prek/src/cli/run/filter.rs | Implements RunInput, adds collect_run_input, and resolves commit message file paths for message stages. |
Workspace
commit-msgandprepare-commit-msghooks now receive the Git message file as hook input for every matching project instead of losing it during workspace file filtering.This keeps normal workspace file ownership in
FileFilter, while message-stage hook input is resolved once and converted to a project-relative argument at run time.Fixes #1194, Fixes #2042