Remove config-tracking cache bootstrap - #2621
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1b8726b1bc
ℹ️ 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".
| match fs_err::read_to_string(&tracking_file) { | ||
| Err(e) if e.kind() == std::io::ErrorKind::NotFound => {} | ||
| Err(e) => return Err(e.into()), | ||
| Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(FxHashSet::default()), |
There was a problem hiding this comment.
Preserve configs discovered before tracking starts
When config-tracking.json is absent but workspace caches already exist, returning an empty set here causes the next run or exec to write only its own selected configs. Other entry points, notably install --install-hooks through prepare_hooks, initialize repositories and hook environments and save a workspace cache without calling track_configs; after a run in another workspace creates the tracking file, cache gc treats those still-used resources as unreferenced and removes them. Preserve the migration seeding or make every resource-producing path track its configs before removing it.
Useful? React with 👍 / 👎.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## drop-max-concurrency #2621 +/- ##
========================================================
+ Coverage 92.53% 93.99% +1.45%
========================================================
Files 140 140
Lines 29578 29534 -44
========================================================
+ Hits 27371 27761 +390
+ Misses 2207 1773 -434 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
1b8726b to
e804c97
Compare
9275cc1 to
eedda1b
Compare
📦 Cargo Bloat Comparison
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.3 ± 0.1 | 2.1 | 3.0 | 1.06 ± 0.08 |
prek-head --version |
2.1 ± 0.1 | 2.0 | 2.6 | 1.00 |
prek list
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base list |
9.3 ± 0.4 | 8.9 | 11.3 | 1.00 |
prek-head list |
9.4 ± 0.3 | 9.0 | 10.5 | 1.00 ± 0.05 |
prek validate-config .pre-commit-config.yaml
⏭️ Skipped: .pre-commit-config.yaml not found
prek sample-config
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base sample-config |
2.7 ± 0.2 | 2.4 | 3.2 | 1.07 ± 0.09 |
prek-head sample-config |
2.5 ± 0.1 | 2.4 | 3.1 | 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 |
41.1 ± 1.8 | 38.0 | 43.3 | 1.01 ± 0.05 |
prek-head run --all-files |
40.6 ± 1.2 | 38.5 | 42.1 | 1.00 |
prek run --all-files (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --all-files |
40.4 ± 1.0 | 38.4 | 42.1 | 1.01 ± 0.04 |
prek-head run --all-files |
40.0 ± 1.0 | 38.6 | 42.2 | 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 |
40.1 ± 1.4 | 37.5 | 43.1 | 1.00 |
prek-head run --all-files |
40.3 ± 1.1 | 37.4 | 42.9 | 1.00 ± 0.04 |
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 |
13.6 ± 0.3 | 13.1 | 14.2 | 1.01 ± 0.04 |
prek-head run trailing-whitespace --all-files |
13.4 ± 0.4 | 12.3 | 14.3 | 1.00 |
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 |
11.4 ± 0.6 | 10.6 | 13.2 | 1.00 |
prek-head run end-of-file-fixer --all-files |
11.4 ± 0.5 | 10.6 | 12.7 | 1.01 ± 0.07 |
prek run check-json --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-json --all-files |
8.0 ± 0.3 | 7.4 | 8.8 | 1.00 ± 0.05 |
prek-head run check-json --all-files |
7.9 ± 0.3 | 7.4 | 8.4 | 1.00 |
prek run check-yaml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-yaml --all-files |
7.8 ± 0.2 | 7.4 | 8.0 | 1.01 ± 0.03 |
prek-head run check-yaml --all-files |
7.7 ± 0.2 | 7.4 | 8.2 | 1.00 |
prek run check-toml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-toml --all-files |
7.9 ± 0.3 | 7.4 | 8.8 | 1.00 |
prek-head run check-toml --all-files |
7.9 ± 0.3 | 7.5 | 8.4 | 1.00 ± 0.05 |
prek run check-xml --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-xml --all-files |
7.6 ± 0.3 | 7.2 | 8.8 | 1.00 |
prek-head run check-xml --all-files |
7.7 ± 0.4 | 7.1 | 8.8 | 1.01 ± 0.07 |
prek run detect-private-key --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run detect-private-key --all-files |
11.1 ± 0.5 | 10.2 | 12.2 | 1.00 |
prek-head run detect-private-key --all-files |
11.2 ± 0.5 | 10.7 | 13.0 | 1.01 ± 0.07 |
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 |
13.0 ± 0.8 | 11.9 | 14.8 | 1.00 |
prek-head run fix-byte-order-marker --all-files |
13.4 ± 0.8 | 12.1 | 15.4 | 1.03 ± 0.09 |
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 |
4.6 ± 0.1 | 4.5 | 4.7 | 1.04 ± 0.03 |
prek-head install-hooks |
4.4 ± 0.1 | 4.3 | 4.4 | 1.00 |
prek install-hooks (warm - with cache)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base install-hooks |
4.4 ± 0.1 | 4.4 | 4.6 | 1.00 |
prek-head install-hooks |
4.6 ± 0.1 | 4.4 | 4.8 | 1.03 ± 0.04 |
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 |
24.4 ± 0.4 | 23.8 | 25.3 | 1.00 ± 0.03 |
prek-head run |
24.3 ± 0.5 | 23.7 | 25.6 | 1.00 |
prek run --files '*.json' (specific file type)
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run --files '*.json' |
5.3 ± 0.1 | 5.1 | 5.6 | 1.00 |
prek-head run --files '*.json' |
5.3 ± 0.2 | 5.1 | 5.8 | 1.01 ± 0.04 |
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 |
6.9 ± 0.1 | 6.7 | 7.1 | 1.00 |
prek-head run --dry-run --all-files |
7.0 ± 0.2 | 6.8 | 7.5 | 1.02 ± 0.03 |
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 |
8.2 ± 0.1 | 8.1 | 8.4 | 1.00 |
prek-head run check-hooks-apply --all-files |
8.5 ± 0.3 | 8.1 | 9.2 | 1.03 ± 0.04 |
prek run check-useless-excludes --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run check-useless-excludes --all-files |
8.1 ± 0.1 | 7.9 | 8.2 | 1.00 |
prek-head run check-useless-excludes --all-files |
8.2 ± 0.2 | 8.0 | 8.5 | 1.01 ± 0.02 |
prek run identity --all-files
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
prek-base run identity --all-files |
7.0 ± 0.1 | 6.9 | 7.1 | 1.00 |
prek-head run identity --all-files |
7.4 ± 0.3 | 7.1 | 8.0 | 1.06 ± 0.04 |
Removes the one-time config-tracking bootstrap from the workspace discovery cache.