5 repos · 27 commands · 5 broken · 4 slow · 5 filed
Played a Rust tool builder on win-x64: a fresh cargo project linking grit-lib by path (walk, tree sizes, status, blame, stage/commit, ref CAS, push with cancel, merge matrix, multi-thread and soak runs), compared against system git 2.55 and the grit CLI. All six 'fixed' issues re-checked as fixed on main 7071b20; the lib is fast and its typed writer/ref APIs are solid, interop with git 2.55 (reftable, sha256, MIDX, bitmaps, commit-graph) is clean. Filed 5 new issues: reserved-name loose refs on Windows (#2257), unvalidated symbolic ref targets (#2258), CRLF merge divergence from git (#2259), lossy blame content (#2260), spurious 'Access is denied' under in-process commit contention (#2261).
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo | 3,078 | 23,591 | 88 MB | git clone with CRLF worktree via system autocrlf |
| octocat/Hello-World | 1 | 3 | 0 MB | |
| scratch/48k-files | 48,000 | 4 | 9 MB | built with git fast-import, 400 dirs x 7 subdirs |
| scratch/grit-clone-of-cargo | 3,078 | 23,591 | 89 MB | made with grit clone; also used for gc/midx/bitmap/commit-graph |
| scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | small purpose-built repos |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| lib: rev_walk().walk(HEAD) + read_commit x23.6k | rust-lang/cargo | 331 ms | 252 ms | 1.3× | ok | git = rev-list HEAD only (no commit parsing) |
| lib: tree walk with read_info sizes | rust-lang/cargo | 16 ms | 57 ms | 0.3× | ok | git = ls-tree -r -l HEAD |
| lib: porcelain::status::status | rust-lang/cargo | 150 ms | 148 ms | 1.0× | ok | |
| grit status | scratch/grit-clone-of-cargo | 120 ms | 50 ms | 2.4× | ok | 2.4x git, under the 3x bar; duplicate #1702 |
| grit add . (clean) | scratch/grit-clone-of-cargo | 179 ms | 46 ms | 3.9× | slow | 3.9x git; duplicates #1682/#1702 |
| lib: porcelain::add::stage (clean) | scratch/grit-clone-of-cargo | 168 ms | 46 ms | 3.7× | slow | 3.6x; duplicate #1682 |
| grit add . (clean) | scratch/48k-files | 226 ms | 71 ms | 3.2× | slow | 3.2x; duplicate #1682 |
| lib: porcelain::add::stage (clean) | scratch/48k-files | 350 ms | 71 ms | 4.9× | slow | 4.9x git, 1.5x slower than the CLI path; stat_refreshed=false and no speed-up on repeated runs; duplicate #1682 |
| grit status (clean / 1 modified) | scratch/48k-files | 150 ms | 71 ms | 2.1× | ok | 2.1x |
| grit commit (1 file edited) | scratch/48k-files | 332 ms | 112 ms | 3.0× | ok | 3.0x; duplicate #1884 |
| lib: create_commit (staged) | scratch/48k-files | 114 ms | — | — | ok | |
| lib: blame_file (Revision / Worktree) | rust-lang/cargo | 123 ms | 172 ms | 0.7× | ok | src/bin/cargo/cli.rs; other files 92-145 ms vs git 113-175 ms |
| lib: changelog over 123 tag ranges | rust-lang/cargo | 280 ms | 3.93 s | 0.1× | ok | git = 123 rev-list --count processes; counts identical |
| lib: Remote::push (path, full cargo) | rust-lang/cargo | 7.63 s | 4.80 s | 1.6× | ok | 1.6x; git peak RSS not measurable (child process) |
| lib: Remote::push over smart HTTP (grit serve) | rust-lang/cargo | 6.11 s | 3.78 s | 1.6× | ok | 1.6x |
| lib: Remote::push cancelled at 300/500 ms | rust-lang/cargo | 300 ms | — | — | ok | Cancelled returned on time, nothing left in destination |
| grit clone <local cargo> | rust-lang/cargo | 1.29 s | 1.23 s | 1.0× | ok | |
| grit clone over smart HTTP | rust-lang/cargo | 4.75 s | 5.98 s | 0.8× | ok | |
| grit fetch (20 new commits, HTTP) | rust-lang/cargo | 98 ms | 680 ms | 0.1× | ok | |
| grit gc repack --bitmaps / midx / commit-graph | scratch/grit-clone-of-cargo | 3.94 s | — | — | ok | 1943 + 125 + 1874 ms; git 2.55 fsck/multi-pack-index verify/commit-graph verify/bitmap rev-list all clean |
| grit init --ref-format reftable|--object-format sha256 + commit + gc | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | ok | read by git 2.55; reverse via lib also ok |
| lib: commit_ref_update_on_store matrix (files + reftable) | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | wrong | symref targets and log_only entries unvalidated #2258; aux ref #2257 |
| grit branch aux / com1 | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | wrong | #2257: git log --all fatal afterwards |
| grit merge (20-scenario matrix) vs git merge-tree --write-tree | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | wrong | 18/20 match; CRLF-vs-edit diverges #2259 |
| lib: create_commit x 4-8 threads | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | error | spurious Access denied #2261 |
| lib: 150-iteration soak (walk+status+write) | rust-lang/cargo | 16.80 s | — | — | ok | flat working set |
| grit blame --json (latin-1 file) | scratch/misc (merge matrix, locks, refs, reftable/sha256, unicode path) | — | — | — | wrong | lossy content, no flag #2260 |