4 repos · 34 commands · 3 broken · 1 slow · 5 filed
As the automation/CI scripter I re-verified all six 'fixed' issues on current main (all genuinely fixed), then went after patch-id parity on real history, machine output (--json/--markdown/--filter/error kinds), env/config overrides, hooks, signals, concurrency, shallow/CI flows and grit serve token auth. Core flows are solid and fast; I filed 5 issues: two residual patch-id mismatches vs git, clone --json/--markdown leaking URL tokens, markdown output not escaping commit messages, and inconsistent JSON error kinds.
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo | 3,078 | 23,596 | 82 MB | |
| git/git | 4,857 | 82,616 | 324 MB | |
| octocat/Hello-World | 1 | 3 | 1 MB | |
| scratch/patch-id, odd-names, env, hooks, race, gcrace, serve repos | — | — | — | synthetic repos under /tmp/dogfood |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit patch-id <300 cargo commits> vs git show|git patch-id --stable | rust-lang/cargo | 207 ms | 917 ms | 0.2× | wrong | 1/400 differs (#2291) |
| grit patch-id <1500 commits> vs git show|patch-id | git/git | 1.25 s | 5.77 s | 0.2× | wrong | 3/1500 differ (#2292) |
| grit clone file:// (local) | git/git | 24.91 s | 17.04 s | 1.5× | ok | 1.5x time, 1.8x mem; result passes git fsck |
| grit fetch --tags (depth-1 clone) | rust-lang/cargo | 6.51 s | 5.29 s | 1.2× | memory | 2.3x git peak RSS; not filed (similar to known fetch memory issues) |
| grit clone --depth 1 -b 0.80.0 file:// | rust-lang/cargo | 390 ms | — | — | ok | |
| grit status --json | git/git | 10 ms | 10 ms | 1.0× | ok | |
| grit diff --json v2.40.0 v2.45.0 | git/git | 250 ms | 350 ms | 0.7× | ok | |
| grit log --json -n 5000 | git/git | 60 ms | 40 ms | 1.5× | ok | |
| grit revs --count HEAD | git/git | 710 ms | 560 ms | 1.3× | ok | |
| grit blame --json revision.c | git/git | 820 ms | 920 ms | 0.9× | ok | |
| grit merge-base v2.40.0 v2.45.0 | git/git | 10 ms | 170 ms | 0.1× | ok | |
| grit log --json -n 20 -- builtin/log.c | git/git | 10 ms | 10 ms | 1.0× | ok | |
| git fsck --connectivity-only on grit-made clone | git/git | — | 3.30 s | — | ok | clean |
| grit resolve HEAD (hyperfine -N) | rust-lang/cargo | 2.1 ms | 0.8 ms | 2.6× | ok | 2.6x; startup floor |
| grit log --json -n1 | rust-lang/cargo | 2.4 ms | 1.2 ms | 2.1× | ok | |
| grit cat HEAD:Cargo.toml | rust-lang/cargo | 2.3 ms | 1.2 ms | 1.9× | ok | |
| grit status --json | rust-lang/cargo | 13 ms | 10 ms | 1.2× | ok | |
| grit diff --quiet | rust-lang/cargo | 5.0 ms | 2.8 ms | 1.8× | ok | |
| grit branch --json | rust-lang/cargo | 2.3 ms | 0.8 ms | 2.9× | ok | 2.9x, tiny absolute |
| grit tag --json (124 tags) | rust-lang/cargo | 3.7 ms | 0.9 ms | 4.0× | ok | git number is a single-tag lookup, not equal work |
| grit --version | octocat/Hello-World | 1.3 ms | 0.3 ms | 3.7× | ok | 0.9 ms user time; 43 MB binary, 39,699 relative relocs |
| grit status --json | octocat/Hello-World | 2.4 ms | 1.2 ms | 2.0× | ok | |
| grit clone --json http://x:TOKEN@host/repo | scratch/serve | — | — | — | wrong | prints token (#2302) |
| grit push 60MB random over HTTP (grit serve, token) | scratch/serve | 2.74 s | 2.54 s | 1.1× | ok | |
| grit clone 120MB over HTTP (grit serve, token) | scratch/serve | 6.34 s | 6.92 s | 0.9× | ok | |
| grit gc x60 while 3x80 pushes | scratch/gcrace | 4.10 s | — | — | ok | 0 failures, fsck clean (#2210 verified) |
| grit reflog expire x40 while 100 commits | scratch/rl | — | — | — | ok | no entries lost (#2286 verified) |
| grit push --force-with-lease=<rev> x8 parallel x3 | scratch/race | — | — | — | ok | 1 winner, 7 'stale' each round |
| grit push (same new ref) x8 parallel, plain and --atomic | scratch/race | — | — | — | ok | 1 winner, 7 already_exists |
| grit switch --detach <old tag> + SIGTERM | rust-lang/cargo | — | — | — | ok | clean cancel, nothing half-written |
| grit clone + SIGTERM/HUP/INT | rust-lang/cargo | — | — | — | ok | dir removed; exit 130 for all |
| grit commit with commit.gpgsign=true, gpg.format=ssh | scratch/sg | — | — | — | ok | signed like git |
| grit log/diff/show/status --json with non-UTF-8 and special file names | scratch/odd | — | — | — | ok | valid JSON; non-UTF-8 as grit+pathhex: (documented) |
| grit <45 commands> --json / --markdown sweep | scratch/sweep | — | — | — | ok | all JSON valid |