Skip to content

v0.5.24

Choose a tag to compare

@github-actions github-actions released this 28 Oct 22:30
· 613 commits to main since this release
v0.5.24

What's changed

  • Fixes #2241: do not report mtime-only tracked refresh as staged (0218399)
  • Fixes #2238: Git habit spellings and migration hints (40e2209)
  • Fixes #2235: persist exec rebase state across interrupt (f1ef4bd)
  • Merge branch 'factory/rev-list-since-filter-stop-0e08' (5cabe3d)
  • Refresh public-api.txt for ReflogDateUnparseable resolve error (e4301db)
  • Merge branch 'factory/public-api-snapshot-5267' (ebc84ff)
  • Return zero immediately for filtered count with --max-count=0 (f990553)
  • Fix filtered rev-list count limits and plain --count --since (7da8304)
  • Fix rev-list --since frontier stop with filters and paths (b6ed056)
  • Preserve invalid reflog date errors through Repository::resolve (1daa56c)
  • Fix reflog @{date} selectors to use relaxed approxidate grammar (c40f88d)
  • Refresh grit-lib public-api.txt for CloneOutcome field order (c81d423)
  • Merge branch 'factory/skip-bundle-post-verify' (8550290)
  • Fixes #2228: skip redundant post-index verify on bundle unbundle (04e9335)
  • Journal directory spool when restore replaces a directory with a file (6f39644)
  • Fix Ctrl-C during grit reset --hard and restore --source (89edd75)
  • Merge branch 'factory/rust-version-msrv-2117' (e565cd5)
  • Merge branch 'factory/clone-blobs-filter-sent-5241' (8533a4b)
  • Merge branch 'factory/reference-transaction-hook-9fb4' (3106905)
  • Fix clone --blobs when server lacks filter capability (b057a9f)
  • Merge branch 'factory/submodule-gitlink-2229' (07f5bd6)
  • Update public-api snapshot for reference-transaction hooks (ac95fe8)
  • Merge branch 'factory/icase-commit-path-5240' (162c9ba)
  • Restore zero_oid import in on_store tests (ae2d2be)
  • Fix clippy after reference-transaction hook review fixes (f58f8fe)
  • Fix reference-transaction hook null oid width and lock ordering (9549b2a)
  • Fixes #2220: run reference-transaction hook on ref store updates (89e3988)
  • Fix #2229: uninitialized gitlink status and clone submodule note (56b5f2b)
  • Fix ignorecase collision losers on path commit and status (4d05dc2)
  • Fixes #2231: return WouldOverwrite for merge and untracked overwrites (7ad686f)
  • Merge branch 'factory/worktree-post-checkout-hook' (b4bb1cf)
  • Fixes #2227: declare Rust 1.95 MSRV for published crates (b0315d7)
  • Fix HTTP client rejecting credentials on 404 and other non-401 errors (68ebabf)
  • Fixes #2232: run post-checkout after worktree add (6c0c1a5)
  • Fix grit-lib compile errors blocking CI on main (22ec3d0)
  • Merge branch 'factory/rebase-marker-labels' (98ca92a)
  • docs: upload-pack include-tag adds tags of any sent object (e71150e)
  • upload-pack: decide include-tag from the objects being packed (dabf88c)
  • Merge branch 'factory/restore-hunks-single-index-read' (144da67)
  • Refresh grit-lib public-api snapshot for PackBitmapWriteOptions.reachability_roots (e4f5b53)
  • Refcount receive .keep markers and snapshot inventory keep status (cbaaad5)
  • Protect migrated receive packs with .keep until refs publish (59ef6e2)
  • Label rebase conflict markers with the replayed commit (3ab9a25)
  • Free xdiff alignment state before building compaction line bodies (bf8d147)
  • Filter stacked rebase replay by range descent (6489406)
  • Limit stacked rebase replay to first-parent chains (cf8ddf3)
  • Fix rebase update-refs for multi-commit stacked branches (6fe1f3c)
  • Record ORIG_HEAD for grit rebase --exec and -X (f6018de)
  • Honor -X ours|theirs in resumable rebase planning (19a3b4c)
  • Document ORIG_HEAD for reset, merge, rebase and pull (1885674)
  • Record ORIG_HEAD on reset, merge, rebase and pull (b0aa4d1)
  • Merge branch 'factory/ci-public-api-5190' (78cd7ed)
  • Refresh grit-lib public-api snapshot for cargo-public-api ordering (baf324d)
  • Merge branch 'factory/unpack-memory-5179' (d9d6a59)
  • Fixes #2216: bound unpack-objects memory with delta-base LRU (6855845)
  • Document when a worktree hunk restore writes the index (233def0)
  • Skip the line diff for -G pairs where neither side matches (ed2632f)
  • Document pickaxe rename pairing and cover Pickaxe::matches_commit (773bacc)
  • Count literal -S matches with memmem (ef28ed8)
  • Pair renames before testing pickaxe -S/-G matches (c96f591)
  • Fixes #2214: default grit index lock pid sidecars for stale-lock recovery (6a3f33f)
  • Merge branch 'factory/fix-status-unstaged-null-oid' (77fda0c)
  • Skip redundant copies and line scans in the hunk diff pipeline (a1bb921)
  • Read the index once when restoring hunks and write it only on change (f5510d0)
  • Merge branch 'factory/merge-commit-hooks' (3b583a0)
  • Fixes #2215: use null OID for unstaged worktree side on size drift (4309196)
  • Merge branch 'factory/fix-gc-concurrent-2210' (4de05ae)
  • Document pre-merge-commit, prepare-commit-msg and pre-rebase (45d5e04)
  • Merge branch 'factory/sparse-oid-filter-5168' (856bfc6)
  • Merge branch 'factory/integrate-open-prs' (4992b10)
  • Hint how to finish a merge a hook refused (389cb7a)
  • Test commit, merge and rebase hooks against system git (7ca8c07)
  • Run pre-merge-commit, prepare-commit-msg and pre-rebase hooks (407893f)
  • Stream a local fetch's pack to a spool and skip per-object re-checks (d4d6eed)
  • Pack a local fetch's missing objects directly when it has haves (4d4a187)
  • Link a source pack that holds a few objects the receiver already has (ac63bad)
  • Tell the pusher when the update hook declines a ref (9518189)
  • Don't trust a pack listing left by another store on the thread (11be8c1)
  • Only report created paths as copies in detect_copies (79aa9d4)
  • Fix sparse:oid filter matching nested paths under included dirs (e0b3e5f)
  • Pin migrated receive-pack packs until refs are published (5de2834)
  • Record pre-repack pack inventory before maintenance roots (843add0)
  • Fix gc bitmap failure when pushes land during repack (f85723e)
  • Merge branch 'factory/reset-undo-fast' (8cbefdd)
  • Document the many-tag undo-commit numbers (f90286c)
  • Test header-primed tip walks and the rewind shortcut (42c0f8a)
  • Read ref-tip commit headers in parallel for the orphaned-commit report (721c233)
  • Fixes #2211: compact rewrite-apply journal for clean tree transitions (b4b486c)
  • Hash gitlinks and type changes in patch-ids like git show (b89b9f5)
  • Name the branch whose replay conflicts in history rewrites (e8e3d00)
  • Merge branch 'factory/switch-gitlink-advance' (7cc1694)
  • Merge branch 'factory/sigterm-sighup-clone-5156' (4f53a9a)
  • Merge branch 'factory/patch-id-empty-files' (5931549)
  • Advance the index gitlink when a submodule checkout drifted (4318073)
  • Handle SIGTERM and SIGHUP like SIGINT for cancellable CLI operations (b618e1e)
  • Match git patch-id --stable for commits with header-only file entries (80f59af)
  • Document exit 128 for a refused pull --ff-only (76ce3c2)
  • Exit 128 when pull --ff-only cannot fast-forward (48c01f6)
  • Keep form feed and vertical tab in patch-id hashes (b63df8b)
  • Slide diff hunks only across lines that compare equal (dd6822c)
  • Merge branch 'factory/ref-df-conflict-errors' (14e6e26)
  • Retry busy ref stores for core.filesRefLockTimeout (b334ea2)
  • Take the shared ref store lock last in linked worktree transactions (b5f8884)
  • Report ref directory/file conflicts as name conflicts naming the blocking ref (bb07853)
  • Document that one reflog expiry run reads each commit once (2a2c86d)
  • Intern commits for the per-ref reflog reachability walk (95a23e6)
  • Size the merged config entries once per load (a476035)
  • Evaluate hasconfig:remote.*.url: against the whole config load (02c335f)
  • Report overwritten branches on grit rebase --abort and explain a stale exec plan (c9b5a26)
  • Restore a moved branch on rebase abort and refuse to resume a stale exec plan (e382eb3)
  • Merge branch 'factory/diff-worktree-binary-note' (e91d222)
  • Report worktree binary content changes in grit diff (464c969)
  • Hash dirty files in parallel for every index-to-worktree diff (004fca1)
  • Merge branch 'factory/dead-unused-lib-fns' (a90c121)
  • Share HTTP media-type parsing in non-Git-server detection (7da6972)
  • Record MIDX layer stamp reads in hot-path test metrics (de44d28)
  • Remove grit-lib public functions that nothing calls (e33eec0)
  • Document the sparse-index collapse numbers (7af96b5)
  • Test sparse-index collapse against Git's own sparse index (d928a9e)
  • Collapse sparse directories in one pass on index write (ad0360a)
  • List only refs/ for an empty for_each_ref prefix on every ref store (620a96e)
  • Document initial ref transactions and the 200k-branch clone/fetch numbers (029fb74)
  • Hand fetch's tracking-ref writes to the store without copying (aad653c)
  • Cut per-ref filesystem work in files-store batches (14d2c50)
  • Write a clone's imported refs as one packed-refs file (da30ade)
  • Check same-batch ref name conflicts in O(n log n) (5274168)
  • Document the sparse hard-reset numbers for changed excluded trees (6f42b82)
  • Keep changed excluded sparse directories opaque on hard reset (41f7eaf)
  • Merge pull request #2194 from schacon/loose-ref-listing-once (9a0e192)
  • Merge branch 'factory/reflog-expire-fast' (eb2680a)
  • Document how reflog expiry judges unreachable entries (d6bd3c2)
  • Share commit linkage across the refs of one reflog expiry pass (545a19c)
  • Walk reflog reachability lazily from the total-expiry cutoff (61d2f99)
  • Expire old reflog entries with a commit-only reachability walk (125c3c3)
  • Skip stat and readlink for regular loose ref files (4bdb17b)
  • Render diffstats from the grit-lib model in the CLI (f46206c)
  • Add a typed diffstat model to grit-lib (7a719e4)
  • Merge branch 'factory/add-skip-stored-blobs' (81a58c7)
  • Document that packing refs keeps the refs directory (fdb0e3d)
  • Keep .git/refs when packing refs empties the refs tree (e4bf8f5)
  • Skip writing staged blobs that are already packed or in an alternate (86d3e5d)
  • Merge pull request #2150 from schacon/worktree-prune-missing-gitfile (729e2d6)
  • Merge pull request #2149 from schacon/worktree-add-orphan (f0c26a9)
  • Merge branch 'factory/ref-oid-verification' (505df55)
  • Check branch-commit tips on the files fast path (e5f18c9)
  • Check ref writes against the repository's own object store (037889e)
  • Refuse ref updates to missing objects and branches to non-commits (a81ead5)
  • Merge branch 'factory/merge-directory-renames' (2db83ea)
  • Delete conflict-only files on merge --abort (e308c89)
  • Detect directory renames in three-way merges (3275a31)
  • Document where a push cancel lands (04ad33d)
  • Stop a wire push on cancel while sending the pack or awaiting the report (5e819fb)
  • Poll the cancel signal while a local push builds and indexes its pack (a741643)
  • Document read_store, missing git dirs and hooks for injected stores (03fab2b)
  • Expose an Odb's whole lookup chain as one ObjectStore (e9320c2)
  • Reject commit-graph octopus parents that have no EDGE chunk (9ee867d)
  • Give custom object stores a commit-graph of their own (735f0ee)
  • Read custom primary objects without the files pack context (60a4cfc)
  • grit blame: blame the working tree by default, add --contents (890fd29)
  • blame: attribute uncommitted worktree and buffer content (26ab16f)
  • Merge branch 'factory/undo-crlf-index-stat' (69d42f4)
  • Give history undo's restored index entries real stat data (7d613fd)
  • Share the per-path index stat refresh between restore paths (5f47a65)
  • Merge branch 'factory/rename-default-50' (075d6bf)
  • Merge branch 'factory/revs-startup-lean' (bb6f58c)
  • bench: record short revision listings before and after (b2a9e27)
  • Hex-encode object ids from a nibble table (01d637a)
  • Snapshot the filter subprocess environment on first use (3f1170d)
  • revs: build only the rows each output mode renders (bcf6512)
  • Record the 2026-10-27 daily audit and deep-tree ancestor-check gains (1c52655)
  • Guard the ancestor-symlink probe count on deep chains (7bdd239)
  • Confirm deep ancestor chains with one openat2 walk on Linux (a29ea67)
  • Make the ancestor-symlink cache per scan worker (3ebc344)
  • Detect renames at 50% similarity by default, matching git (51a68ba)
  • Merge branch 'factory/rebase-keep-same-tip-branches' (687ebc5)
  • Keep other branches at the HEAD commit out of history rewrites (3dd9dbf)
  • Merge branch 'factory/typed-hunk-select-errors' (dc92089)
  • Carry typed errors in hunk selection failures (43b62aa)
  • Hide every ancestor of excluded tips in --first-parent ranges (b6ffcf1)
  • Lock in linear ignorecase staging on a clean tree with a regression test (95781d5)
  • Document the Windows nanosecond stat default and its status numbers (0076420)
  • Compare index stat to the nanosecond by default on Windows (444f57b)
  • docs: record that show HEAD is bounded by startup cost (bd7cc29)
  • bench: publish daily numbers from the dist build (7aca5ce)
  • diff: walk tree entries borrowed from the raw tree payload (8b56f76)
  • Merge branch 'factory/checkout-long-path-spool' (554e74c)
  • Merge branch 'factory/add-untracked-chunked-memory' (0024a12)
  • Keep checkout spool names short for deep paths (77a8a8d)
  • Run receive hooks on local and file:// pushes (3b8f405)
  • Share the receive-hook runner in receive-pack (8c0e9b5)
  • Gate bulk add peak memory against git add and record the numbers (083ba62)
  • List root commit files from the index instead of a tree diff (a4ba01d)
  • Stage untracked files chunk by chunk to bound add memory (cd5314e)
  • Document rebase --exec commands that amend or add commits (540515d)
  • Thread progress and cancellation through rebase --exec recovery (ae38e04)
  • Harden rebase --exec recovery after amend conflicts (34ec874)
  • Move HEAD's branch when an exec amends a commit the plan kept (8d5a6cd)
  • Test amending rebase --exec commands through the grit CLI (b0c3d30)
  • Adopt commits that rebase --exec commands amend or extend (024a356)
  • Merge branch 'factory/eol-status-size-shortcut' (3cc2584)
  • Let worktree remove succeed on a stale size with unchanged content (289d1f2)
  • Read a size-changed converted file once per status (d11a911)
  • Hash size-changed files in status when clean conversion is not the identity (69167f1)
  • Run the clone interrupt test on Windows (cbf627d)
  • Release pack maps before removing a failed clone (fd4ea97)
  • Merge branch 'factory/push-create-cas' (3a9871f)
  • Report push creates lost to a racing writer as already_exists (efe98b4)
  • Compare-and-swap local push creates against an absent ref (ab6d7f4)
  • Merge branch 'factory/ignore-dir-negation' (7c3b609)
  • ignore: let a later !dir/ re-include a directory a plain pattern matched (999ecd8)
  • Hash patch-id text hunks from the default diff engine (0732913)
  • Merge branch 'factory/stage-type-flip' (48a95bd)
  • Document staging of file/directory type flips and the in-use hint (bc30e45)
  • Remove deleted tracked paths in one index compaction pass (87f6e5e)
  • Stage tracked paths that flipped between a file and a directory (8309b63)
  • Suggest closing programs only when a worktree file is actually in use (4a16772)
  • Merge branch 'factory/checkout-cancel-rollback' (2074469)
  • Test that an interrupted grit switch leaves the repository unchanged (788df82)
  • Let Ctrl+C cancel grit switch and clone on Windows (5262455)
  • Merge branch 'factory/drop-dead-diffstat-writer' (b69fb83)
  • Remove the unused Git-format diffstat writer from grit-lib (134553a)
  • bench: record log and walk rows before and after the walk read buffer (4ad5567)
  • log: build only JSON rows for --json output (602e657)
  • Read walked commits into one reusable buffer (f0525e2)
  • Use the shared git, rev_parse and free_port helpers in tests (536b8df)
  • Add shared rev_parse and free_port test helpers (1f069dd)
  • Merge branch 'factory/stash-selection-report' (3071869)
  • Report partial stash hunks from the stash push itself (50aa4b4)
  • Break cross-pack delta cycles when reusing stored deltas (7f52cc6)
  • Refuse to write a full pack with a delta ahead of its base (afcdc08)
  • Resolve case-folded worktree paths only when the indexed path is missing (338da46)
  • Keep detached auto-gc off the caller's output pipes on Windows (74d8bf8)
  • Explain conflicted restore and commit refusals (2e65faf)
  • Refuse staging conflict markers after the conflict stages were dropped (68fa943)
  • Refuse restoring only the index of an unmerged path (1ae305c)
  • Ignore SIGPIPE in every command that reaches a remote (8dbc58e)
  • Store HTTPS credentials for any host and report rejected ones (490a5e1)
  • Report non-grit hosts as NotGritServer when signing in (126b20a)
  • Merge branch 'factory/patch-id-ranges-cherry-mark' (176ebaa)
  • Document that history undo puts consumed edits back (96719ff)
  • Report restored paths from grit history undo (4416574)
  • Restore consumed edits when undoing history fixup and absorb (03ff763)
  • revs: reject non-symmetric ranges for --cherry-mark and --left-right with -n 0 (c19afe0)
  • rev_list: compute range patch-ids on worker threads (e078e00)
  • cli: patch-id ranges and revs --cherry-mark for reviewing rewritten branches (9dc98d3)
  • rev_list: pair cherry-mark commits by patch-id (3af646e)
  • patch_ids: expand revision ranges in Repository::patch_ids_for_revs (f53367a)
  • Prune linked worktrees whose .git file is gone (f99b849)
  • Allow adding worktrees to bare repositories (976c9e9)
  • Add WorktreeBranch::Orphan for git worktree add --orphan (0898d21)

What's Changed

  • Add worktrees with --orphan, and to bare repositories by @schacon in #2149
  • Prune linked worktrees whose .git file is gone by @schacon in #2150
  • Skip stat and readlink for regular loose ref files by @schacon in #2194

Full Changelog: v0.5.23...v0.5.24