Skip to content

Comments

perf: show progress bars before expensive git status call#459

Merged
jdx merged 1 commit intomainfrom
show-progress-before-git-status
Nov 22, 2025
Merged

perf: show progress bars before expensive git status call#459
jdx merged 1 commit intomainfrom
show-progress-before-git-status

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Nov 22, 2025

Summary

Improves perceived performance by showing progress bars immediately instead of appearing frozen during startup.

Problem

Previously, the expensive git status operation happened before any progress bars were displayed, making hk appear frozen for several seconds during startup. Users had no indication that hk was working.

Solution

Reordered the initialization sequence to:

  1. Start hk progress bar (immediate feedback)
  2. Start files progress bar with "Fetching git status" message
  3. Run git status (now with visible progress indicators)

Impact

  • Users see spinners immediately when running hk
  • Better perceived performance and user experience
  • No functional changes, purely UX improvement

Test Plan

Run hk run pre-commit and observe that progress bars appear immediately instead of after a delay.

🤖 Generated with Claude Code


Note

Reorders hook run init to start hk/files progress spinners before executing git status for faster perceived startup.

  • UX/Progress
    • In src/hook.rs (Hook::run), start hk_progress and a file_progress spinner with message "Fetching git status" before calling repo.status(...).
    • git_status retrieval moved to run after progress bars are created; no functional logic changes.

Written by Cursor Bugbot for commit d71b2e3. This will update automatically on new commits. Configure here.

Previously, the expensive git status operation happened before any progress
bars were displayed, making hk appear frozen during startup. This reorders
the initialization to:

1. Start hk progress bar (immediate feedback)
2. Start files progress bar with "Fetching git status" message
3. Run git status (now with visible progress)

This provides immediate UI feedback that hk is working, improving perceived
performance and user experience.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@jdx jdx enabled auto-merge (squash) November 22, 2025 00:14
@jdx jdx merged commit 90a6540 into main Nov 22, 2025
16 checks passed
@jdx jdx deleted the show-progress-before-git-status branch November 22, 2025 00:18
@jdx jdx mentioned this pull request Nov 22, 2025
jdx added a commit that referenced this pull request Nov 22, 2025
## [1.24.1](https://github.com/jdx/hk/compare/v1.24.0..v1.24.1) -
2025-11-22

### ⚡ Performance

- show progress bars before expensive git status call by
[@jdx](https://github.com/jdx) in
[#459](#459)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Bump to 1.24.1 with docs/templates updated and changelog noting a
performance tweak (show progress bars before expensive git status).
> 
> - **Release/Versioning**:
> - Bump crate and CLI version to `1.24.1` in `Cargo.toml`,
`Cargo.lock`, `hk.usage.kdl`, and `docs/cli`.
> - **Docs & Examples**:
> - Update all Pkl `amends/import` URLs and displayed version strings to
`v1.24.1` across docs and example `.pkl` files.
>   - Regenerate `docs/cli/commands.json` with version `1.24.1`.
> - **CLI Templates**:
>   - Update `init` generated `hk.pkl` to reference `v1.24.1`.
>   - Adjust `src/config.rs` example error message to `v1.24.1` URL.
> - **Changelog**:
> - Add `1.24.1` entry noting performance: show progress bars before
expensive git status.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2439991. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: mise-en-dev <[email protected]>
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 27, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [hk](https://github.com/jdx/hk) | minor | `1.22.0` -> `1.25.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jdx/hk (hk)</summary>

### [`v1.25.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1250---2025-11-25)

[Compare Source](jdx/hk@v1.24.1...v1.25.0)

##### 🚀 Features

- add fix\_smart\_quotes builtin by [@&#8203;joonas](https://github.com/joonas) in [#&#8203;463](jdx/hk#463)

##### 🐛 Bug Fixes

- Use `stage = "<JOB_FILES>"` for the builtins by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;465](jdx/hk#465)
- Actually makes `files` for step tests default to write keys by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;464](jdx/hk#464)
- remove test cleanup to prevent race conditions by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;468](jdx/hk#468)

### [`v1.24.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1241---2025-11-22)

[Compare Source](jdx/hk@v1.24.0...v1.24.1)

##### ⚡ Performance

- show progress bars before expensive git status call by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;459](jdx/hk#459)

### [`v1.24.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1240---2025-11-21)

[Compare Source](jdx/hk@v1.23.0...v1.24.0)

##### 🚀 Features

- hook stage by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;448](jdx/hk#448)

##### 🐛 Bug Fixes

- Pass/render `stdin` for `hk test` tests by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;455](jdx/hk#455)

##### 📚 Documentation

- Fix `from_ref` docstring by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;454](jdx/hk#454)

##### ⚡ Performance

- skip stash operations when no unstaged changes by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;457](jdx/hk#457)
- skip staging when jobs are skipped by conditions by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;458](jdx/hk#458)

### [`v1.23.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1230---2025-11-21)

[Compare Source](jdx/hk@v1.22.0...v1.23.0)

##### 🚀 Features

- **(vacuum)** new builtin by [@&#8203;scop](https://github.com/scop) in [#&#8203;414](jdx/hk#414)
- add --stats flag to show file counts per step by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;446](jdx/hk#446)
- Plumb `stage` through CLI and PKL by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;442](jdx/hk#442)

##### 🐛 Bug Fixes

- **(cli)** check help description by [@&#8203;scop](https://github.com/scop) in [#&#8203;439](jdx/hk#439)

##### 📚 Documentation

- **(stash)** rephrase uncommitted -> unstaged by [@&#8203;scop](https://github.com/scop) in [#&#8203;451](jdx/hk#451)
- re-Remove "auto" stash value by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;444](jdx/hk#444)
- Delete `schema.md` by [@&#8203;thejcannon](https://github.com/thejcannon) in [#&#8203;445](jdx/hk#445)
- fix --fix description by [@&#8203;scop](https://github.com/scop) in [#&#8203;450](jdx/hk#450)

##### 📦️ Dependency Updates

- update actions/checkout digest to [`93cb6ef`](jdx/hk@93cb6ef) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;452](jdx/hk#452)
- update anthropics/claude-code-action digest to [`6902c22`](jdx/hk@6902c22) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;453](jdx/hk#453)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS4wIiwidXBkYXRlZEluVmVyIjoiNDIuMTkuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant