Files
2026-04-29 20:38:13 -06:00

88 lines
3.4 KiB
Markdown

# bshelper
A tiny TUI for reporting **good / bad / skip / abort** verdicts during a
manual bisect.
Designed for `jj bisect run`, but works equally well with `git bisect run`
since both use the same exit-code contract.
## Why
`jj bisect run` (and `git bisect run`) hand verdicts back through the
process exit code: `0`, `1`, `125`, `127`. For automated tests that's fine,
but for *manual* bisects you end up typing `exit 125` and remembering which
code is which. `bshelper` replaces that with a small modal picker that says
the words out loud.
```
┌─ bshelper · jj ─────────────────────────────────┐
│ │
│ Commit k7q4mzpw 78fa1c2b │
│ Author Steve Waits <steve@waits.net> │
│ Date 2026-04-29 14:22 │
│ │
│ Refactor parser to remove redundant clones │
│ ───────────────────────────────────────────── │
│ │
│ GOOD build / test passed │
│ BAD build / test failed │
│ ▶ SKIP can't tell — mark indecisive │
│ ABORT stop the bisection now │
│ │
│ ───────────────────────────────────────────── │
│ ↑/k ↓/j navigate · Enter commits: SKIP │
└─────────────────────────────────────────────────┘
```
## Install
```sh
cargo install bshelper
```
## Use
With Jujutsu (preferred):
```sh
jj bisect run --range 'a..b' -- bshelper
```
With Git:
```sh
git bisect start <bad> <good>
git bisect run bshelper
```
bshelper detects the VCS at runtime: jj first, git as a fallback. The
selected verdict is reported via the process exit code so the parent
`bisect run` keeps walking the history.
## Verdicts
| Verdict | Exit | Meaning |
| ------- | ---- | ------------------------------------ |
| GOOD | 0 | build / test passed |
| BAD | 1 | build / test failed |
| SKIP | 125 | can't tell — mark indecisive |
| ABORT | 127 | stop the bisection now |
These match the `git bisect run` / `jj bisect run` contract exactly.
## Keys
| Key | Action |
| --------- | --------------------- |
| `↑` / `k` | move highlight up |
| `↓` / `j` | move highlight down |
| `Enter` | commit the highlight |
The default highlight is **SKIP** — a stray `Enter` wastes a step but never
poisons the bisect. There is no second escape hatch: to abort, navigate to
`ABORT` and press Enter.
## License
MIT — see [LICENSE](LICENSE).