Skip to content

v0.5.21

Choose a tag to compare

@github-actions github-actions released this 26 Oct 00:22
· 1751 commits to main since this release
v0.5.21

What's changed

  • grit-bench: add gc-loose scenarios (5ec1fbe)
  • pack-objects: stream the delta search instead of loading every object (b43da69)
  • Merge branch 'factory/ingest-pack-into-store' (ca4bdb1)
  • docs: receiving packs into a custom object store (f80b2e5)
  • unpack_objects: apply received packs to any object store (4438f0f)
  • Honour shallow boundaries in repack, gc, prune, bitmaps and fsck (f7224da)
  • Merge branch 'factory/commit-reject-unknown-flags' (4b11c2a)
  • commit: reject unknown flags instead of using them as the message (deaf84b)
  • Fixes #1915: report worktree file I/O failures with path and hint (d628740)
  • Merge branch 'factory/pull-check-speed' (ce3fb94)
  • Merge branch 'factory/composite-corrupt-error' (287deb3)
  • docs: describe lazy v2 fetch negotiation and its git.git benchmark (60825cd)
  • fetch: negotiate protocol v2 in lazy rounds instead of walking all history first (33f85c7)
  • odb: report a damaged copy from CompositeStore instead of calling the object missing (8891e76)
  • hooks: give Windows hooks plain repository paths and Git's tool PATH (f7c2260)
  • Merge branch 'factory/commit-autostage-single-scan' (279719f)
  • bench: record daily commit rows after the single-scan auto-stage commit (d9639b9)
  • commit: scan the work tree once when auto-staging (7eed756)
  • Merge branch 'factory/dead-diff-handle-paths' (96ffd3d)
  • bench: record the 2026-10-24 regression rows before and after (591df8b)
  • fetch: walk local haves only as far as the v2 rounds send (64cc3a7)
  • log: read each listed commit once on the paged log walk (150e243)
  • add: read each restaged file once (91da693)
  • add: keep tracked restage parallel on large indexes (b490700)
  • bench: add a both-sides content-merge daily scenario and document the merge speedup (746d6fe)
  • merge: load attribute rules once per tree merge, not per merged path (f8eb35d)
  • diff: delete Diff handle methods nothing calls (fc6f843)
  • merge: drop the never-emitted set_upstream result (943979e)
  • Merge branch 'factory/rename-rename-conflict' (680af8a)
  • merge: stop re-merging a base path the current branch renamed away (0428b46)
  • history: report conflicted paths in sorted order (d073c45)
  • merge: report rename/rename (1to2) as a conflict instead of keeping both copies (4403bc0)
  • Merge branch 'factory/stash-pop-conflict-hints' (96e4867)
  • restore: report unmerged paths as a guided unmerged_paths error (f24fa9e)
  • stash: tell users how to finish a conflicted pop or apply (af0a2a8)
  • restore: refuse unmerged paths instead of calling them unknown (dae9a11)
  • Merge branch 'factory/shallow-commit-graph' (0bd9f41)
  • gc: skip the commit-graph in shallow, grafted and replaced repositories (60b7806)
  • commit-graph: refuse to encode a parent that is not in the graph (43e1c99)
  • Merge branch 'factory/stream-big-blobs' (22a99e3)
  • grit-bench: add-big-file scenario with time and peak RSS (a3e9b71)
  • grit-lib: stream files above core.bigFileThreshold into a pack when staging (62dd2bf)
  • Merge branch 'factory/gc-auto' (4db386a)
  • grit: run automatic maintenance after object-writing commands (fa73db2)
  • maintenance: add gc_auto with Git's gc.auto heuristics and gc.pid lock (5e530ab)
  • tests: pass the cancel argument status now takes (0fd66e8)
  • Merge branch 'factory/revwalk-walk-symmetric' (0ce54f8)
  • Merge branch 'factory/bitmap-writer-speed' (4e679b4)
  • docs: describe the bitmap writer's walk and its cargo benchmark (29494fc)
  • pack_bitmap: write bitmaps without reading blobs or re-walking history (0dc5e9c)
  • test: use each reset fixture's target commit (edec764)
  • reset: format rebased import ordering (f2cde73)
  • docs: benchmarks for reset reusing the index it replaces (0a61eb6)
  • index_from_tree: hand the walked rows to the index instead of re-pushing them (d44344c)
  • reset --hard: flatten the target tree from the cache-tree and keep it (b78fed2)
  • reset: rebuild the mixed-reset index from cached stat data and cache-tree (2307abc)
  • Merge branch 'factory/head-commit-dedupe' (81f8a1d)
  • Merge branch 'factory/midx-default-v1' (0d34158)
  • gc midx: document midx.version and add a git round-trip regression test (be4b2ef)
  • midx: write v1 by default and honour midx.version (b433cf4)
  • fetch, pull: default to the current branch's remote instead of origin (3462ebd)
  • state: add Repository::head_commit and use it for every HEAD-commit lookup (5d82041)
  • history: convert library errors with one From impl instead of per-module adapters (e928c98)
  • public-api: refresh log API snapshot ordering (cfc1808)
  • benchmarks: record log pages on git.git against current main (118960f)
  • grit-bench: time runs at child exit instead of at the next RSS poll (5fa57a5)
  • log: hand the commits the walk already read to the output rows (fe01cff)
  • packed-refs: decode record ids while validating them (57501c7)
  • rev-parse: peel from object headers and read each dwim candidate once (242f98b)
  • pack index: skip the forward scan when a monotonic probe jumps past it (7c0aaac)
  • Merge branch 'factory/loose-write-unique-tmp' (c8c92a7)
  • docs: note that concurrent object writes are idempotent (b8c80b9)
  • odb: publish loose objects through unique temp files (438234f)
  • Merge branch 'factory/repack-delta-reuse' (50fbc09)
  • repack: guard time, memory and pack size against git (502e769)
  • repack: balance the delta search and keep other packers' walk lean (379a0b7)
  • repack, gc repack: add --force to recompute every delta (a400e42)
  • repack: copy stored pack entries and search deltas in a bounded window (f964cb4)
  • Merge branch 'factory/diff-typechange-status' (b14385a)
  • diff: report file <-> symlink changes as type_changed in every diff mode (903d8b5)
  • Merge branch 'factory/first-push-error-hints' (2a0855e)
  • grit: say what happened and the next command for first-push, pull and merge errors (10df37c)
  • grit-lib: typed errors for missing remotes, credentials and dirty worktrees (7a7e6f3)
  • Merge branch 'factory/add-untracked-linear' (d1ea53f)
  • add: stage untracked directories in one walk instead of one walk per directory (f0e6c89)
  • grit-bench: add-many-dirs suite for initial add . over many directories (1a64baa)
  • grit switch: warn about commits left behind on a detached HEAD (aa22e1e)
  • rev_parse: tell a ref names a commit without inflating it (8866ead)
  • orphans: stop the left-behind walk early when generations allow it (933ae51)
  • switch: report commits left behind when leaving a detached HEAD (469185f)
  • porcelain: share the orphaned-commit walk between reset and switch (f80126c)
  • Merge branch 'factory/replay-outcome-subjects' (fce0b9c)
  • Merge branch 'factory/commit-autostage-ad' (f94e695)
  • commit: persist auto-staged index when nothing is left to commit (d02c2c6)
  • Merge branch 'factory/fsck-streaming-memory' (cf333d0)
  • pick, revert: share one --empty value enum (a3b829c)
  • replay_sequence: report subjects and change ids so pick/revert stop re-reading commits (5d47ca2)
  • bench: refresh fsck-medium baseline after streaming pack fsck (d309f6a)
  • grit-bench: fail the fsck suite on a peak-memory regression (257a021)
  • fsck: stream pack verification instead of holding every object (229134c)
  • pack: share the depth-first delta walk between index-pack and fsck (38ad6e9)
  • Merge branch 'factory/post-op-hooks' (da3bd7c)
  • docs: document post-checkout, post-merge and post-rewrite on switch, merge, commit, rebase and history (6420b08)
  • switch: add hooks_run to the JSON schema and output snapshots (ebe9536)
  • test: post-operation hooks after switch, merge, amend and rebase (36f1573)
  • hooks: run post-checkout, post-merge and post-rewrite after switch, merge, amend and rebase (2817d25)
  • Merge branch 'factory/split-index-skiphash' (be736c0)
  • split index: give the shared index a real checksum under index.skipHash (84f680a)
  • split index: look up shared-index positions by binary search (e21fcec)
  • Merge branch 'factory/rm-cached-safety' (66b5719)
  • grit-lib: regenerate public-api.txt snapshot (70848db)
  • rm: let --cached untrack files edited since commit (5a8f22b)
  • Merge branch 'factory/thin-pack-idx-trailer' (515b23f)
  • tests: thin pack completion must keep pack, idx and name consistent (20f4eae)
  • Merge branch 'factory/upload-pack-deepen-not-wanted-refs' (4b928ba)
  • upload-pack: send wanted-refs for want-ref and advertise only v2 features (4c45320)
  • upload-pack: resolve deepen-not ref names and exclude them correctly (7fa0bad)
  • docs: pack receive memory, thin-pack completion and benchmarks (5d51368)
  • bench: record peak RSS on network scenarios and add clone/full@git-git (c1a1ef7)
  • test: gate pack ingest peak RSS against git index-pack (0b2e41c)
  • index-pack: keep received packs out of RSS and complete thin packs in place (42198cc)
  • pack index: sort entries in place and stream the .idx to disk (c11cb19)
  • Merge branch 'factory/remote-unreadable-exit' (82e0002)
  • grit: exit 128 with kind remote_unreadable when the remote cannot be read (cd88845)
  • grit-lib: report unreachable remotes as a typed Error::RemoteUnreadable (f1049a8)
  • stash: never sign stash commits (eb67993)
  • stash: reuse stat data and cache-trees in push and pop (d153a56)
  • diff: reuse config and attributes across worktree-vs-index content checks (847c5dd)
  • Merge branch 'factory/porcelain-api-cleanup' (b83c306)
  • ident: typed Signature identities and Repository::identity (8b6150c)
  • history: move squash-message helpers out of porcelain::rebase (5c4624e)
  • stash: make RepositoryStash the one stash API (6d84a3d)
  • porcelain: report detached HEAD as branch None in commit and switch outcomes (7fc55e2)
  • Merge branch 'factory/merge-any-revision' (ecf4ab4)
  • grit merge: accept tags, commit ids and revision expressions (7fa7cb5)
  • grit-lib: resolve merge sources from any revision (e120cf1)
  • Merge branch 'factory/ls-refs-prefix-first' (06a3ecf)
  • bench: upload-pack ls-refs and v0 advertisement on the 100k-ref fixtures (cae8d36)
  • serve: list only the requested ref prefixes and peel on demand (5963bcb)
  • refs: skip loose refs outside a partial-name listing prefix (34d070d)
  • docs: filtered upload-pack serving and blobless benchmarks (d52d28e)
  • grit-bench: time blobless partial clone serving (6b46c7c)
  • upload-pack: apply partial clone filters in the pack enumeration walk (6cae56b)
  • rev-list: keep every annotated tag of a commit in object walks (91e7fa6)
  • Merge branch 'factory/foreign-rebase-guard' (0ae050c)
  • switch, status: refuse switching and report the branch during paused operations (ae10a06)
  • rebase: recognise rebases git started and stop in a state git can finish (d43ccc3)
  • Keep sparse-checkout paths out of the work tree on checkout (157a05d)
  • tests: pass a Cancel to status() in the core.symlinks=false tests (3b629c9)
  • diff: read a plain-file symlink entry by content (2b10df1)
  • docs: describe core.symlinks=false staging and the WorktreeModePolicy API (98ada1f)
  • index: keep symlink entries as 120000 when core.symlinks=false (df27a62)
  • site: reject grit_lib paths in the docs that are not public API (d1ffc33)
  • docs: point library guides at public grit_lib paths (d21d69a)
  • grit add: test parallel processes and document index.lock behavior (0208224)
  • index: read the index under index.lock in add, rm and tracked staging (8fdbdec)
  • Merge branch 'factory/clone-checkout-cpu' (b7e20e4)
  • grit-bench: list clone/checkout@synth-100k in the daily matrix doc (b064d7f)
  • grit-bench: track wide-tree clone checkout in the daily matrix (5aff444)
  • checkout: build the cache tree once for a populated-tree checkout (8de3516)
  • Merge branch 'factory/fetch-tag-follow-fast' (489f267)
  • Merge branch 'factory/hook-output-capture' (5d61d87)
  • fetch: decide tag following from pack membership, not an object walk (a2e214e)
  • hooks: hand hook output to the caller instead of printing it (e26bb26)
  • rev-list, crlf: drop GIT_TRACE lines written straight to process stderr (245e065)
  • bench: record show HEAD rows before and after (bca7736)
  • repo caches: skip canonicalizing when the local config path already matches (afcae9b)
  • odb: recognize the empty tree by constant instead of hashing on every read (22d178b)
  • show: skip ref decorations unless the output renders them (da9beed)
  • diff: run single-entry content diffs without probing the thread policy (8beda38)
  • Merge branch 'factory/pathspec-attr-repo' (d96ea56)
  • pathspec: honor attr macros and core.ignorecase, reject malformed attr magic (4b7e885)
  • pathspec: load attributes once per filter pass with PathspecMatcher (7913ac3)
  • docs: point the pathspec guide at PathspecMatcher (e5193f3)
  • docs: attribute pathspecs in grit diff and the library matcher (fba86b8)
  • pathspec: evaluate attr magic in Repository::paths_match_pathspecs (7762dca)
  • Merge branch 'factory/remote-remove-batch-delete' (ffb6822)
  • refs: preserve batch duplicate validation after rebase (b430b84)
  • refs: delete large batches in linear time on the files backend (bdff90f)
  • bench: record branch and tag daily rows on many-refs around the packed-refs search (f37fe03)
  • refs: trust the packed-refs sorted trait and search the file in place (75c4b56)
  • fsck: test the packedRefUnsorted check end to end (54659c2)
  • refs: index packed-refs without decoding the whole file (b7e2bf1)
  • Merge branch 'factory/revs-range-listing' (2657344)
  • rev-list: honour use_commit_graph in hide-bounded range walks (4315303)
  • merge-base: skip unreadable history behind excluded tips in range walks (6761e2b)
  • rev-list: bound unlimited A..B listings by the excluded tips (48e3335)
  • revwalk: queue parents on first discovery in range walks, like git rev-list (b67ae9b)
  • Merge branch 'factory/issue-1704-api-219d' (2f4b7d0)
  • fix: cleanup failed clone after RemoteRefNotFound (048229f)
  • bundle: stream the pack with serve settings instead of push settings (9ac763c)
  • tests: complete thin packs in an isolated receiver repository (1db4632)
  • bench: add bundle/create-all@git-git daily scenario (955f6e0)
  • pack-objects: reuse on-disk deltas against bases the peer holds (8147101)
  • Merge branch 'factory/commit-msg-race' (cb27c72)
  • Stress concurrent path commits and document the guarantees (6211543)
  • Build each commit on the HEAD read before its index (5f464db)
  • Keep the requested commit message unless commit-msg ran (163e896)
  • Lock the index before a partial or patch commit writes anything (54e0cfc)
  • Merge branch 'factory/credential-helper-url' (37c2ba0)
  • fix: resolve add.v2.json merge conflict markers (e9b1ebb)
  • docs: describe what credential helpers receive over HTTPS (40a739d)
  • Send credential helpers only protocol, host and repository path (cf47eff)
  • Merge branch 'factory/filter-shell-resolve' (1c01643)
  • command_runner: mark the inherited PATH read as a spawn-boundary exemption (1517538)
  • filters: never store unfiltered content when a required filter fails (8215768)
  • command_runner: resolve the shell for every sh -c spawn like Git (0039f61)
  • fix: NeverCancel at remaining test and pull call sites (79ab795)
  • fix: clippy on cancel threading (too_many_arguments, must_use) (d5bdd14)
  • Fix streaming repack idx rows, pack+loose deltify, and disk staging (10f19cd)
  • fix: rebase follow-ups after cancel epic merge with main (fa97a96)
  • fix: green grit-cli schema checks; index-pack cancel polls and tests (43a215a)
  • grit-lib: cancel through index-pack; fix call sites and docs (ac034b1)
  • Clippy: merge identical pack_opts branches in maintenance repack (90eb801)
  • Fix streaming repack reuse: fallback when delta base excluded, O(1) offset lookup (45d61de)
  • Stream verbatim repack when one pack and zero loose objects (46304c2)
  • Address review: explicit repack always runs; rewrite when packs exist (0f694ec)
  • Fixes #1684: skip or reuse packs on gc/repack when Git would (9735b51)
  • grit-lib: finish cancel threading for status, bundle, fetch_all (697bdec)
  • tests: fix NeverCancel imports after fetch_remote wiring (a6247a6)
  • tests: import NeverCancel for fetch_remote call sites (165f6ad)
  • grit-lib: complete cancel on push/fetch/status; refresh public-api (4ae8685)
  • grit-lib: cancellation, typed switch/clone errors, export hunk bundle (e2a5b07)
  • Merge branch 'factory/refstore-backend-authoring' (3c2c979)
  • grit-lib: update the public API snapshot (8f4cdfa)
  • docs: writing a ref backend, and opening with no git directory (90ae570)
  • repo: open with injected backends without a git directory layout (6ebdae4)
  • test-support: public RefStore conformance suite (fccbc9e)
  • refs: public backend helpers for custom RefStore implementations (49bc643)
  • Merge branch 'factory/odb-contains-result' (17c00f9)
  • Propagate object store failures from existence checks in decision paths (45bb088)
  • odb: add fallible Odb::contains next to the lenient exists probes (3ce84b1)
  • Merge branch 'factory/global-repo-options' (8e9e4e0)
  • skill: describe -C and -c without spelling them as grit commands (05cab44)
  • cli: global -C, -c, --git-dir, --work-tree and -q on clone and push (0a9f62c)
  • environment: typed command-line config overrides and git-dir/work-tree builders (06069d6)
  • Merge branch 'factory/upload-pack-streaming' (51496d8)
  • docs: describe pack.depth 0, base ordering and batched pack writes (b859569)
  • upload-pack: test full-clone serving against system git (d1450e5)
  • pack-objects: encode pack batches on long-lived workers (8c8a1d7)
  • pack-objects: report verbatim reuse from the streaming pack writer (7a4761c)
  • pack-objects: write delta bases before their targets (3a6ba73)
  • upload-pack: keep sending on-disk deltas when pack.depth is 0 (f90f142)
  • pack-reuse: resolve one delta base instead of remapping every offset (3d58c3b)
  • Merge branch 'factory/fast-delete-checkout' (9504e94)
  • docs: delete-heavy switch and hard reset benchmarks (cfdcf8b)
  • bench: daily rows for delete-heavy switch and hard reset (ff77445)
  • reset --hard: one stat pass, no content reads for deletions (59aebc9)
  • switch: hash racily clean paths in parallel from the guard's scan stats (8fc6bf8)
  • revwalk: list A...B as a symmetric difference in RevWalk::walk (1dc4795)

Full Changelog: v0.5.20...v0.5.21