{"thread":{"id":"62647","subject":"[ANNOUNCE] Git v2.48.0-rc0","startedAt":"2024-12-16T18:14:53Z","lastAt":"2024-12-21T15:11:48Z","messageCount":16,"participants":["Junio C Hamano","rsbecker@nexbridge.com","Patrick Steinhardt"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"509184","messageId":"xmqqfrmn4hr9.fsf@gitster.g","threadId":"62647","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.48.0-rc0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-12-16T18:14:50Z","receivedAt":"2024-12-16T18:14:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"An early preview release Git v2.48.0-rc0 is now available for\ntesting at the usual places.  It is comprised of 446 non-merge\ncommits since v2.47.0, contributed by 66 people, 26 of which are\nnew faces [*].\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/testing/\n\nThe following public repositories all have a copy of the\n'v2.48.0-rc0' tag and the 'master' branch that the tag points at:\n\n  url = https://git.kernel.org/pub/scm/git/git\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://github.com/gitster/git\n\nNew contributors whose contributions weren't in v2.47.0 are as follows.\nWelcome to the Git development community!\n\n  Aarni Koskela, Abraham Samuel Adekunle, Bence Ferdinandy,\n  Caleb White, Chizoba ODINAKA, Daniel Black, David Gstir, Ed\n  Reel, Eric Mills, fox, Jaroslav Lobačevski, Josh Heinrichs,\n  Josh Poimboeuf, Kai Koponen, Kev Kloss, Liu Zhongbo, Miguel\n  Rincon Barahona, Monika Kairaitytė, Nicolas Guichard, Russell\n  Stuart, Sam James, Seyi Kuforiji, Shubham Kanodia, Simon Marchi,\n  Tobias Boesch, and Usman Akinyemi.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Alejandro R. Sedeño, Andrew Kreimer, brian m. carlson, Dario\n  Gjorgjevski, Derrick Stolee, Elijah Newren, Eli Schwartz, Eric\n  Sesterhenn, Eric Sunshine, Jean-Noël Avila, Jeff King, Johannes\n  Schindelin, Johannes Sixt, John Cai, Jonathan Tan, Josh Soref,\n  Josh Steadmon, Junio C Hamano, Justin Tobler, Karthik Nayak,\n  Koji Nakamaru, Kousik Sanagavarapu, Kristoffer Haugsbakk, Linus\n  Arver, Oswald Buddenhagen, Patrick Steinhardt, Philippe Blain,\n  Phillip Wood, Piotr Szlazak, Ramsay Jones, Rasmus Villemoes,\n  René Scharfe, Rubén Justo, shejialuo, Sören Krecker, Sven\n  Strickroth, Taylor Blau, Toon Claes, Wolfgang Müller, and\n  Xing Xin.\n\n[*] We are counting not just the authorship contribution but issue\n    reporting, mentoring, helping and reviewing that are recorded in\n    the commit trailers.\n\n----------------------------------------------------------------\n\nGit v2.48 Release Notes (draft)\n===============================\n\nUI, Workflows & Features\n------------------------\n\n * A new configuration variable remote.<name>.serverOption makes the\n   transport layer act as if the --serverOption=<value> option is\n   given from the command line.\n\n * \"git rebase --rebase-merges\" now uses branch names as labels when\n   able.\n\n * Describe the policy to introduce breaking changes.\n\n * Teach 'git notes add' and 'git notes append' a new '-e' flag,\n   instructing them to open the note in $GIT_EDITOR before saving.\n\n * Documentation for \"git bundle\" saw improvements to more prominently\n   call out the use of '--all' when creating bundles.\n\n * Drop support for older libcURL and Perl.\n\n * End-user experience of \"git mergetool\" when the command errors out\n   has been improved.\n\n * \"git bundle --unbundle\" and \"git clone\" running on a bundle file\n   both learned to trigger fsck over the new objects with configurable\n   fck check levels.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * Document \"amlog\" notes.\n\n * The way AsciiDoc is used for SYNOPSIS part of the manual pages has\n   been revamped.  The sources, at least for the simple cases, got\n   vastly pleasant to work with.\n\n * The reftable library is now prepared to expect that the memory\n   allocation function given to it may fail to allocate and to deal\n   with such an error.\n\n * An extra worktree attached to a repository points at each other to\n   allow finding the repository from the worktree and vice versa\n   possible.  Turn this linkage to relative paths.\n\n * Enable Windows-based CI in GitLab.\n\n * Commands that can also work outside Git have learned to take the\n   repository instance \"repo\" when we know we are in a repository, and\n   NULL when we are not, in a parameter.  The uses of the_repository\n   variable in a few of them have been removed using the new calling\n   convention.\n\n * The reftable sub-system grew a new reftable-specific strbuf\n   replacement to reduce its dependency on Git-specific data\n   structures.\n\n * The ref-filter machinery learns to recognize and avoid cases where\n   sorting would be redundant.\n\n * Various platform compatibility fixes split out of the larger effort\n   to use Meson as the primary build tool.\n\n * Treat ECONNABORTED the same as ECONNRESET in 'git credential-cache'\n   to work around a possible Cygwin regression. This resolves a race\n   condition caused by changes in Cygwin's handling of socket\n   closures, allowing the client to exit cleanly when encountering\n   ECONNABORTED.\n\n * Demonstrate an assertion failure in 'git mv'.\n\n * Documentation update to clarify that 'uploadpack.allowAnySHA1InWant'\n   implies both 'allowTipSHA1InWant' and 'allowReachableSHA1InWant'.\n\n * Replace various calls to atoi() with strtol_i() and strtoul_ui(),\n   and add improved error handling.\n\n * Documentation updates to 'git-update-ref(1)'.\n\n * Update the project's CodingGuidelines to discourage naming functions\n   with a \"_1()\" suffix.\n\n * Updates the '.clang-format' to match project conventions.\n\n * Centralize documentation for repository extensions into a single place.\n\n * Buildfix and upgrade of Clar to a newer version.\n\n * Documentation mark-up updates.\n\n * Renaming a handful of variables and structure fields.\n\n * Fix for clar unit tests to support CMake build.\n\n * C23 compatibility updates.\n\n * GCC 15 compatibility updates.\n\n * We now ensure \"index-pack\" is used with the \"--promisor\" option\n   only during a \"git fetch\".\n\n * The migration procedure between two ref backends has been optimized.\n\n * \"git fsck\" learned to issue warnings on \"curiously formatted\" ref\n   contents that have always been taken valid but something Git\n   wouldn't have written itself (e.g., missing terminating end-of-line\n   after the full object name).\n\n * Work around Coverity warning that would not trigger in practice.\n\n * Built-in Git subcommands are supplied the repository object to work\n   with; they learned to do the same when they invoke sub-subcommands.\n\n * Drop support for ancient environments in various CI jobs.\n\n * Isolates the reftable subsystem from the rest of Git's codebase by\n   using fewer pieces of Git's infrastructure.\n\n * Optimize reading random references out of the reftable backend by\n   allowing reuse of iterator objects.\n\n * Backport oss-fuzz tests for us to our codebase.\n\n * Introduce a new repository extension to prevent older Git versions\n   from mis-interpreting worktrees created with relative paths.\n\n * Yet another \"pass the repository through the callchain\" topic.\n\n * \"git describe\" learned to stop digging the history needlessly\n   deeper.\n\n * Build procedure update plus introduction of Meson based builds.\n\n\nFixes since v2.47\n-----------------\n\n * Doc update to clarify how periodical maintenance are scheduled,\n   spread across time to avoid thundering hurds.\n\n * Use after free and double freeing at the end in \"git log -L... -p\"\n   had been identified and fixed.\n\n * On macOS, fsmonitor can fall into a race condition that results in\n   a client waiting forever to be notified for an event that have\n   already happened.  This problem has been corrected.\n\n * \"git maintenance start\" crashed due to an uninitialized variable\n   reference, which has been corrected.\n\n * Fail gracefully instead of crashing when attempting to write the\n   contents of a corrupt in-core index as a tree object.\n\n * A \"git fetch\" from the superproject going down to a submodule used\n   a wrong remote when the default remote names are set differently\n   between them.\n\n * Fixes compile time warnings with 64-bit MSVC.\n\n * Teaches 'shortlog' to explicitly use SHA-1 when operating outside\n   of a repository.\n\n * Fix 'git grep' regression on macOS by disabling lookahead when\n   encountering invalid UTF-8 byte sequences.\n\n * The dumb-http code regressed when the result of re-indexing a pack\n   yielded an *.idx file that differs in content from the *.idx file\n   it downloaded from the remote. This has been corrected by no longer\n   relying on: the *.idx file we got from the remote.\n\n * When called with '--left-right' and '--use-bitmap-index', 'rev-list'\n   will produce output without any left/right markers, which has been\n   corrected.\n\n * More leakfixes.\n\n * Test modernization.\n\n * The \"--shallow-exclude=<ref>\" option to various history transfer\n   commands takes a ref, not an arbitrary revision.\n\n * A regression where commit objects missing from a commit-graph can\n   cause an infinite loop when doing a fetch in a partial clone has\n   been fixed.\n\n * The MinGW compatibility layer has been taught to support POSIX\n   semantics for atomic renames when other process(es) have a file\n   opened at the destination path.\n\n * \"git gc\" discards any objects that are outside promisor packs that\n   are referred to by an object in a promisor pack, and we do not\n   refetch them from the promisor at runtime, resulting an unusable\n   repository.  Work it around by including these objects in the\n   referring promisor pack at the receiving end of the fetch.\n\n * Avoid build/test breakage on a system without working malloc debug\n   support dynamic library.\n   (merge 72ad6dc368 jk/test-malloc-debug-check later to maint).\n\n * Double-free fix.\n   (merge fe17a25905 jk/fetch-prefetch-double-free-fix later to maint).\n\n * Use of some uninitialized variables in \"git difftool\" has been\n   corrected.\n\n * Object reuse code based on multi-pack-index sent an unwanted copy\n   of object.\n   (merge e199290592 tb/multi-pack-reuse-dupfix later to maint).\n\n * \"git fast-import\" can be tricked into a replace ref that maps an\n   object to itself, which is a useless thing to do.\n   (merge 5e904f1a4a en/fast-import-avoid-self-replace later to maint).\n\n * The ref-transaction hook triggered for reflog updates, which has\n   been corrected.\n   (merge b886db48c6 kn/ref-transaction-hook-with-reflog later to maint).\n\n * Give a bit of advice/hint message when \"git maintenance\" stops finding a\n   lock file left by another instance that still is potentially running.\n   (merge ba874d1dac ps/gc-stale-lock-warning later to maint).\n\n * Use the right helper program to measure file size in performance tests.\n   (merge 3f97f1bce6 tb/use-test-file-size-more later to maint).\n\n * A double-free that may not trigger in practice by luck has been\n   corrected in the reference resolution code.\n   (merge b6318cf23a sj/refs-symref-referent-fix later to maint).\n\n * The sequencer failed to honor core.commentString in some places.\n\n * Describe a case where an option value needs to be spelled as a\n   separate argument, i.e. \"--opt val\", not \"--opt=val\".\n   (merge 1bc1e94091 jc/doc-opt-tilde-expand later to maint).\n\n * Loosen overly strict ownership check introduced in the recent past,\n   to keep the promise \"cloning a suspicious repository is a safe\n   first step to inspect it\".\n   (merge 0ffb5a6bf1 bc/allow-upload-pack-from-other-people later to maint).\n\n * \"git fast-import\" learned to reject paths with \"..\"  and \".\" as\n   their components to avoid creating invalid tree objects.\n   (merge 8cb4c6e62f en/fast-import-verify-path later to maint).\n\n * The --ancestry-path option is designed to be given a commit that is\n   on the path, which was not documented, which has been corrected.\n   (merge bc1a980759 kk/doc-ancestry-path later to maint).\n\n\n * \"git tag\" has been taught to refuse to create refs/tags/HEAD\n   as such a tag will be confusing in the context of UI provided by\n   the Git Porcelain commands.\n   (merge bbd445d5ef jc/forbid-head-as-tagname later to maint).\n\n * The advice messages now tell the newer 'git config set' command to\n   set the advice.token configuration variable to squelch a message.\n   (merge 6c397d0104 bf/explicit-config-set-in-advice-messages later to maint).\n\n * The syntax \":/<text>\" to name the latest commit with the matching\n   text was broken with a recent change, which has been corrected.\n   (merge 0ff919e87a ps/commit-with-message-syntax-fix later to maint).\n\n * Fix performance regression of a recent \"fatten promisor pack with\n   local objects\" protection against an unwanted gc.\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 77af53f56f aa/t7300-modernize later to maint).\n   (merge dcd590a39d bf/t-readme-mention-reftable later to maint).\n   (merge 68e3c69efa kh/trailer-in-glossary later to maint).\n   (merge 91f88f76e6 tb/boundary-traversal-fix later to maint).\n   (merge 168ebb7159 jc/doc-error-message-guidelines later to maint).\n   (merge 18693d7d65 kh/doc-bundle-typofix later to maint).\n   (merge e2f5d3b491 kh/doc-update-ref-grammofix later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.47.0 are as follows:\n\nAbraham Samuel Adekunle (2):\n      t7300-clean.sh: use test_path_* helper functions for error logging\n      notes: teach the -e option to edit messages in editor\n\nAlejandro R. Sedeño (1):\n      Makefile: adjust sed command for generating \"clar-decls.h\"\n\nAndrew Kreimer (10):\n      compat: fix typos\n      contrib: fix typos\n      t/unit-tests: fix typos\n      t/perf: fix typos\n      t/helper: fix a typo\n      t: fix typos\n      t: fix typos\n      t1016: clean up style\n      t: fix typos\n      t1016: clean up style\n\nBence Ferdinandy (2):\n      t/README: add missing value for GIT_TEST_DEFAULT_REF_FORMAT\n      advice: suggest using subcommand \"git config set\"\n\nCaleb White (12):\n      worktree: refactor infer_backlink() to use *strbuf\n      worktree: link worktrees with relative paths\n      worktree: add test for path handling in linked worktrees\n      doc: consolidate extensions in git-config documentation\n      setup: correctly reinitialize repository version\n      worktree: add `relativeWorktrees` extension\n      worktree: refactor infer_backlink return\n      worktree: add `write_worktree_linking_files()` function\n      worktree: add relative cli/config options to `add` command\n      worktree: add relative cli/config options to `move` command\n      worktree: add relative cli/config options to `repair` command\n      worktree: refactor `repair_worktree_after_gitdir_move()`\n\nChizoba ODINAKA (1):\n      t6050: avoid pipes with upstream Git commands\n\nDaniel Black (1):\n      submodule: correct remote name with fetch\n\nDerrick Stolee (1):\n      line-log: protect inner strbuf from free\n\nElijah Newren (5):\n      upload-pack: fix ambiguous error message\n      doc: correct misleading descriptions for --shallow-exclude\n      fast-import: avoid making replace refs point to themselves\n      fast-import: disallow \".\" and \"..\" path components\n      fast-import: disallow more path components\n\nEric Sesterhenn (3):\n      fuzz: port fuzz-credential-from-url-gently from OSS-Fuzz\n      fuzz: port fuzz-parse-attr-line from OSS-Fuzz\n      fuzz: port fuzz-url-decode-mem from OSS-Fuzz\n\nEric Sunshine (1):\n      worktree: repair copied repository and linked worktrees\n\nJean-Noël Avila (9):\n      doc: introduce a synopsis typesetting\n      doc: update the guidelines to reflect the current formatting rules\n      doc: apply synopsis simplification on git-clone and git-init\n      doc: git-add.txt: convert to new style convention\n      doc: git-diff: apply new documentation guidelines\n      doc: git-diff: apply format changes to diff-options\n      doc: git-diff: apply format changes to diff-format\n      doc: git-diff: apply format changes to diff-generate-patch\n      doc: git-diff: apply format changes to config part\n\nJeff King (36):\n      line-log: use diff_line_prefix() instead of custom helper\n      diff: drop line_prefix_length field\n      diff: return const char from output_prefix callback\n      diff: return line_prefix directly when possible\n      diff: store graph prefix buf in git_graph struct\n      simple-ipc: split async server initialization and running\n      fsmonitor: initialize fs event listener before accepting clients\n      midx: avoid duplicate packed_git entries\n      t5550: count fetches in \"previously-fetched .idx\" test\n      dumb-http: store downloaded pack idx as tempfile\n      packfile: drop has_pack_index()\n      packfile: drop sha1_pack_name()\n      packfile: drop sha1_pack_index_name()\n      packfile: warn people away from parse_packed_git()\n      http-walker: use object_id instead of bare hash\n      packfile: convert find_sha1_pack() to use object_id\n      packfile: use object_id in find_pack_entry_one()\n      packfile: use oidread() instead of hashcpy() to fill object_id\n      rev-list: skip bitmap traversal for --left-right\n      t6120: demonstrate weakness in disjoint-root handling\n      t/perf: add tests for git-describe\n      describe: stop digging for max_candidates+1\n      describe: stop traversing when we run out of names\n      test-lib: check malloc debug LD_PRELOAD before using\n      fetch: adjust refspec->raw_nr when filtering prefetch refspecs\n      refspec: drop separate raw_nr count\n      refspec: store raw refspecs inside refspec_item\n      test-lib: move malloc-debug setup after $PATH setup\n      object-file: prefer array-of-bytes initializer for hash literals\n      object-file: drop confusing oid initializer of empty_tree struct\n      object-file: move empty_tree struct into find_cached_object()\n      object-file: drop oid field from find_cached_object() return value\n      object-file: treat cached_object values as const\n      object-file: inline empty tree and blob literals\n      t9300: test verification of renamed paths\n      describe: split \"found all tags\" and max_candidates logic\n\nJohannes Schindelin (1):\n      docs: fix the `maintain-git` links in `technical/platform-support`\n\nJohn Cai (3):\n      git: pass in repo to builtin based on setup_git_directory_gently\n      annotate: remove usage of the_repository global\n      archive: remove the_repository global variable\n\nJonathan Tan (10):\n      t0410: make test description clearer\n      t0410: use from-scratch server\n      t5300: move --window clamp test next to unclamped\n      Revert \"fetch-pack: add a deref_without_lazy_fetch_extended()\"\n      fetch-pack: die if in commit graph but not obj db\n      index-pack: repack local links into promisor packs\n      index-pack: teach --promisor to forbid pack name\n      index-pack --promisor: dedup before checking links\n      index-pack --promisor: don't check blobs\n      index-pack --promisor: also check commits' trees\n\nJosh Heinrichs (1):\n      git-config.1: remove value from positional args in unset usage\n\nJosh Soref (2):\n      doc: update links to current pages\n      doc: switch links to https\n\nJunio C Hamano (22):\n      doc: clarify <src> in refspec syntax\n      Start the 2.48 cycle\n      BreakingChanges: early adopter option\n      The eighth batch\n      The ninth batch\n      Clean up RelNotes for 2.48\n      Prepare for 2.47.1\n      The tenth batch\n      The eleventh batch\n      Git 2.47.1\n      doc: option value may be separate for valid reasons\n      The twelfth batch\n      CodingGuidelines: a handful of error message guidelines\n      refs: move ref name helpers around\n      refs: drop strbuf_ prefix from helpers\n      t5604: do not expect that HEAD can be a valid tagname\n      tag: \"git tag\" refuses to use HEAD as a tagname\n      The thirteenth batch\n      The fourteenth batch\n      The fifteenth batch\n      The sixteenth batch\n      Git 2.48-rc0\n\nJustin Tobler (4):\n      bundle: add bundle verification options type\n      bundle: support fsck message configuration\n      fetch-pack: split out fsck config parsing\n      transport: propagate fsck configuration during bundle fetch\n\nKai Koponen (1):\n      doc: mention rev-list --ancestry-path restrictions\n\nKarthik Nayak (23):\n      loose: don't rely on repository global state\n      clang-format: re-adjust line break penalties\n      clang-format: align consecutive macro definitions\n      CodingGuidelines: discourage arbitrary suffixes in function names\n      refs: don't invoke reference-transaction hook for reflogs\n      builtin: pass repository to sub commands\n      packfile: add repository to struct `packed_git`\n      packfile: use `repository` from `packed_git` directly\n      packfile: pass `repository` to static function in the file\n      packfile: pass down repository to `odb_pack_name`\n      packfile: pass down repository to `has_object[_kept]_pack`\n      packfile: pass down repository to `for_each_packed_object`\n      config: make `delta_base_cache_limit` a non-global variable\n      config: make `packed_git_(limit|window_size)` non-global variables\n      midx: add repository to `multi_pack_index` struct\n      midx-write: pass down repository to static functions\n      midx-write: use `revs->repo` inside `read_refs_snapshot`\n      write-midx: add repository field to `write_midx_context`\n      midx-write: pass down repository to `write_midx_file[_only]`\n      midx: cleanup internal usage of `the_repository` and `the_hash_algo`\n      midx: pass `repository` to `load_multi_pack_index`\n      midx: pass down `hash_algo` to functions using global variables\n      midx: inline the `MIDX_MIN_SIZE` definition\n\nKousik Sanagavarapu (1):\n      t4205: fix typo in 'NUL termination with --stat'\n\nKristoffer Haugsbakk (20):\n      doc: merge-tree: improve example script\n      checkout: refer to other-worktree branch, not ref\n      Documentation/git-update-ref.txt: drop “flag”\n      Documentation/git-update-ref.txt: remove safety paragraphs\n      Documentation/git-update-ref.txt: demote symlink to last section\n      Documentation/git-update-ref.txt: remove confusing paragraph\n      Documentation/git-update-ref.txt: discuss symbolic refs\n      Documentation: mutually link update-ref and symbolic-ref\n      SubmittingPatches: tags -> trailers\n      t7001: add failure test which triggers assertion\n      Documentation/glossary: describe \"trailer\"\n      Documentation/git-bundle.txt: mention full backup example\n      Documentation/git-bundle.txt: remove old `--all` example\n      Documentation/git-bundle.txt: mention --all in spec. refs\n      Documentation/git-bundle.txt: discuss naïve backups\n      sequencer: comment checked-out branch properly\n      sequencer: comment `--reference` subject line properly\n      sequencer: comment commit messages properly\n      Documentation/git-bundle.txt: fix word join typo\n      Documentation/git-update-ref.txt: add missing word\n\nLinus Arver (1):\n      trailer: spread usage of \"trailer_block\" language\n\nNicolas Guichard (3):\n      load_branch_decorations: fix memory leak with non-static filters\n      rebase-update-refs: extract load_branch_decorations\n      rebase-merges: try and use branch names as labels\n\nOswald Buddenhagen (2):\n      git-gui: strip comments and consecutive empty lines from commit messages\n      git-gui: strip commit messages less aggressively\n\nPatrick Steinhardt (197):\n      builtin/annotate: fix leaking args vector\n      read-cache: fix leaking hash context in `do_write_index()`\n      scalar: fix leaking repositories\n      shell: fix leaking strings\n      wt-status: fix leaking buffer with sparse directories\n      submodule: fix leaking submodule entry list\n      builtin/stash: fix leaking `pathspec_from_file`\n      builtin/pack-redundant: fix various memory leaks\n      builtin/clone: fix leaking repo state when cloning with bundle URIs\n      t/helper: fix leaking repository in partial-clone helper\n      builtin/revert: fix leaking `gpg_sign` and `strategy` config\n      diff: improve lifecycle management of diff queues\n      line-log: fix several memory leaks\n      pseudo-merge: fix various memory leaks\n      pseudo-merge: fix leaking strmap keys\n      pack-bitmap-write: fix leaking OID array\n      midx-write: fix leaking buffer\n      revision: fix memory leaks when rewriting parents\n      revision: fix leaking saved parents\n      pack-write: fix return parameter of `write_rev_file_order()`\n      t/helper: fix leaks in proc-receive helper\n      remote: fix leaking push reports\n      builtin/send-pack: fix leaking list of push options\n      reftable/error: introduce out-of-memory error code\n      reftable/basics: merge \"publicbasics\" into \"basics\"\n      reftable: introduce `reftable_strdup()`\n      reftable/basics: handle allocation failures in `reftable_calloc()`\n      reftable/basics: handle allocation failures in `parse_names()`\n      reftable/record: handle allocation failures on copy\n      reftable/record: handle allocation failures when decoding records\n      reftable/writer: handle allocation failures in `writer_index_hash()`\n      reftable/writer: handle allocation failures in `reftable_new_writer()`\n      reftable/merged: handle allocation failures in `merged_table_init_iter()`\n      reftable/reader: handle allocation failures for unindexed reader\n      reftable/reader: handle allocation failures in `reader_init_iter()`\n      reftable/stack: handle allocation failures on reload\n      reftable/stack: handle allocation failures in `reftable_new_stack()`\n      reftable/stack: handle allocation failures in `stack_compact_range()`\n      reftable/stack: handle allocation failures in auto compaction\n      reftable/iter: handle allocation failures when creating indexed table iter\n      reftable/blocksource: handle allocation failures\n      reftable/block: handle allocation failures\n      reftable/pq: handle allocation failures when adding entries\n      reftable/tree: handle allocation failures\n      reftable: handle trivial allocation failures\n      reftable: fix calls to free(3P)\n      reftable: introduce `REFTABLE_FREE_AND_NULL()`\n      reftable/basics: ban standard allocator functions\n      reftable/basics: fix segfault when growing `names` array fails\n      cache-tree: refactor verification to return error codes\n      cache-tree: detect mismatching number of index entries\n      unpack-trees: detect mismatching number of cache-tree/index entries\n      t7300: work around platform-specific behaviour with long paths on MinGW\n      ci: create script to set up Git for Windows SDK\n      ci: handle Windows-based CI jobs in GitLab CI\n      gitlab-ci: introduce stages and dependencies\n      gitlab-ci: exercise Git on Windows\n      builtin/gc: fix crash when running `git maintenance start`\n      t/test-lib: fix quoting of TEST_RESULTS_SAN_FILE\n      t/test-lib: wire up NO_ICONV prerequisite\n      t/lib-gitweb: test against the build version of gitweb\n      t/lib-gpg: fix setup of GNUPGHOME in MinGW\n      t1401: make invocation of tar(1) work with Win32-provided one\n      t3404: work around platform-specific behaviour on macOS 10.15\n      t5500, t5601: skip tests which exercise paths with '[::1]' on Cygwin\n      t7300: work around platform-specific behaviour with long paths on MinGW\n      builtin/credential-cache: fix missing parameter for stub function\n      http: fix build error on FreeBSD\n      reftable: stop using `strbuf_addbuf()`\n      reftable: stop using `strbuf_addf()`\n      reftable/basics: provide new `reftable_buf` interface\n      reftable: convert from `strbuf` to `reftable_buf`\n      reftable/blocksource: adapt interface name\n      t/unit-tests: check for `reftable_buf` allocation errors\n      reftable/stack: adapt `format_name()` to handle allocation failures\n      reftable/record: adapt `reftable_record_key()` to handle allocation failures\n      reftable/stack: adapt `stack_filename()` to handle allocation failures\n      reftable: handle trivial `reftable_buf` errors\n      ref-filter: format iteratively with lexicographic refname sorting\n      t/unit-tests: update clar to 206accb\n      Makefile: extract script to generate clar declarations\n      cmake: fix compilation of clar-based unit tests\n      cmake: set up proper dependencies for generated clar headers\n      compat/mingw: share file handles created via `CreateFileW()`\n      compat/mingw: allow deletion of most opened files\n      t6006: fix prereq handling with `test_format ()`\n      builtin/ls-remote: plug leaking server options\n      t/helper: fix leaks in \"reach\" test tool\n      grep: fix leak in `grep_splice_or()`\n      builtin/grep: fix leak with `--max-count=0`\n      revision: fix leaking bloom filters\n      diff-lib: fix leaking diffopts in `do_diff_cache()`\n      pretty: clear signature check\n      upload-pack: fix leaking URI protocols\n      builtin/commit: fix leaking change data contents\n      trailer: fix leaking trailer values\n      trailer: fix leaking strbufs when formatting trailers\n      builtin/commit: fix leaking cleanup config\n      transport-helper: fix leaking import/export marks\n      builtin/tag: fix leaking key ID on failure to sign\n      combine-diff: fix leaking lost lines\n      dir: release untracked cache data\n      sparse-index: correctly free EWAH contents\n      t/helper: stop re-initialization of `the_repository`\n      t/helper: fix leaking buffer in \"dump-untracked-cache\"\n      dir: fix leak when parsing \"status.showUntrackedFiles\"\n      builtin/merge: release output buffer after performing merge\n      list-objects-filter-options: work around reported leak on error\n      compat/mingw: support POSIX semantics for atomic renames\n      t/unit-tests: convert \"clar-generate.awk\" into a shell script\n      cmake: use SH_EXE to execute clar scripts\n      cmake: use verbatim arguments when invoking clar commands\n      Makefile: let clar header targets depend on their scripts\n      reftable/system: move \"dir.h\" to its only user\n      reftable: explicitly handle hash format IDs\n      reftable/system: stop depending on \"hash.h\"\n      reftable/stack: stop using `fsync_component()` directly\n      reftable/system: provide thin wrapper for tempfile subsystem\n      reftable/stack: drop only use of `get_locked_file_path()`\n      reftable/system: provide thin wrapper for lockfile subsystem\n      builtin/gc: provide hint when maintenance hits a stale schedule lock\n      refs: allow passing flags when setting up a transaction\n      refs/files: move logic to commit initial transaction\n      refs: introduce \"initial\" transaction flag\n      refs/files: support symbolic and root refs in initial transaction\n      refs: use \"initial\" transaction semantics to migrate refs\n      refs: skip collision checks in initial transactions\n      refs: don't normalize log messages with `REF_SKIP_CREATE_REFLOG`\n      reftable/writer: optimize allocations by using a scratch buffer\n      reftable/block: rename `block_writer::buf` variable\n      reftable/block: optimize allocations by using scratch buffer\n      builtin/blame: fix leaking blame entries with `--incremental`\n      bisect: fix leaking good/bad terms when reading multipe times\n      bisect: fix leaking string in `handle_bad_merge_base()`\n      bisect: fix leaking `current_bad_oid`\n      bisect: fix multiple leaks in `bisect_next_all()`\n      bisect: fix leaking commit list items in `check_merge_base()`\n      bisect: fix various cases where we leak commit list items\n      line-log: fix leak when rewriting commit parents\n      strvec: introduce new `strvec_splice()` function\n      git: refactor alias handling to use a `struct strvec`\n      git: refactor builtin handling to use a `struct strvec`\n      split-index: fix memory leak in `move_cache_to_base_index()`\n      builtin/sparse-checkout: fix leaking sanitized patterns\n      help: refactor to not use globals for reading config\n      help: fix leaking `struct cmdnames`\n      help: fix leaking return value from `help_unknown_cmd()`\n      builtin/help: fix leaks in `check_git_cmd()`\n      builtin/init-db: fix leaking directory paths\n      builtin/branch: fix leaking sorting options\n      t/helper: fix leaking commit graph in \"read-graph\" subcommand\n      global: drop `UNLEAK()` annotation\n      git-compat-util: drop now-unused `UNLEAK()` macro\n      t5601: work around leak sanitizer issue\n      t: mark some tests as leak free\n      t: remove unneeded !SANITIZE_LEAK prerequisites\n      test-lib: unconditionally enable leak checking\n      t: remove TEST_PASSES_SANITIZE_LEAK annotations\n      t7900: fix host-dependent behaviour when testing git-maintenance(1)\n      refs: adapt `initial_transaction` flag to be unsigned\n      reftable: rename scratch buffer\n      bisect: address Coverity warning about potential double free\n      refs/reftable: encapsulate reftable stack\n      refs/reftable: handle reloading stacks in the reftable backend\n      reftable/stack: add accessor for the hash ID\n      refs/reftable: figure out hash via `reftable_stack`\n      refs/reftable: read references via `struct reftable_backend`\n      refs/reftable: refactor reading symbolic refs to use reftable backend\n      refs/reftable: refactor reflog expiry to use reftable backend\n      reftable/stack: add mechanism to notify callers on reload\n      reftable/merged: drain priority queue on reseek\n      refs/reftable: reuse iterators when reading refs\n      Makefile: use common template for GIT-BUILD-OPTIONS\n      Makefile: consistently use @PLACEHOLDER@ to substitute\n      Makefile: refactor GIT-VERSION-GEN to be reusable\n      Makefile: propagate Git version via generated header\n      Makefile: generate \"git.rc\" via GIT-VERSION-GEN\n      Makefile: generate doc versions via GIT-VERSION-GEN\n      Makefile: consistently use PERL_PATH\n      Makefile: extract script to massage Perl scripts\n      Makefile: use \"generate-perl.sh\" to massage Perl library\n      Makefile: extract script to massage Shell scripts\n      Makefile: extract script to massage Python scripts\n      Makefile: extract script to generate gitweb.cgi\n      Makefile: extract script to generate gitweb.js\n      Makefile: refactor generators to be PWD-independent\n      Makefile: allow \"bin-wrappers/\" directory to exist\n      Makefile: write absolute program path into bin-wrappers\n      Makefile: simplify building of templates\n      Documentation: allow sourcing generated includes from separate dir\n      Documentation: teach \"cmd-list.perl\" about out-of-tree builds\n      Documentation: extract script to generate a list of mergetools\n      t: better support for out-of-tree builds\n      t: allow overriding build dir\n      Documentation: add comparison of build systems\n      Introduce support for the Meson build system\n      object-name: fix reversed ordering with \":/<text>\" revisions\n\nPhilippe Blain (6):\n      Makefile: fix dependency for $(UNIT_TEST_DIR)/clar/clar.o\n      completion: complete '--tool-help' in 'git mergetool'\n      git-mergetool--lib.sh: use TOOL_MODE when erroring about unknown tool\n      git-mergetool--lib.sh: add error message if 'setup_user_tool' fails\n      git-mergetool--lib.sh: add error message for unknown tool variant\n      git-difftool--helper.sh: exit upon initialize_merge_tool errors\n\nPiotr Szlazak (1):\n      doc: document how uploadpack.allowAnySHA1InWant impact other allow options\n\nRamsay Jones (1):\n      credential-cache: treat ECONNABORTED like ECONNRESET\n\nRené Scharfe (1):\n      grep: disable lookahead on error\n\nRubén Justo (1):\n      strvec: `strvec_splice()` to a statically initialized vector\n\nSeyi Kuforiji (2):\n      t7011: ensure no whitespace after redirect\n      t9101: ensure no whitespace after redirect\n\nShubham Kanodia (1):\n      doc: add a note about staggering of maintenance\n\nSimon Marchi (1):\n      builtin/difftool: intialize some hashmap variables\n\nSven Strickroth (1):\n      global: Fix duplicate word typos\n\nSören Krecker (1):\n      mingw.c: Fix complier warnings for a 64 bit msvc\n\nTaylor Blau (13):\n      Documentation: mention the amlog in howto/maintain-git.txt\n      The second batch\n      The third batch\n      The third batch\n      The fifth batch\n      The sixth batch\n      The seventh batch\n      t5332-multi-pack-reuse.sh: demonstrate duplicate packing failure\n      pack-objects: only perform verbatim reuse on the preferred pack\n      pack-bitmap.c: typofix in `find_boundary_objects()`\n      t/perf: use 'test_file_size' in more places\n      Makefile(s): avoid recipe prefix in conditional statements\n      packfile.c: remove unnecessary prepare_packed_git() call\n\nTobias Boesch (1):\n      git gui: add directly calling merge tool from configuration\n\nToon Claes (1):\n      bundle-uri: plug leak in unbundle_from_file()\n\nUsman Akinyemi (5):\n      t3404: avoid losing exit status with focus on `git show` and `git cat-file`\n      t3404: replace test with test_line_count()\n      daemon: replace atoi() with strtoul_ui() and strtol_i()\n      merge: replace atoi() with strtol_i() for marker size validation\n      imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsing\n\nWolfgang Müller (1):\n      builtin/shortlog: explicitly set hash algo when there is no repo\n\nXing Xin (6):\n      transport: introduce parse_transport_option() method\n      remote: introduce remote.<name>.serverOption configuration\n      transport.c::handshake: make use of server options from remote\n      fetch: respect --server-option when fetching multiple remotes\n      ls-remote: leakfix for not clearing server_options\n      Documentation/gitprotocol-v2.txt: fix a slight inconsistency in format\n\nbrian m. carlson (18):\n      git-curl-compat: remove check for curl 7.21.5\n      git-curl-compat: remove check for curl 7.25.0\n      git-curl-compat: remove check for curl 7.34.0\n      git-curl-compat: remove check for curl 7.39.0\n      git-curl-compat: remove check for curl 7.43.0\n      git-curl-compat: remove check for curl 7.44.0\n      git-curl-compat: remove check for curl 7.52.0\n      git-curl-compat: remove check for curl 7.53.0\n      git-curl-compat: remove check for curl 7.56.0\n      INSTALL: document requirement for libcurl 7.61.0\n      Require Perl 5.26.0\n      gitweb: make use of s///r\n      gitlab-ci: switch from Ubuntu 16.04 to 20.04\n      ci: remove clause for Ubuntu 16.04\n      Add additional CI jobs to avoid accidental breakage\n      Allow cloning from repositories owned by another user\n      index-pack: rename struct thread_local\n      reflog: rename unreachable\n\nshejialuo (10):\n      ref: initialize \"fsck_ref_report\" with zero\n      ref: check the full refname instead of basename\n      ref: initialize ref name outside of check functions\n      ref: support multiple worktrees check for refs\n      ref: port git-fsck(1) regular refs check for files backend\n      ref: add more strict checks for regular refs\n      ref: add basic symref content check for files backend\n      ref: check whether the target of the symref is a ref\n      ref: add symlink ref content check for files backend\n      ref-cache: fix invalid free operation in `free_ref_entry`\n\n"},{"id":"509185","messageId":"00ad01db5017$aa9ce340$ffd6a9c0$@nexbridge.com","threadId":"62647","inReplyTo":"xmqqfrmn4hr9.fsf@gitster.g","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-17T00:07:25Z","receivedAt":"2024-12-17T00:14:46Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n>An early preview release Git v2.48.0-rc0 is now available for testing at the usual\n>places.  It is comprised of 446 non-merge commits since v2.47.0, contributed by 66\n>people, 26 of which are new faces [*].\n>\n>The tarballs are found at:\n>\n>    https://www.kernel.org/pub/software/scm/git/testing/\n>\n>The following public repositories all have a copy of the 'v2.48.0-rc0' tag and the\n>'master' branch that the tag points at:\n>\n>  url = https://git.kernel.org/pub/scm/git/git\n>  url = https://kernel.googlesource.com/pub/scm/git/git\n>  url = git://repo.or.cz/alt-git.git\n>  url = https://github.com/gitster/git\n\nDid I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable being removed\nfrom the test suite? That was available under 2.47.0 but if I supply it now, the tests\ncrash at git init.\n\nConfused a little\n--Randall\n\n--\nBrief whoami: NonStop&UNIX developer since approximately\nUNIX(421664400)\nNonStop(211288444200000000)\n-- In real life, I talk too much.\n\n\n\n"},{"id":"509188","messageId":"Z2EC9rq3F0rTljff@pks.im","threadId":"62647","inReplyTo":"00ad01db5017$aa9ce340$ffd6a9c0$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-17T04:51:28Z","receivedAt":"2024-12-17T04:51:49Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Mon, Dec 16, 2024 at 07:07:25PM -0500, rsbecker@nexbridge.com wrote:\n> On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n> >An early preview release Git v2.48.0-rc0 is now available for testing at the usual\n> >places.  It is comprised of 446 non-merge commits since v2.47.0, contributed by 66\n> >people, 26 of which are new faces [*].\n> >\n> >The tarballs are found at:\n> >\n> >    https://www.kernel.org/pub/software/scm/git/testing/\n> >\n> >The following public repositories all have a copy of the 'v2.48.0-rc0' tag and the\n> >'master' branch that the tag points at:\n> >\n> >  url = https://git.kernel.org/pub/scm/git/git\n> >  url = https://kernel.googlesource.com/pub/scm/git/git\n> >  url = git://repo.or.cz/alt-git.git\n> >  url = https://github.com/gitster/git\n> \n> Did I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable being removed\n> from the test suite? That was available under 2.47.0 but if I supply it now, the tests\n> crash at git init.\n\nNothing should've changed here, and a local test run with that\nenvironment variable works alright on my system. Could you please\nprovide more details?\n\nPatrick\n"},{"id":"509221","messageId":"010a01db508a$4544d750$cfce85f0$@nexbridge.com","threadId":"62647","inReplyTo":"Z2EC9rq3F0rTljff@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-17T13:47:47Z","receivedAt":"2024-12-17T13:47:56Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"\n>-----Original Message-----\n>From: Patrick Steinhardt <ps@pks.im>\n>Sent: December 16, 2024 11:51 PM\n>To: rsbecker@nexbridge.com\n>Cc: 'Junio C Hamano' <gitster@pobox.com>; git@vger.kernel.org; 'Linux\nKernel'\n><linux-kernel@vger.kernel.org>; git-packagers@googlegroups.com\n>Subject: Re: [ANNOUNCE] Git v2.48.0-rc0\n>\n>On Mon, Dec 16, 2024 at 07:07:25PM -0500, rsbecker@nexbridge.com wrote:\n>> On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n>> >An early preview release Git v2.48.0-rc0 is now available for testing\n>> >at the usual places.  It is comprised of 446 non-merge commits since\n>> >v2.47.0, contributed by 66 people, 26 of which are new faces [*].\n>> >\n>> >The tarballs are found at:\n>> >\n>> >    https://www.kernel.org/pub/software/scm/git/testing/\n>> >\n>> >The following public repositories all have a copy of the\n>> >'v2.48.0-rc0' tag and the 'master' branch that the tag points at:\n>> >\n>> >  url = https://git.kernel.org/pub/scm/git/git\n>> >  url = https://kernel.googlesource.com/pub/scm/git/git\n>> >  url = git://repo.or.cz/alt-git.git\n>> >  url = https://github.com/gitster/git\n>>\n>> Did I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable being\n>> removed from the test suite? That was available under 2.47.0 but if I\n>> supply it now, the tests crash at git init.\n>\n>Nothing should've changed here, and a local test run with that environment\n>variable works alright on my system. Could you please provide more details?\n\nThis is on the latest OS version of NonStop x86. The test is done via the\nfollowing:\nWith OpenSSL 3.4 The T0625 is Expat.\n\nWhen run as follows:\nGIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n/usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline\n-I/usr/local-ssl3.4/include -I/usr/coreutils/include\n-I/usr/tandem/xml/T0625L01_AAE/include\" LDFLAGS=\"/usr/coreutils/lib/libz.a\n-L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n-L/usr/tandem/xml/T0625L01_AAE/lib\"  TEST_LINT=\nSHELL=/usr/coreutils/bin/bash\n\nThe results are:\n*** t0000-basic.sh ***\nerror: cannot run git init\nMakefile:77: recipe for target 't0000-basic.sh' failed\nmake[2]: *** [t0000-basic.sh] Error 1\n*** t0001-init.sh ***\nerror: cannot run git init\nMakefile:77: recipe for target 't0001-init.sh' failed\nmake[2]: *** [t0001-init.sh] Error 1\n*** t0002-gitfile.sh ***\nerror: cannot run git init\nMakefile:77: recipe for target 't0002-gitfile.sh' failed\nmake[2]: *** [t0002-gitfile.sh] Error 1\netc for all tests.\n\nRemoving GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole\ntest suite to pass.\n\nThere are environment size limits (about 32Kb) in bash on the box, so it is\npossible\na boundary was crossed internal to the test setup.\n\n"},{"id":"509222","messageId":"Z2GJkolZyebD-8PD@pks.im","threadId":"62647","inReplyTo":"010a01db508a$4544d750$cfce85f0$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-17T14:24:18Z","receivedAt":"2024-12-17T14:24:37Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Tue, Dec 17, 2024 at 08:47:47AM -0500, rsbecker@nexbridge.com wrote:\n> \n> >-----Original Message-----\n> >From: Patrick Steinhardt <ps@pks.im>\n> >Sent: December 16, 2024 11:51 PM\n> >To: rsbecker@nexbridge.com\n> >Cc: 'Junio C Hamano' <gitster@pobox.com>; git@vger.kernel.org; 'Linux\n> Kernel'\n> ><linux-kernel@vger.kernel.org>; git-packagers@googlegroups.com\n> >Subject: Re: [ANNOUNCE] Git v2.48.0-rc0\n> >\n> >On Mon, Dec 16, 2024 at 07:07:25PM -0500, rsbecker@nexbridge.com wrote:\n> >> On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n> >> >An early preview release Git v2.48.0-rc0 is now available for testing\n> >> >at the usual places.  It is comprised of 446 non-merge commits since\n> >> >v2.47.0, contributed by 66 people, 26 of which are new faces [*].\n> >> >\n> >> >The tarballs are found at:\n> >> >\n> >> >    https://www.kernel.org/pub/software/scm/git/testing/\n> >> >\n> >> >The following public repositories all have a copy of the\n> >> >'v2.48.0-rc0' tag and the 'master' branch that the tag points at:\n> >> >\n> >> >  url = https://git.kernel.org/pub/scm/git/git\n> >> >  url = https://kernel.googlesource.com/pub/scm/git/git\n> >> >  url = git://repo.or.cz/alt-git.git\n> >> >  url = https://github.com/gitster/git\n> >>\n> >> Did I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable being\n> >> removed from the test suite? That was available under 2.47.0 but if I\n> >> supply it now, the tests crash at git init.\n> >\n> >Nothing should've changed here, and a local test run with that environment\n> >variable works alright on my system. Could you please provide more details?\n> \n> This is on the latest OS version of NonStop x86. The test is done via the\n> following:\n> With OpenSSL 3.4 The T0625 is Expat.\n> \n> When run as follows:\n> GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n> /usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline\n> -I/usr/local-ssl3.4/include -I/usr/coreutils/include\n> -I/usr/tandem/xml/T0625L01_AAE/include\" LDFLAGS=\"/usr/coreutils/lib/libz.a\n> -L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n> -L/usr/tandem/xml/T0625L01_AAE/lib\"  TEST_LINT=\n> SHELL=/usr/coreutils/bin/bash\n> \n> The results are:\n> *** t0000-basic.sh ***\n> error: cannot run git init\n> Makefile:77: recipe for target 't0000-basic.sh' failed\n> make[2]: *** [t0000-basic.sh] Error 1\n> *** t0001-init.sh ***\n> error: cannot run git init\n> Makefile:77: recipe for target 't0001-init.sh' failed\n> make[2]: *** [t0001-init.sh] Error 1\n> *** t0002-gitfile.sh ***\n> error: cannot run git init\n> Makefile:77: recipe for target 't0002-gitfile.sh' failed\n> make[2]: *** [t0002-gitfile.sh] Error 1\n> etc for all tests.\n> \n> Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole\n> test suite to pass.\n> \n> There are environment size limits (about 32Kb) in bash on the box, so it is\n> possible\n> a boundary was crossed internal to the test setup.\n\nCould you please provide a backtrace for git-init(1)?\n\nPatrick\n"},{"id":"509225","messageId":"012701db509f$55e8e4b0$01baae10$@nexbridge.com","threadId":"62647","inReplyTo":"Z2GJkolZyebD-8PD@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-17T16:18:34Z","receivedAt":"2024-12-17T16:18:46Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 17, 2024 9:24 AM, Patrick Steinhardt wrote:\n>On Tue, Dec 17, 2024 at 08:47:47AM -0500, rsbecker@nexbridge.com wrote:\n>>\n>> >-----Original Message-----\n>> >From: Patrick Steinhardt <ps@pks.im>\n>> >Sent: December 16, 2024 11:51 PM\n>> >To: rsbecker@nexbridge.com\n>> >Cc: 'Junio C Hamano' <gitster@pobox.com>; git@vger.kernel.org; 'Linux\n>> Kernel'\n>> ><linux-kernel@vger.kernel.org>; git-packagers@googlegroups.com\n>> >Subject: Re: [ANNOUNCE] Git v2.48.0-rc0\n>> >\n>> >On Mon, Dec 16, 2024 at 07:07:25PM -0500, rsbecker@nexbridge.com wrote:\n>> >> On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n>> >> >An early preview release Git v2.48.0-rc0 is now available for\n>> >> >testing at the usual places.  It is comprised of 446 non-merge\n>> >> >commits since v2.47.0, contributed by 66 people, 26 of which are new\nfaces\n>[*].\n>> >> >\n>> >> >The tarballs are found at:\n>> >> >\n>> >> >    https://www.kernel.org/pub/software/scm/git/testing/\n>> >> >\n>> >> >The following public repositories all have a copy of the\n>> >> >'v2.48.0-rc0' tag and the 'master' branch that the tag points at:\n>> >> >\n>> >> >  url = https://git.kernel.org/pub/scm/git/git\n>> >> >  url = https://kernel.googlesource.com/pub/scm/git/git\n>> >> >  url = git://repo.or.cz/alt-git.git  url =\n>> >> > https://github.com/gitster/git\n>> >>\n>> >> Did I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable\n>> >> being removed from the test suite? That was available under 2.47.0\n>> >> but if I supply it now, the tests crash at git init.\n>> >\n>> >Nothing should've changed here, and a local test run with that\n>> >environment variable works alright on my system. Could you please\nprovide\n>more details?\n>>\n>> This is on the latest OS version of NonStop x86. The test is done via\n>> the\n>> following:\n>> With OpenSSL 3.4 The T0625 is Expat.\n>>\n>> When run as follows:\n>> GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n>> /usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline\n>> -I/usr/local-ssl3.4/include -I/usr/coreutils/include\n>> -I/usr/tandem/xml/T0625L01_AAE/include\"\n>> LDFLAGS=\"/usr/coreutils/lib/libz.a\n>> -L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n>> -L/usr/tandem/xml/T0625L01_AAE/lib\"  TEST_LINT=\n>> SHELL=/usr/coreutils/bin/bash\n>>\n>> The results are:\n>> *** t0000-basic.sh ***\n>> error: cannot run git init\n>> Makefile:77: recipe for target 't0000-basic.sh' failed\n>> make[2]: *** [t0000-basic.sh] Error 1\n>> *** t0001-init.sh ***\n>> error: cannot run git init\n>> Makefile:77: recipe for target 't0001-init.sh' failed\n>> make[2]: *** [t0001-init.sh] Error 1\n>> *** t0002-gitfile.sh ***\n>> error: cannot run git init\n>> Makefile:77: recipe for target 't0002-gitfile.sh' failed\n>> make[2]: *** [t0002-gitfile.sh] Error 1 etc for all tests.\n>>\n>> Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole test\n>> suite to pass.\n>>\n>> There are environment size limits (about 32Kb) in bash on the box, so\n>> it is possible a boundary was crossed internal to the test setup.\n>\n>Could you please provide a backtrace for git-init(1)?\n\nWhere would you need the backtrace done? Any specific point in the code? I\nhave to throw this into gdb to get the backtrace - no dump file created.\n\n"},{"id":"509234","messageId":"015901db50b5$e3a7f6e0$aaf7e4a0$@nexbridge.com","threadId":"62647","inReplyTo":"010a01db508a$4544d750$cfce85f0$@nexbridge.com","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-17T19:00:01Z","receivedAt":"2024-12-17T19:00:10Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 17, 2024 8:48 AM, I wrote:\n>>On Mon, Dec 16, 2024 at 07:07:25PM -0500, rsbecker@nexbridge.com wrote:\n>>> On December 16, 2024 1:15 PM, Junio C Hamano wrote:\n>>> >An early preview release Git v2.48.0-rc0 is now available for\n>>> >testing at the usual places.  It is comprised of 446 non-merge\n>>> >commits since v2.47.0, contributed by 66 people, 26 of which are new\nfaces\n>[*].\n>>> >\n>>> >The tarballs are found at:\n>>> >\n>>> >    https://www.kernel.org/pub/software/scm/git/testing/\n>>> >\n>>> >The following public repositories all have a copy of the\n>>> >'v2.48.0-rc0' tag and the 'master' branch that the tag points at:\n>>> >\n>>> >  url = https://git.kernel.org/pub/scm/git/git\n>>> >  url = https://kernel.googlesource.com/pub/scm/git/git\n>>> >  url = git://repo.or.cz/alt-git.git  url =\n>>> > https://github.com/gitster/git\n>>>\n>>> Did I miss something about GIT_TEST_DEFAULT_REF_FORMAT=reftable being\n>>> removed from the test suite? That was available under 2.47.0 but if I\n>>> supply it now, the tests crash at git init.\n>>\n>>Nothing should've changed here, and a local test run with that\n>>environment variable works alright on my system. Could you please provide\nmore\n>details?\n>\n>This is on the latest OS version of NonStop x86. The test is done via the\n>following:\n>With OpenSSL 3.4 The T0625 is Expat.\n>\n>When run as follows:\n>GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n>/usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline -I/usr/local-\n>ssl3.4/include -I/usr/coreutils/include\n-I/usr/tandem/xml/T0625L01_AAE/include\"\n>LDFLAGS=\"/usr/coreutils/lib/libz.a\n>-L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n-L/usr/tandem/xml/T0625L01_AAE/lib\"\n>TEST_LINT= SHELL=/usr/coreutils/bin/bash\n>\n>The results are:\n>*** t0000-basic.sh ***\n>error: cannot run git init\n>Makefile:77: recipe for target 't0000-basic.sh' failed\n>make[2]: *** [t0000-basic.sh] Error 1\n>*** t0001-init.sh ***\n>error: cannot run git init\n>Makefile:77: recipe for target 't0001-init.sh' failed\n>make[2]: *** [t0001-init.sh] Error 1\n>*** t0002-gitfile.sh ***\n>error: cannot run git init\n>Makefile:77: recipe for target 't0002-gitfile.sh' failed\n>make[2]: *** [t0002-gitfile.sh] Error 1\n>etc for all tests.\n>\n>Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole test suite\nto\n>pass.\n>\n>There are environment size limits (about 32Kb) in bash on the box, so it is\npossible a\n>boundary was crossed internal to the test setup.\n\nI did find this, in t0000-basic:\nnot ok 69 - init with GIT_DEFAULT_REF_FORMAT=reftable\nbut have no more details. When should I break in gdb to get a backtrace?\n\n"},{"id":"509279","messageId":"Z2JyFB3CddYM_LP4@pks.im","threadId":"62647","inReplyTo":"015901db50b5$e3a7f6e0$aaf7e4a0$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-18T06:56:40Z","receivedAt":"2024-12-18T06:57:00Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Tue, Dec 17, 2024 at 02:00:01PM -0500, rsbecker@nexbridge.com wrote:\n> On December 17, 2024 8:48 AM, I wrote:\n> >This is on the latest OS version of NonStop x86. The test is done via the\n> >following:\n> >With OpenSSL 3.4 The T0625 is Expat.\n> >\n> >When run as follows:\n> >GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n> >/usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline -I/usr/local-\n> >ssl3.4/include -I/usr/coreutils/include\n> -I/usr/tandem/xml/T0625L01_AAE/include\"\n> >LDFLAGS=\"/usr/coreutils/lib/libz.a\n> >-L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n> -L/usr/tandem/xml/T0625L01_AAE/lib\"\n> >TEST_LINT= SHELL=/usr/coreutils/bin/bash\n> >\n> >The results are:\n> >*** t0000-basic.sh ***\n> >error: cannot run git init\n> >Makefile:77: recipe for target 't0000-basic.sh' failed\n> >make[2]: *** [t0000-basic.sh] Error 1\n> >*** t0001-init.sh ***\n> >error: cannot run git init\n> >Makefile:77: recipe for target 't0001-init.sh' failed\n> >make[2]: *** [t0001-init.sh] Error 1\n> >*** t0002-gitfile.sh ***\n> >error: cannot run git init\n> >Makefile:77: recipe for target 't0002-gitfile.sh' failed\n> >make[2]: *** [t0002-gitfile.sh] Error 1\n> >etc for all tests.\n> >\n> >Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole test suite\n> to\n> >pass.\n> >\n> >There are environment size limits (about 32Kb) in bash on the box, so it is\n> possible a\n> >boundary was crossed internal to the test setup.\n> \n> I did find this, in t0000-basic:\n> not ok 69 - init with GIT_DEFAULT_REF_FORMAT=reftable\n\nYou mean t0001-init.sh, right?\n\n> but have no more details. When should I break in gdb to get a backtrace?\n\nCan you please run that test with \"-ix\" and post the logs?\n\nPatrick\n"},{"id":"509306","messageId":"020701db5166$ed19b2c0$c74d1840$@nexbridge.com","threadId":"62647","inReplyTo":"Z2JyFB3CddYM_LP4@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-18T16:07:18Z","receivedAt":"2024-12-18T16:07:32Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 18, 2024 1:57 AM, Patrick Steinhardt wrote:\n>On Tue, Dec 17, 2024 at 02:00:01PM -0500, rsbecker@nexbridge.com wrote:\n>> On December 17, 2024 8:48 AM, I wrote:\n>> >This is on the latest OS version of NonStop x86. The test is done via\n>> >the\n>> >following:\n>> >With OpenSSL 3.4 The T0625 is Expat.\n>> >\n>> >When run as follows:\n>> >GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n>> >/usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline\n>> >-I/usr/local- ssl3.4/include -I/usr/coreutils/include\n>> -I/usr/tandem/xml/T0625L01_AAE/include\"\n>> >LDFLAGS=\"/usr/coreutils/lib/libz.a\n>> >-L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n>> -L/usr/tandem/xml/T0625L01_AAE/lib\"\n>> >TEST_LINT= SHELL=/usr/coreutils/bin/bash\n>> >\n>> >The results are:\n>> >*** t0000-basic.sh ***\n>> >error: cannot run git init\n>> >Makefile:77: recipe for target 't0000-basic.sh' failed\n>> >make[2]: *** [t0000-basic.sh] Error 1\n>> >*** t0001-init.sh ***\n>> >error: cannot run git init\n>> >Makefile:77: recipe for target 't0001-init.sh' failed\n>> >make[2]: *** [t0001-init.sh] Error 1\n>> >*** t0002-gitfile.sh ***\n>> >error: cannot run git init\n>> >Makefile:77: recipe for target 't0002-gitfile.sh' failed\n>> >make[2]: *** [t0002-gitfile.sh] Error 1 etc for all tests.\n>> >\n>> >Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole test\n>> >suite\n>> to\n>> >pass.\n>> >\n>> >There are environment size limits (about 32Kb) in bash on the box, so\n>> >it is\n>> possible a\n>> >boundary was crossed internal to the test setup.\n>>\n>> I did find this, in t0000-basic:\n>> not ok 69 - init with GIT_DEFAULT_REF_FORMAT=reftable\n>\n>You mean t0001-init.sh, right?\n>\n>> but have no more details. When should I break in gdb to get a backtrace?\n>\n>Can you please run that test with \"-ix\" and post the logs?\n\nAll tests, actually.\n\n$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh\nt0000-basic.sh --verbose -i -x\nerror: reftable: transaction prepare: out of memory\nerror: cannot run git init\n\n"},{"id":"509354","messageId":"00ca01db5257$12708d00$3751a700$@nexbridge.com","threadId":"62647","inReplyTo":"Z2JyFB3CddYM_LP4@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-19T20:46:20Z","receivedAt":"2024-12-19T20:46:34Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 18, 2024 11:07 AM, I wrote:\n>On December 18, 2024 1:57 AM, Patrick Steinhardt wrote:\n>>On Tue, Dec 17, 2024 at 02:00:01PM -0500, rsbecker@nexbridge.com wrote:\n>>> On December 17, 2024 8:48 AM, I wrote:\n>>> >This is on the latest OS version of NonStop x86. The test is done\n>>> >via the\n>>> >following:\n>>> >With OpenSSL 3.4 The T0625 is Expat.\n>>> >\n>>> >When run as follows:\n>>> >GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n>>> >/usr/coreutils/bin/make -k test V=1 CFLAGS=\"-g -O2 -Winline\n>>> >-I/usr/local- ssl3.4/include -I/usr/coreutils/include\n>>> -I/usr/tandem/xml/T0625L01_AAE/include\"\n>>> >LDFLAGS=\"/usr/coreutils/lib/libz.a\n>>> >-L/usr/local-ssl3.4/lib -L/usr/coreutils/lib\n>>> -L/usr/tandem/xml/T0625L01_AAE/lib\"\n>>> >TEST_LINT= SHELL=/usr/coreutils/bin/bash\n>>> >\n>>> >The results are:\n>>> >*** t0000-basic.sh ***\n>>> >error: cannot run git init\n>>> >Makefile:77: recipe for target 't0000-basic.sh' failed\n>>> >make[2]: *** [t0000-basic.sh] Error 1\n>>> >*** t0001-init.sh ***\n>>> >error: cannot run git init\n>>> >Makefile:77: recipe for target 't0001-init.sh' failed\n>>> >make[2]: *** [t0001-init.sh] Error 1\n>>> >*** t0002-gitfile.sh ***\n>>> >error: cannot run git init\n>>> >Makefile:77: recipe for target 't0002-gitfile.sh' failed\n>>> >make[2]: *** [t0002-gitfile.sh] Error 1 etc for all tests.\n>>> >\n>>> >Removing GIT_TEST_DEFAULT_REF_FORMAT=reftable allows the whole test\n>>> >suite\n>>> to\n>>> >pass.\n>>> >\n>>> >There are environment size limits (about 32Kb) in bash on the box,\n>>> >so it is\n>>> possible a\n>>> >boundary was crossed internal to the test setup.\n>>>\n>>> I did find this, in t0000-basic:\n>>> not ok 69 - init with GIT_DEFAULT_REF_FORMAT=reftable\n>>\n>>You mean t0001-init.sh, right?\n>>\n>>> but have no more details. When should I break in gdb to get a backtrace?\n>>\n>>Can you please run that test with \"-ix\" and post the logs?\n>\n>All tests, actually.\n>\n>$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh t0000-\n>basic.sh --verbose -i -x\n>error: reftable: transaction prepare: out of memory\n>error: cannot run git init\n\nAny updates or hypothesis on this? Our test system has loads of memory - I\ncannot\nfigure out where the allocation failure takes place. There is a limit to how\nmuch\nmemory can be allocated, but it is very high and our virtual memory is\nextensive,\nbut this is a 32-bit build.\n\n--Randall\n\n"},{"id":"509359","messageId":"Z2UX2v8sc-DELaVm@pks.im","threadId":"62647","inReplyTo":"00ca01db5257$12708d00$3751a700$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-20T07:08:10Z","receivedAt":"2024-12-20T07:08:31Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com wrote:\n> On December 18, 2024 11:07 AM, I wrote:\n> >All tests, actually.\n> >\n> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh t0000-\n> >basic.sh --verbose -i -x\n> >error: reftable: transaction prepare: out of memory\n> >error: cannot run git init\n> \n> Any updates or hypothesis on this? Our test system has loads of memory\n> - I cannot figure out where the allocation failure takes place. There\n> is a limit to how much memory can be allocated, but it is very high\n> and our virtual memory is extensive, but this is a 32-bit build.\n\nMy hypothesis is that this is caused by ps/reftable-alloc-failures, but\nI am unable to tell where exactly the error comes from. So I'm dependent\non your input.\n\nCould you please bisect the error? Finding out where the error is raised\nwould also be quite helpful. It has to be one of the reftable functions\nthat returns REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not\nhave any more gut feeling right now.\n\nPatrick\n"},{"id":"509443","messageId":"015501db5314$b61ac2a0$225047e0$@nexbridge.com","threadId":"62647","inReplyTo":"Z2UX2v8sc-DELaVm@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-20T19:23:49Z","receivedAt":"2024-12-20T19:23:59Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 20, 2024 2:08 AM, Patrick Steinhardt wrote:\n>On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com wrote:\n>> On December 18, 2024 11:07 AM, I wrote:\n>> >All tests, actually.\n>> >\n>> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh\n>> >t0000- basic.sh --verbose -i -x\n>> >error: reftable: transaction prepare: out of memory\n>> >error: cannot run git init\n>>\n>> Any updates or hypothesis on this? Our test system has loads of memory\n>> - I cannot figure out where the allocation failure takes place. There\n>> is a limit to how much memory can be allocated, but it is very high\n>> and our virtual memory is extensive, but this is a 32-bit build.\n>\n>My hypothesis is that this is caused by ps/reftable-alloc-failures, but I\nam unable to\n>tell where exactly the error comes from. So I'm dependent on your input.\n>\n>Could you please bisect the error? Finding out where the error is raised\nwould also\n>be quite helpful. It has to be one of the reftable functions that returns\n>REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not have any more\n>gut feeling right now.\n\nThis is what bisect shows:\n\ngit bisect start\n# status: waiting for both good and bad commits\n# good: [777489f9e09c8d0dd6b12f9d90de6376330577a2] Git 2.47\ngit bisect good 777489f9e09c8d0dd6b12f9d90de6376330577a2\n# status: waiting for bad commit, 1 good commit known\n# bad: [063bcebf0c917140ca0e705cbe0fdea127e90086] Git 2.48-rc0\n\ngit bisect bad 063bcebf0c917140ca0e705cbe0fdea127e90086\n# bad: [2037ca85ad93ec905b46543df6df4080f6ca258b] worktree: refactor\n`repair_worktree_after_gitdir_move()`\ngit bisect bad 2037ca85ad93ec905b46543df6df4080f6ca258b\n# bad: [6a11438f43469f3815f2f0fc997bd45792ff04c0] The fifth batch\ngit bisect bad 6a11438f43469f3815f2f0fc997bd45792ff04c0\n# bad: [f004467b042d735a2fe8bd5706b053b04b1aec65] Merge branch\n'jh/config-unset-doc-fix'\ngit bisect bad f004467b042d735a2fe8bd5706b053b04b1aec65\n# bad: [e29296745dc92fb03f8f60111b458adc69ff84c5] Merge branch\n'sk/doc-maintenance-schedule'\ngit bisect bad e29296745dc92fb03f8f60111b458adc69ff84c5\n# bad: [5b67cc6477ce88c499caab5ebcebd492ec78932d] reftable/stack: handle\nallocation failures in auto compaction\ngit bisect bad 5b67cc6477ce88c499caab5ebcebd492ec78932d\n# good: [31f5b972e0231d4211987775dd58e67815734989] reftable/record: handle\nallocation failures when decoding records\ngit bisect good 31f5b972e0231d4211987775dd58e67815734989\n# bad: [18da60029319733e2d931f2758a8e47b8b25b117] reftable/reader: handle\nallocation failures for unindexed reader\ngit bisect bad 18da60029319733e2d931f2758a8e47b8b25b117\n# good: [74d1c18757d1a45b95e46836adf478193a34c42c] reftable/writer: handle\nallocation failures in `reftable_new_writer()`\ngit bisect good 74d1c18757d1a45b95e46836adf478193a34c42c\n\n--Randall\n\n"},{"id":"509444","messageId":"Z2XHfzLEBUfqygBq@pks.im","threadId":"62647","inReplyTo":"015501db5314$b61ac2a0$225047e0$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-20T19:37:45Z","receivedAt":"2024-12-20T19:38:06Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Dec 20, 2024 at 02:23:49PM -0500, rsbecker@nexbridge.com wrote:\n> On December 20, 2024 2:08 AM, Patrick Steinhardt wrote:\n> >On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com wrote:\n> >> On December 18, 2024 11:07 AM, I wrote:\n> >> >All tests, actually.\n> >> >\n> >> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh\n> >> >t0000- basic.sh --verbose -i -x\n> >> >error: reftable: transaction prepare: out of memory\n> >> >error: cannot run git init\n> >>\n> >> Any updates or hypothesis on this? Our test system has loads of memory\n> >> - I cannot figure out where the allocation failure takes place. There\n> >> is a limit to how much memory can be allocated, but it is very high\n> >> and our virtual memory is extensive, but this is a 32-bit build.\n> >\n> >My hypothesis is that this is caused by ps/reftable-alloc-failures, but I\n> am unable to\n> >tell where exactly the error comes from. So I'm dependent on your input.\n> >\n> >Could you please bisect the error? Finding out where the error is raised\n> would also\n> >be quite helpful. It has to be one of the reftable functions that returns\n> >REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not have any more\n> >gut feeling right now.\n> \n> This is what bisect shows:\n> \n> git bisect start\n> # status: waiting for both good and bad commits\n> # good: [777489f9e09c8d0dd6b12f9d90de6376330577a2] Git 2.47\n> git bisect good 777489f9e09c8d0dd6b12f9d90de6376330577a2\n> # status: waiting for bad commit, 1 good commit known\n> # bad: [063bcebf0c917140ca0e705cbe0fdea127e90086] Git 2.48-rc0\n> \n> git bisect bad 063bcebf0c917140ca0e705cbe0fdea127e90086\n> # bad: [2037ca85ad93ec905b46543df6df4080f6ca258b] worktree: refactor\n> `repair_worktree_after_gitdir_move()`\n> git bisect bad 2037ca85ad93ec905b46543df6df4080f6ca258b\n> # bad: [6a11438f43469f3815f2f0fc997bd45792ff04c0] The fifth batch\n> git bisect bad 6a11438f43469f3815f2f0fc997bd45792ff04c0\n> # bad: [f004467b042d735a2fe8bd5706b053b04b1aec65] Merge branch\n> 'jh/config-unset-doc-fix'\n> git bisect bad f004467b042d735a2fe8bd5706b053b04b1aec65\n> # bad: [e29296745dc92fb03f8f60111b458adc69ff84c5] Merge branch\n> 'sk/doc-maintenance-schedule'\n> git bisect bad e29296745dc92fb03f8f60111b458adc69ff84c5\n> # bad: [5b67cc6477ce88c499caab5ebcebd492ec78932d] reftable/stack: handle\n> allocation failures in auto compaction\n> git bisect bad 5b67cc6477ce88c499caab5ebcebd492ec78932d\n> # good: [31f5b972e0231d4211987775dd58e67815734989] reftable/record: handle\n> allocation failures when decoding records\n> git bisect good 31f5b972e0231d4211987775dd58e67815734989\n> # bad: [18da60029319733e2d931f2758a8e47b8b25b117] reftable/reader: handle\n> allocation failures for unindexed reader\n> git bisect bad 18da60029319733e2d931f2758a8e47b8b25b117\n> # good: [74d1c18757d1a45b95e46836adf478193a34c42c] reftable/writer: handle\n> allocation failures in `reftable_new_writer()`\n> git bisect good 74d1c18757d1a45b95e46836adf478193a34c42c\n\nThis is missing the last step for git-bisect(1). Right now it could be\ncaused by one of these commits:\n\n    18da600293 (reftable/reader: handle allocation failures for unindexed reader, 2024-10-02)\n    802c0646ac (reftable/merged: handle allocation failures in `merged_table_init_iter()`, 2024-10-02)\n\nThe first commit seems quite unlikely to be the root cause. The second\ncommit is rather interesting though. I wonder whether NonStop's malloc\nreturns a NULL pointer when given a size of 0?\n\nA quick stab into the dark, but does below patch on top of `master` make\nthings work for you?\n\nPatrick\n\n-- >8 --\n\ndiff --git a/reftable/merged.c b/reftable/merged.c\nindex bb0836e344..7ae6f78d45 100644\n--- a/reftable/merged.c\n+++ b/reftable/merged.c\n@@ -244,7 +244,7 @@ int merged_table_init_iter(struct reftable_merged_table *mt,\n \tstruct merged_iter *mi = NULL;\n \tint ret;\n \n-\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len);\n+\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len + 1);\n \tif (!subiters) {\n \t\tret = REFTABLE_OUT_OF_MEMORY_ERROR;\n \t\tgoto out;\ndiff --git a/reftable/stack.c b/reftable/stack.c\nindex 59fd695a12..1b6b8cc9ea 100644\n--- a/reftable/stack.c\n+++ b/reftable/stack.c\n@@ -1612,7 +1612,7 @@ static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st)\n \tint overhead = header_size(version) - 1;\n \tuint64_t *sizes;\n \n-\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);\n+\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len + 1);\n \tif (!sizes)\n \t\treturn NULL;\n \n"},{"id":"509453","messageId":"016b01db5325$34c0fd80$9e42f880$@nexbridge.com","threadId":"62647","inReplyTo":"Z2XHfzLEBUfqygBq@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-20T21:21:53Z","receivedAt":"2024-12-20T21:22:10Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 20, 2024 2:38 PM, Patrick Steinhardt wrote:\n>On Fri, Dec 20, 2024 at 02:23:49PM -0500, rsbecker@nexbridge.com wrote:\n>> On December 20, 2024 2:08 AM, Patrick Steinhardt wrote:\n>> >On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com wrote:\n>> >> On December 18, 2024 11:07 AM, I wrote:\n>> >> >All tests, actually.\n>> >> >\n>> >> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh\n>> >> >t0000- basic.sh --verbose -i -x\n>> >> >error: reftable: transaction prepare: out of memory\n>> >> >error: cannot run git init\n>> >>\n>> >> Any updates or hypothesis on this? Our test system has loads of\n>> >> memory\n>> >> - I cannot figure out where the allocation failure takes place.\n>> >> There is a limit to how much memory can be allocated, but it is\n>> >> very high and our virtual memory is extensive, but this is a 32-bit\nbuild.\n>> >\n>> >My hypothesis is that this is caused by ps/reftable-alloc-failures,\n>> >but I\n>> am unable to\n>> >tell where exactly the error comes from. So I'm dependent on your input.\n>> >\n>> >Could you please bisect the error? Finding out where the error is\n>> >raised\n>> would also\n>> >be quite helpful. It has to be one of the reftable functions that\n>> >returns REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not\n>> >have any more gut feeling right now.\n>>\n>> This is what bisect shows:\n>>\n>> git bisect start\n>> # status: waiting for both good and bad commits # good:\n>> [777489f9e09c8d0dd6b12f9d90de6376330577a2] Git 2.47 git bisect good\n>> 777489f9e09c8d0dd6b12f9d90de6376330577a2\n>> # status: waiting for bad commit, 1 good commit known # bad:\n>> [063bcebf0c917140ca0e705cbe0fdea127e90086] Git 2.48-rc0\n>>\n>> git bisect bad 063bcebf0c917140ca0e705cbe0fdea127e90086\n>> # bad: [2037ca85ad93ec905b46543df6df4080f6ca258b] worktree: refactor\n>> `repair_worktree_after_gitdir_move()`\n>> git bisect bad 2037ca85ad93ec905b46543df6df4080f6ca258b\n>> # bad: [6a11438f43469f3815f2f0fc997bd45792ff04c0] The fifth batch git\n>> bisect bad 6a11438f43469f3815f2f0fc997bd45792ff04c0\n>> # bad: [f004467b042d735a2fe8bd5706b053b04b1aec65] Merge branch\n>> 'jh/config-unset-doc-fix'\n>> git bisect bad f004467b042d735a2fe8bd5706b053b04b1aec65\n>> # bad: [e29296745dc92fb03f8f60111b458adc69ff84c5] Merge branch\n>> 'sk/doc-maintenance-schedule'\n>> git bisect bad e29296745dc92fb03f8f60111b458adc69ff84c5\n>> # bad: [5b67cc6477ce88c499caab5ebcebd492ec78932d] reftable/stack:\n>> handle allocation failures in auto compaction git bisect bad\n>> 5b67cc6477ce88c499caab5ebcebd492ec78932d\n>> # good: [31f5b972e0231d4211987775dd58e67815734989] reftable/record:\n>> handle allocation failures when decoding records git bisect good\n>> 31f5b972e0231d4211987775dd58e67815734989\n>> # bad: [18da60029319733e2d931f2758a8e47b8b25b117] reftable/reader:\n>> handle allocation failures for unindexed reader git bisect bad\n>> 18da60029319733e2d931f2758a8e47b8b25b117\n>> # good: [74d1c18757d1a45b95e46836adf478193a34c42c] reftable/writer:\n>> handle allocation failures in `reftable_new_writer()` git bisect good\n>> 74d1c18757d1a45b95e46836adf478193a34c42c\n>\n>This is missing the last step for git-bisect(1). Right now it could be\ncaused by one of\n>these commits:\n>\n>    18da600293 (reftable/reader: handle allocation failures for unindexed\nreader,\n>2024-10-02)\n>    802c0646ac (reftable/merged: handle allocation failures in\n>`merged_table_init_iter()`, 2024-10-02)\n\nThey are there, it is just that Outlook wrapped the lines on me.  The\n802c064 is not in my repo - I bisected from 2.47.0 to 2.48.0-rc0, so may\nhave skipped a more recent commit than rc0 has.\n\n>The first commit seems quite unlikely to be the root cause. The second\ncommit is\n>rather interesting though. I wonder whether NonStop's malloc returns a NULL\n>pointer when given a size of 0?\n>\n>A quick stab into the dark, but does below patch on top of `master` make\nthings\n>work for you?\n>\n>Patrick\n>\n>-- >8 --\n>\n>diff --git a/reftable/merged.c b/reftable/merged.c index\nbb0836e344..7ae6f78d45\n>100644\n>--- a/reftable/merged.c\n>+++ b/reftable/merged.c\n>@@ -244,7 +244,7 @@ int merged_table_init_iter(struct reftable_merged_table\n>*mt,\n> \tstruct merged_iter *mi = NULL;\n> \tint ret;\n>\n>-\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len);\n>+\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len + 1);\n> \tif (!subiters) {\n> \t\tret = REFTABLE_OUT_OF_MEMORY_ERROR;\n> \t\tgoto out;\n>diff --git a/reftable/stack.c b/reftable/stack.c index\n59fd695a12..1b6b8cc9ea\n>100644\n>--- a/reftable/stack.c\n>+++ b/reftable/stack.c\n>@@ -1612,7 +1612,7 @@ static uint64_t\n>*stack_table_sizes_for_compaction(struct reftable_stack *st)\n> \tint overhead = header_size(version) - 1;\n> \tuint64_t *sizes;\n>\n>-\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);\n>+\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len + 1);\n> \tif (!sizes)\n> \t\treturn NULL;\n>\n\nThe fix above does not appear to make any difference.\n\n"},{"id":"509470","messageId":"Z2aroitgFL97dIbZ@pks.im","threadId":"62647","inReplyTo":"016b01db5325$34c0fd80$9e42f880$@nexbridge.com","subject":"Re: [ANNOUNCE] Git v2.48.0-rc0","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-12-21T11:50:58Z","receivedAt":"2024-12-21T11:51:17Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Dec 20, 2024 at 04:21:53PM -0500, rsbecker@nexbridge.com wrote:\n> On December 20, 2024 2:38 PM, Patrick Steinhardt wrote:\n> >On Fri, Dec 20, 2024 at 02:23:49PM -0500, rsbecker@nexbridge.com wrote:\n> >> On December 20, 2024 2:08 AM, Patrick Steinhardt wrote:\n> >> >On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com wrote:\n> >> >> On December 18, 2024 11:07 AM, I wrote:\n> >> >> >All tests, actually.\n> >> >> >\n> >> >> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true sh\n> >> >> >t0000- basic.sh --verbose -i -x\n> >> >> >error: reftable: transaction prepare: out of memory\n> >> >> >error: cannot run git init\n> >> >>\n> >> >> Any updates or hypothesis on this? Our test system has loads of\n> >> >> memory\n> >> >> - I cannot figure out where the allocation failure takes place.\n> >> >> There is a limit to how much memory can be allocated, but it is\n> >> >> very high and our virtual memory is extensive, but this is a 32-bit\n> build.\n> >> >\n> >> >My hypothesis is that this is caused by ps/reftable-alloc-failures,\n> >> >but I\n> >> am unable to\n> >> >tell where exactly the error comes from. So I'm dependent on your input.\n> >> >\n> >> >Could you please bisect the error? Finding out where the error is\n> >> >raised\n> >> would also\n> >> >be quite helpful. It has to be one of the reftable functions that\n> >> >returns REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not\n> >> >have any more gut feeling right now.\n> >>\n> >> This is what bisect shows:\n> >>\n> >> git bisect start\n> >> # status: waiting for both good and bad commits # good:\n> >> [777489f9e09c8d0dd6b12f9d90de6376330577a2] Git 2.47 git bisect good\n> >> 777489f9e09c8d0dd6b12f9d90de6376330577a2\n> >> # status: waiting for bad commit, 1 good commit known # bad:\n> >> [063bcebf0c917140ca0e705cbe0fdea127e90086] Git 2.48-rc0\n> >>\n> >> git bisect bad 063bcebf0c917140ca0e705cbe0fdea127e90086\n> >> # bad: [2037ca85ad93ec905b46543df6df4080f6ca258b] worktree: refactor\n> >> `repair_worktree_after_gitdir_move()`\n> >> git bisect bad 2037ca85ad93ec905b46543df6df4080f6ca258b\n> >> # bad: [6a11438f43469f3815f2f0fc997bd45792ff04c0] The fifth batch git\n> >> bisect bad 6a11438f43469f3815f2f0fc997bd45792ff04c0\n> >> # bad: [f004467b042d735a2fe8bd5706b053b04b1aec65] Merge branch\n> >> 'jh/config-unset-doc-fix'\n> >> git bisect bad f004467b042d735a2fe8bd5706b053b04b1aec65\n> >> # bad: [e29296745dc92fb03f8f60111b458adc69ff84c5] Merge branch\n> >> 'sk/doc-maintenance-schedule'\n> >> git bisect bad e29296745dc92fb03f8f60111b458adc69ff84c5\n> >> # bad: [5b67cc6477ce88c499caab5ebcebd492ec78932d] reftable/stack:\n> >> handle allocation failures in auto compaction git bisect bad\n> >> 5b67cc6477ce88c499caab5ebcebd492ec78932d\n> >> # good: [31f5b972e0231d4211987775dd58e67815734989] reftable/record:\n> >> handle allocation failures when decoding records git bisect good\n> >> 31f5b972e0231d4211987775dd58e67815734989\n> >> # bad: [18da60029319733e2d931f2758a8e47b8b25b117] reftable/reader:\n> >> handle allocation failures for unindexed reader git bisect bad\n> >> 18da60029319733e2d931f2758a8e47b8b25b117\n> >> # good: [74d1c18757d1a45b95e46836adf478193a34c42c] reftable/writer:\n> >> handle allocation failures in `reftable_new_writer()` git bisect good\n> >> 74d1c18757d1a45b95e46836adf478193a34c42c\n> >\n> >This is missing the last step for git-bisect(1). Right now it could be\n> caused by one of\n> >these commits:\n> >\n> >    18da600293 (reftable/reader: handle allocation failures for unindexed\n> reader,\n> >2024-10-02)\n> >    802c0646ac (reftable/merged: handle allocation failures in\n> >`merged_table_init_iter()`, 2024-10-02)\n> \n> They are there, it is just that Outlook wrapped the lines on me.  The\n> 802c064 is not in my repo - I bisected from 2.47.0 to 2.48.0-rc0, so may\n> have skipped a more recent commit than rc0 has.\n> \n> >The first commit seems quite unlikely to be the root cause. The second\n> commit is\n> >rather interesting though. I wonder whether NonStop's malloc returns a NULL\n> >pointer when given a size of 0?\n> >\n> >A quick stab into the dark, but does below patch on top of `master` make\n> things\n> >work for you?\n> >\n> >Patrick\n> >\n> >-- >8 --\n> >\n> >diff --git a/reftable/merged.c b/reftable/merged.c index\n> bb0836e344..7ae6f78d45\n> >100644\n> >--- a/reftable/merged.c\n> >+++ b/reftable/merged.c\n> >@@ -244,7 +244,7 @@ int merged_table_init_iter(struct reftable_merged_table\n> >*mt,\n> > \tstruct merged_iter *mi = NULL;\n> > \tint ret;\n> >\n> >-\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len);\n> >+\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len + 1);\n> > \tif (!subiters) {\n> > \t\tret = REFTABLE_OUT_OF_MEMORY_ERROR;\n> > \t\tgoto out;\n> >diff --git a/reftable/stack.c b/reftable/stack.c index\n> 59fd695a12..1b6b8cc9ea\n> >100644\n> >--- a/reftable/stack.c\n> >+++ b/reftable/stack.c\n> >@@ -1612,7 +1612,7 @@ static uint64_t\n> >*stack_table_sizes_for_compaction(struct reftable_stack *st)\n> > \tint overhead = header_size(version) - 1;\n> > \tuint64_t *sizes;\n> >\n> >-\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);\n> >+\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len + 1);\n> > \tif (!sizes)\n> > \t\treturn NULL;\n> >\n> \n> The fix above does not appear to make any difference.\n\nIndeed, there was one more issue in `reftable_stack_reload_once()`. I\ncould now reproduce those errors by adapting `reftable_malloc()` and\n`reftable_realloc()` to return `NULL` pointers when asked for a\nzero-sized allocation. This removes any implementation-defined behaviour\nof allocators and allowed me to surface the issues.\n\nI've sent a patch series now [1] that should address your issues.\n\n[1]: <20241221-b4-pks-reftable-oom-fix-without-readers-v1-0-12db83a3267c@pks.im>\n\nPatrick\n"},{"id":"509476","messageId":"019701db53ba$a5d67780$f1836680$@nexbridge.com","threadId":"62647","inReplyTo":"Z2aroitgFL97dIbZ@pks.im","subject":"RE: [ANNOUNCE] Git v2.48.0-rc0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2024-12-21T15:11:39Z","receivedAt":"2024-12-21T15:11:48Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On December 21, 2024 6:51 AM, Patrick Steinhardt wrote:\n>On Fri, Dec 20, 2024 at 04:21:53PM -0500, rsbecker@nexbridge.com wrote:\n>> On December 20, 2024 2:38 PM, Patrick Steinhardt wrote:\n>> >On Fri, Dec 20, 2024 at 02:23:49PM -0500, rsbecker@nexbridge.com wrote:\n>> >> On December 20, 2024 2:08 AM, Patrick Steinhardt wrote:\n>> >> >On Thu, Dec 19, 2024 at 03:46:20PM -0500, rsbecker@nexbridge.com\nwrote:\n>> >> >> On December 18, 2024 11:07 AM, I wrote:\n>> >> >> >All tests, actually.\n>> >> >> >\n>> >> >> >$ GIT_TEST_DEFAULT_REF_FORMAT=reftable GIT_TEST_CLONE_2GB=true\n>> >> >> >sh\n>> >> >> >t0000- basic.sh --verbose -i -x\n>> >> >> >error: reftable: transaction prepare: out of memory\n>> >> >> >error: cannot run git init\n>> >> >>\n>> >> >> Any updates or hypothesis on this? Our test system has loads of\n>> >> >> memory\n>> >> >> - I cannot figure out where the allocation failure takes place.\n>> >> >> There is a limit to how much memory can be allocated, but it is\n>> >> >> very high and our virtual memory is extensive, but this is a\n>> >> >> 32-bit\n>> build.\n>> >> >\n>> >> >My hypothesis is that this is caused by\n>> >> >ps/reftable-alloc-failures, but I\n>> >> am unable to\n>> >> >tell where exactly the error comes from. So I'm dependent on your\ninput.\n>> >> >\n>> >> >Could you please bisect the error? Finding out where the error is\n>> >> >raised\n>> >> would also\n>> >> >be quite helpful. It has to be one of the reftable functions that\n>> >> >returns REFTABLE_OUT_OF_MEMORY_ERROR, but other than that I do not\n>> >> >have any more gut feeling right now.\n>> >>\n>> >> This is what bisect shows:\n>> >>\n>> >> git bisect start\n>> >> # status: waiting for both good and bad commits # good:\n>> >> [777489f9e09c8d0dd6b12f9d90de6376330577a2] Git 2.47 git bisect good\n>> >> 777489f9e09c8d0dd6b12f9d90de6376330577a2\n>> >> # status: waiting for bad commit, 1 good commit known # bad:\n>> >> [063bcebf0c917140ca0e705cbe0fdea127e90086] Git 2.48-rc0\n>> >>\n>> >> git bisect bad 063bcebf0c917140ca0e705cbe0fdea127e90086\n>> >> # bad: [2037ca85ad93ec905b46543df6df4080f6ca258b] worktree:\n>> >> refactor `repair_worktree_after_gitdir_move()`\n>> >> git bisect bad 2037ca85ad93ec905b46543df6df4080f6ca258b\n>> >> # bad: [6a11438f43469f3815f2f0fc997bd45792ff04c0] The fifth batch\n>> >> git bisect bad 6a11438f43469f3815f2f0fc997bd45792ff04c0\n>> >> # bad: [f004467b042d735a2fe8bd5706b053b04b1aec65] Merge branch\n>> >> 'jh/config-unset-doc-fix'\n>> >> git bisect bad f004467b042d735a2fe8bd5706b053b04b1aec65\n>> >> # bad: [e29296745dc92fb03f8f60111b458adc69ff84c5] Merge branch\n>> >> 'sk/doc-maintenance-schedule'\n>> >> git bisect bad e29296745dc92fb03f8f60111b458adc69ff84c5\n>> >> # bad: [5b67cc6477ce88c499caab5ebcebd492ec78932d] reftable/stack:\n>> >> handle allocation failures in auto compaction git bisect bad\n>> >> 5b67cc6477ce88c499caab5ebcebd492ec78932d\n>> >> # good: [31f5b972e0231d4211987775dd58e67815734989] reftable/record:\n>> >> handle allocation failures when decoding records git bisect good\n>> >> 31f5b972e0231d4211987775dd58e67815734989\n>> >> # bad: [18da60029319733e2d931f2758a8e47b8b25b117] reftable/reader:\n>> >> handle allocation failures for unindexed reader git bisect bad\n>> >> 18da60029319733e2d931f2758a8e47b8b25b117\n>> >> # good: [74d1c18757d1a45b95e46836adf478193a34c42c] reftable/writer:\n>> >> handle allocation failures in `reftable_new_writer()` git bisect\n>> >> good 74d1c18757d1a45b95e46836adf478193a34c42c\n>> >\n>> >This is missing the last step for git-bisect(1). Right now it could\n>> >be\n>> caused by one of\n>> >these commits:\n>> >\n>> >    18da600293 (reftable/reader: handle allocation failures for\n>> > unindexed\n>> reader,\n>> >2024-10-02)\n>> >    802c0646ac (reftable/merged: handle allocation failures in\n>> >`merged_table_init_iter()`, 2024-10-02)\n>>\n>> They are there, it is just that Outlook wrapped the lines on me.  The\n>> 802c064 is not in my repo - I bisected from 2.47.0 to 2.48.0-rc0, so\n>> may have skipped a more recent commit than rc0 has.\n>>\n>> >The first commit seems quite unlikely to be the root cause. The\n>> >second\n>> commit is\n>> >rather interesting though. I wonder whether NonStop's malloc returns\n>> >a NULL pointer when given a size of 0?\n>> >\n>> >A quick stab into the dark, but does below patch on top of `master`\n>> >make\n>> things\n>> >work for you?\n>> >\n>> >Patrick\n>> >\n>> >-- >8 --\n>> >\n>> >diff --git a/reftable/merged.c b/reftable/merged.c index\n>> bb0836e344..7ae6f78d45\n>> >100644\n>> >--- a/reftable/merged.c\n>> >+++ b/reftable/merged.c\n>> >@@ -244,7 +244,7 @@ int merged_table_init_iter(struct\n>> >reftable_merged_table *mt,\n>> > \tstruct merged_iter *mi = NULL;\n>> > \tint ret;\n>> >\n>> >-\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len);\n>> >+\tREFTABLE_CALLOC_ARRAY(subiters, mt->readers_len + 1);\n>> > \tif (!subiters) {\n>> > \t\tret = REFTABLE_OUT_OF_MEMORY_ERROR;\n>> > \t\tgoto out;\n>> >diff --git a/reftable/stack.c b/reftable/stack.c index\n>> 59fd695a12..1b6b8cc9ea\n>> >100644\n>> >--- a/reftable/stack.c\n>> >+++ b/reftable/stack.c\n>> >@@ -1612,7 +1612,7 @@ static uint64_t\n>> >*stack_table_sizes_for_compaction(struct reftable_stack *st)\n>> > \tint overhead = header_size(version) - 1;\n>> > \tuint64_t *sizes;\n>> >\n>> >-\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);\n>> >+\tREFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len + 1);\n>> > \tif (!sizes)\n>> > \t\treturn NULL;\n>> >\n>>\n>> The fix above does not appear to make any difference.\n>\n>Indeed, there was one more issue in `reftable_stack_reload_once()`. I could\nnow\n>reproduce those errors by adapting `reftable_malloc()` and\n`reftable_realloc()` to\n>return `NULL` pointers when asked for a zero-sized allocation. This removes\nany\n>implementation-defined behaviour of allocators and allowed me to surface\nthe\n>issues.\n>\n>I've sent a patch series now [1] that should address your issues.\n>\n>[1]: <20241221-b4-pks-reftable-oom-fix-without-readers-v1-0-\n>12db83a3267c@pks.im>\n\nThank you, Patrick. This looks like a good and appropriate series to me.\nNonStop\nindeed returns NULL when malloc(0) is invoked.\n--Randall\n\n"}]}