Skip to content

v0.2.0

Choose a tag to compare

@schacon schacon released this 01 Jun 11:40
· 1755 commits to main since this release

Grit v0.2.0 is a large feature release — 321 commits since v0.1.6 — extending the
grit-lib engine and the grit CLI to cover most commonly-used, non-interactive Git
workflows. Each area below is validated against the upstream Git test suite (tests/).

Highlights

🔏 Signing (GPG + SSH) — new

  • New grit-lib/src/signing.rs and push_cert.rs (from scratch).
  • commit -S / commit.gpgsign, annotated tag -s/-u, verify-commit, verify-tag.
  • log/rev-list %G?/%GS/%GK/… and show --show-signature.
  • push --signed with HMAC nonce + GIT_PUSH_CERT* env.
  • Verify chooses format from the signature armor (SSH commits verify even with gpg.format unset).
  • Harness: t7510 28/28, t7528 26/29, t7031 14/14, t5534 13/13.

🌓 Sparse checkout

  • Cone + non-cone pattern load/save, sparse-directory index entries, read-tree/checkout materialization.
  • add/rm/mv/status respect the sparse specification.
  • Harness: t1091 76/77, t3705/t3602/t1011/t1090/t6428 green; t1092 64/106.

📦 Partial clone / promisor / lazy objects

  • filter=blob:none|tree:0|sparse|combine on clone/fetch, lazy fetch on touch, backfill/promisor-hydrate.
  • Harness: t0410 38/38, t5620 10/10, t4067 9/9, t6110 2/2; t5616 44/47.

🪝 Hooks

  • Multihook ordering, core.hooksPath, full v1 hook set wired with correct stdin/stdout/env.
  • Harness: t1800 44/44, t7503 22/22, t5571 11/11, t5401/2/3/4 green; t5407/t7505 improved.

🔀 Core workflows (non-interactive)

  • checkout/restore/reset, merge, cherry-pick/revert/rerere, status v1/v2, log.
  • gc/repack/maintenance run with scheduler backends, incremental/geometric repack, midx expire.
  • Harness: t7201-co 46/46, t7102 38/38, t7508-status 121/126, cherry-pick family green,
    t7600-merge 81/83, t7900-maintenance 71/72, t6500-gc 34/35.

🧩 Submodules

  • init/update/sync/deinit/status/foreach (non-interactive), gitlink handling.
  • Harness: t7400-submodule-basic 49→111/124, t7403 18/18, t7406 43/70, t7407 21/23.

🏗️ Foundation & quality

  • Repository session/discovery hardening (t1510 109/109, t1517 191/191).
  • Workspace-wide clippy cleanup: ~180 unwrap/expect deny-lint errors converted to proper
    error handling (behavior-preserving). cargo fmt clean; grit-lib lib tests 229/0; clippy green.

Scope & known limitations

See docs/v1-scope.md for the full
in-scope/out-of-scope breakdown. Out of scope for now: interactive modes (-p/rebase -i),
complex HTTP auth (Digest/NTLM/Negotiate), fsmonitor, and server-side daemons. Partial areas:
submodule --recurse-submodules checkout, sparse-index lazy expansion (t1092), and some log formats.

Full Changelog: v0.1.6...v0.2.0

What's Changed

  • remove plans by @schacon in #760
  • Library worktree support and t2402 harness by @schacon in #761
  • fix: handle gitfile GIT_DIR in repo setup by @krlvi in #762
  • fix: handle diff outside repo by @krlvi in #763
  • fix: format rev-parse git paths by @krlvi in #764
  • fix: deduplicate commit-tree parents by @krlvi in #765
  • fix: honor full log decorations from config by @krlvi in #766
  • fix: honor disabled reflog auto creation by @krlvi in #767
  • fix: validate loose objects in pack-objects by @krlvi in #768
  • fix: handle invalid double-star wildmatch by @krlvi in #769
  • fix: avoid duplicate update-ref transaction hooks by @krlvi in #770
  • fix: honor long magic pathspecs in add by @krlvi in #771
  • Worktree: linked HEAD, submodules, config, and harness by @schacon in #772
  • fix: sparse-checkout worktree config and apply (t1091 54/77) by @schacon in #773

New Contributors

Full Changelog: v0.1.6...v0.2.0