88 lines
3.4 KiB
Markdown
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).
|