{"thread":{"id":"58904","subject":"[ANNOUNCE] Git v2.39.0-rc2","startedAt":"2022-12-06T04:00:14Z","lastAt":"2022-12-06T04:00:14Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"468603","messageId":"xmqq7cz59o6y.fsf@gitster.g","threadId":"58904","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.39.0-rc2","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-06T04:00:05Z","receivedAt":"2022-12-06T04:00:14Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"A release candidate Git v2.39.0-rc2 is now available for testing at\nthe usual places.  It is comprised of 463 non-merge commits since\nv2.38.0, contributed by 74 people, 30 of which are new 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.39.0-rc2' 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.38.0 are as follows.\nWelcome to the Git development community!\n\n  Alexander Kanavin, Alexander Meshcheryakov, Andreas Hasenack,\n  Anh Le, Arthur Chan, Daniel Sonbolian, Debra Obondo, Diomidis\n  Spinellis, Erik Cervin Edin, Hank Leininger, herr.kaste, John\n  A. Leuenhagen, Julia Ramer, Kevin Backhouse, Kousik Sanagavarapu,\n  Lukáš Doktor, Martin Englund, M Hickford, Michael V. Scovetta,\n  Noah Betzen, Nsengiyumva Wilberforce, orygaw, Ronan Pigott,\n  Rubén Justo, Sotir Danailov, srz_zumix, Stefano Rivera, Tim\n  Jaacks, Vincent Bernat, and Vlad-Stefan Harbuz.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño, Alex Henrie, Derrick\n  Stolee, Đoàn Trần Công Danh, Elijah Newren, Emily Shaffer, Eric\n  DeCosta, Eric Sunshine, Eric Wong, Glen Choo, Han-Wen Nienhuys,\n  Jan Pokorný, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jerry\n  Zhang, Jiang Xin, Johannes Altmanninger, Johannes Schindelin, John\n  Cai, Jonathan Tan, Julien Moutinho, Junio C Hamano, Kyle Meyer,\n  Martin Ågren, Martin von Zweigbergk, Matthew John Cheetham,\n  Michael J Gruber, Michael McClimon, Patrick Steinhardt, Paul\n  Smith, Philip Oakley, Philippe Blain, Phillip Wood, Randall\n  S. Becker, René Scharfe, Sergey Organov, Shaoxuan Yuan, SZEDER\n  Gábor, Taylor Blau, Torsten Bögershausen, and Victoria Dye.\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.39 Release Notes (draft)\n===============================\n\nUI, Workflows & Features\n------------------------\n\n * \"git grep\" learned to expand the sparse-index more lazily and on\n   demand in a sparse checkout.\n\n * By default, use of fsmonitor on a repository on networked\n   filesystem is disabled. Add knobs to make it workable on macOS.\n\n * After checking out a \"branch\" that is a symbolic-ref that points at\n   another branch, \"git symbolic-ref HEAD\" reports the underlying\n   branch, not the symbolic-ref the user gave checkout as argument.\n   The command learned the \"--no-recurse\" option to stop after\n   dereferencing a symbolic-ref only once.\n\n * \"git branch --edit-description @{-1}\" is now a way to edit branch\n   description of the branch you were on before switching to the\n   current branch.\n\n * \"git merge-tree --stdin\" is a new way to request a series of merges\n   and report the merge results.\n\n * \"git shortlog\" learned to group by the \"format\" string.\n\n * A new \"--include-whitespace\" option is added to \"git patch-id\", and\n   existing bugs in the internal patch-id logic that did not match\n   what \"git patch-id\" produces have been corrected.\n\n * Enable gc.cruftpacks by default for those who opt into\n   feature.experimental setting.\n\n * \"git repack\" learns to send cruft objects out of the way into\n   packfiles outside the repository.\n\n * 'scalar reconfigure -a' is taught to automatically remove\n   scalar.repo entires which no longer exist.\n\n * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and\n   others.\n\n * 'git maintenance register' is taught to write configuration to an\n   arbitrary path, and 'git for-each-repo' is taught to expand tilde\n   characters in paths.\n\n * When creating new notes, the template used to get a stray empty\n   newline, which has been removed.\n\n * \"git receive-pack\" used to use all the local refs as the boundary for\n   checking connectivity of the data \"git push\" sent, but now it uses\n   only the refs that it advertised to the pusher. In a repository with\n   the .hideRefs configuration, this reduces the resources needed to\n   perform the check.\n\n * With '--recurse-submodules=on-demand', all submodules are\n   recursively pushed.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * With a bit of header twiddling, use the native regexp library on\n   macOS instead of the compat/ one.\n\n * Prepare for GNU [ef]grep that throw warning of their uses.\n\n * Sources related to fuzz testing have been moved down to their own\n   directory.\n\n * Most credential helpers ignored unknown entries in a credential\n   description, but a few died upon seeing them.  The latter were\n   taught to ignore them, too\n\n * \"scalar unregister\" in a repository that is already been\n   unregistered reported an error.\n\n * Remove error detection from a function that fetches from promisor\n   remotes, and make it die when such a fetch fails to bring all the\n   requested objects, to give an early failure to various operations.\n\n * Update CodingGuidelines to clarify what features to use and avoid\n   in C99.\n\n * Avoid false-positive from LSan whose assumption may be broken with\n   higher optimization levels.\n\n * Enable address and undefined sanitizer tasks at GitHub Actions CI.\n\n * More UNUSED annotation to help using -Wunused option with the\n   compiler.\n   (merge 4b992f0a24 jk/unused-anno-more later to maint).\n\n * Rewrite a deep recursion in the skipping negotiator to use a loop\n   with on-heap prio queue to avoid stack wastage.\n\n * Add documentation for message IDs in fsck error messages.\n\n * Define the logical elements of a \"bundle list\", data structure to\n   store them in-core, format to transfer them, and code to parse\n   them.\n\n * The role the security mailing list plays in an embargoed release\n   has been documented.\n\n * Two new facilities, \"timer\" and \"counter\", are introduced to the\n   trace2 API.\n\n * Code simplification by using strvec_pushf() instead of building an\n   argument in a separate strbuf.\n\n * Make sure generated dependency file is stably sorted to help\n   developers debugging their build issues.\n\n * The glossary entries for \"commit-graph file\" and \"reachability\n   bitmap\" have been added.\n\n * Various tests exercising the transfer.credentialsInUrl\n   configuration are taught to avoid making requests which require\n   resolving localhost to reduce CI-flakiness.\n\n * A redundant diagnostic message is dropped from test_path_is_missing().\n\n * Simplify the run-command API.\n\n * Update the actions/github-script dependency in CI to avoid a\n   deprecation warning.\n\n * Progress on being able to initialize a rev_info struct with a\n   macro.\n\n * Add trace2 counters to the region to clear skip worktree bits in a\n   sparse checkout.\n\n * Modernize test script to avoid \"test -f\" and friends.\n\n * Avoid calling 'cache_tree_update()' when doing so would be\n   redundant.\n\n * Update the credential-cache documentation to provide a more\n   realistic example.\n\n * Makefile comments updates and reordering to clarify knobs used to\n   choose SHA implementations.\n\n * A design document for sparse-checkout's future directions has been\n   added.\n\n * Teach chainlint.pl to annotate the original test definition instead\n   of the token stream.\n\n * \"make coccicheck\" is time consuming. It has been made to run more\n   incrementally.\n\n * `parse_object()` has been hardened to check for the existence of a\n   suspected blob object.\n\n * The build procedure has been adjusted to GNUmake version 4.4, which\n   made some changes to how pattern rule with multiple targets are\n   handled.\n\n\nFixes since v2.38\n-----------------\n\n * The codepath that reads from the index v4 had unaligned memory\n   accesses, which has been corrected.\n\n * Fix messages incorrectly marked for translation.\n\n * \"git fsck\" failed to release contents of tree objects already used\n   from the memory, which has been fixed.\n\n * \"git clone\" did not like to see the \"--bare\" and the \"--origin\"\n   options used together without a good reason.\n\n * \"git remote rename\" failed to rename a remote without fetch\n   refspec, which has been corrected.\n\n * Documentation on various Boolean GIT_* environment variables have\n   been clarified.\n\n * \"git rebase -i\" can mistakenly attempt to apply a fixup to a commit\n   itself, which has been corrected.\n\n * \"git multi-pack-index repack/expire\" used to repack unreachable\n   cruft into a new pack, which have been corrected.\n\n * In read-only repositories, \"git merge-tree\" tried to come up with a\n   merge result tree object, which it failed (which is not wrong) and\n   led to a segfault (which is bad), which has been corrected.\n\n * Force C locale while running tests around httpd to make sure we can\n   find expected error messages in the log.\n\n * Fix a logic in \"mailinfo -b\" that miscomputed the length of a\n   substring, which lead to an out-of-bounds access.\n\n * The codepath to sign learned to report errors when it fails to read\n   from \"ssh-keygen\".\n\n * Code clean-up that results in plugging a leak.\n\n * \"GIT_EDITOR=: git branch --edit-description\" resulted in failure,\n   which has been corrected.\n\n * The code to clean temporary object directories (used for\n   quarantine) tried to remove them inside its signal handler, which\n   was a no-no.\n\n * Update comment in the Makefile about the RUNTIME_PREFIX config knob.\n\n * Clarify that \"the sentence after <area>: prefix does not begin with\n   a capital letter\" rule applies only to the commit title.\n\n * \"git branch --edit-description\" on an unborh branch misleadingly\n   said that no such branch exists, which has been corrected.\n\n * Work around older clang that warns against C99 zero initialization\n   syntax for struct.\n\n * Giving \"--invert-grep\" and \"--all-match\" without \"--grep\" to the\n   \"git log\" command resulted in an attempt to access grep pattern\n   expression structure that has not been allocated, which has been\n   corrected.\n   (merge db84376f98 ab/grep-simplify-extended-expression later to maint).\n\n * \"git diff rev^!\" did not show combined diff to go to the rev from\n   its parents.\n   (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).\n\n * Allow configuration files in \"protected\" scopes to include other\n   configuration files.\n   (merge ecec57b3c9 gc/bare-repo-discovery later to maint).\n\n * Give a bit more diversity to macOS CI by using sha1dc in one of the\n   jobs (the other one tests Apple Common Crypto).\n   (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).\n\n * A bugfix with tracing support in midx codepath\n   (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).\n\n * When geometric repacking feature is in use together with the\n   --pack-kept-objects option, we lost packs marked with .keep files.\n   (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).\n\n * Move a global variable added as a hack during regression fixes to\n   its proper place in the API.\n   (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).\n\n * Update to build procedure with VS using CMake/CTest.\n   (merge c858750b41 js/cmake-updates later to maint).\n\n * The short-help text shown by \"git cmd -h\" and the synopsis text\n   shown at the beginning of \"git help cmd\" have been made more\n   consistent.\n\n * When creating a multi-pack bitmap, remove per-pack bitmap files\n   unconditionally as they will never be consulted.\n   (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).\n\n * Fix a longstanding syntax error in Git.pm error codepath.\n\n * \"git diff --stat\" etc. were invented back when everything was ASCII\n   and strlen() was a way to measure the display width of a string;\n   adjust them to compute the display width assuming UTF-8 pathnames.\n   (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).\n\n * \"git branch --edit-description\" can exit with status -1 which is\n   not a good practice; it learned to use 1 as everybody else instead.\n\n * \"git apply\" limits its input to a bit less than 1 GiB.\n\n * Merging a branch with directory renames into a branch that changes\n   the directory to a symlink was mishandled by the ort merge\n   strategy, which has been corrected.\n\n * A bugfix to \"git subtree\" in its split and merge features.\n\n * Fix some bugs in the reflog messages when rebasing and changes the\n   reflog messages of \"rebase --apply\" to match \"rebase --merge\" with\n   the aim of making the reflog easier to parse.\n\n * \"git rebase --keep-base\" used to discard the commits that are\n   already cherry-picked to the upstream, even when \"keep-base\" meant\n   that the base, on top of which the history is being rebuilt, does\n   not yet include these cherry-picked commits.  The --keep-base\n   option now implies --reapply-cherry-picks and --no-fork-point\n   options.\n\n * The way \"git repack\" creared temporary files when it received a\n   signal was prone to deadlocking, which has been corrected.\n\n * Various tests exercising the transfer.credentialsInUrl\n   configuration are taught to avoid making requests which require\n   resolving localhost to reduce CI-flakiness.\n\n * The adjust_shared_perm() helper function learned to refrain from\n   setting the \"g+s\" bit on directories when it is not necessary.\n\n * \"git archive\" mistakenly complained twice about a missing\n   executable, which has been corrected.\n\n * Fix a bug where `git branch -d` did not work on an orphaned HEAD.\n\n * `git rebase --update-refs` would delete references when all\n   `update-ref` commands in the sequencer were removed, which has been\n   corrected.\n\n * Fix a regression in the bisect-helper which mistakenly treats\n   arguments to the command given to 'git bisect run' as arguments to\n   the helper.\n\n * Correct an error where `git rebase` would mistakenly use a branch or\n   tag named \"refs/rewritten/xyz\" when missing a rebase label.\n\n * Assorted fixes of parsing end-user input as integers.\n   (merge 14770cf0de pw/config-int-parse-fixes later to maint).\n\n * \"git prune\" may try to iterate over .git/objects/pack for trash\n   files to remove in it, and loudly fail when the directory is\n   missing, which is not necessary.  The command has been taught to\n   ignore such a failure.\n   (merge 6974765352 ew/prune-with-missing-objects-pack later to maint).\n\n * Add one more candidate directory that may house httpd modules while\n   running tests.\n   (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint).\n\n * A handful of leaks in the line-log machinery have been plugged.\n\n * The format of a line in /proc/cpuinfo that describes a CPU on s390x\n   looked different from everybody else, and the code in chainlint.pl\n   failed to parse it.\n   (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint).\n\n * Adjust the GitHub CI to newer ubuntu release.\n   (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint).\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 413bc6d20a ds/cmd-main-reorder later to maint).\n   (merge 8d2863e4ed nw/t1002-cleanup later to maint).\n   (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint).\n   (merge 288fcb1c94 zk/push-use-bitmaps later to maint).\n   (merge 42db324c0f km/merge-recursive-typofix later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.38.0 are as follows:\n\nAlejandro R. Sedeño (1):\n      git-compat-util.h: GCC deprecated message arg only in GCC 4.5+\n\nAlex Henrie (2):\n      fsmonitor--daemon: don't translate literal commands\n      push: improve grammar of branch.autoSetupMerge advice\n\nAndreas Hasenack (1):\n      chainlint.pl: fix /proc/cpuinfo regexp\n\nAnh Le (2):\n      index: add trace2 region for clear skip worktree\n      index: raise a bug if the index is materialised more than once\n\nArthur Chan (1):\n      fuzz: reorganise the path for existing oss-fuzz fuzzers\n\nDaniel Sonbolian (1):\n      git.c: improve code readability in cmd_main()\n\nDebra Obondo (1):\n      t7001-mv.sh: modernizing test script using functions\n\nDerrick Stolee (15):\n      maintenance: add 'unregister --force'\n      scalar: make 'unregister' idempotent\n      gc: replace config subprocesses with API calls\n      string-list: document iterator behavior on NULL input\n      bundle-uri: fix technical doc issues\n      bundle-uri: use plain string in find_temp_filename()\n      bundle-uri: create bundle_list struct and helpers\n      bundle-uri: create base key-value pair parsing\n      bundle-uri: parse bundle list in config format\n      bundle-uri: limit recursion depth for bundle lists\n      bundle: properly clear all revision flags\n      bundle-uri: fetch a list of bundles\n      bundle: add flags to verify_bundle()\n      bundle-uri: quiet failed unbundlings\n      bundle-uri: suppress stderr from remote-https\n\nDiomidis Spinellis (1):\n      grep: fix multibyte regex handling under macOS\n\nElijah Newren (4):\n      merge-ort: fix bug with dir rename vs change dir to symlink\n      merge-tree: update documentation for differences in -z output\n      merge-tree: support multiple batched merges with --stdin\n      sparse-checkout.txt: new document with sparse-checkout directions\n\nEmily Shaffer (2):\n      gc: add tests for --cruft and friends\n      config: let feature.experimental imply gc.cruftPacks=true\n\nEric DeCosta (6):\n      fsmonitor: refactor filesystem checks to common interface\n      fsmonitor: relocate socket file if .git directory is remote\n      fsmonitor: avoid socket location check if using hook\n      fsmonitor: deal with synthetic firmlinks on macOS\n      fsmonitor: check for compatability before communicating with fsmonitor\n      fsmonitor: add documentation for allowRemote and socketDir options\n\nEric Sunshine (9):\n      check-non-portable-shell: detect obsolescent egrep/fgrep\n      chainlint: add explanatory comments\n      chainlint: tighten accuracy when consuming input stream\n      chainlint: latch start/end position of each token\n      chainlint: annotate original test definition rather than token stream\n      chainlint: sidestep impoverished macOS \"terminfo\"\n      chainlint: latch line numbers at which each token starts and ends\n      chainlint: prefix annotated test definition with line numbers\n      lib-httpd: extend module location auto-detection\n\nEric Wong (2):\n      delta-islands: free island-related data after use\n      prune: quiet ENOENT on missing directories\n\nGlen Choo (3):\n      config: respect includes in protected config\n      http: redact curl h2h3 headers in info\n      object-file: use real paths when adding alternates\n\nHan-Wen Nienhuys (1):\n      refs: unify parse_worktree_ref() and ref_type()\n\nJean-Noël Avila (1):\n      i18n: fix command template placeholder format\n\nJeff Hostetler (9):\n      config.mak.dev: disable suggest braces error on old clang versions\n      trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx\n      tr2tls: clarify TLS terminology\n      api-trace2.txt: elminate section describing the public trace2 API\n      trace2: rename the thread_name argument to trace2_thread_start\n      trace2: improve thread-name documentation in the thread-context\n      trace2: convert ctx.thread_name from strbuf to pointer\n      trace2: add stopwatch timers\n      trace2: add global counter mechanism\n\nJeff King (43):\n      fsck: free tree buffers after walking unreachable objects\n      fsck: turn off save_commit_buffer\n      parse_object_buffer(): respect save_commit_buffer\n      clone: allow \"--bare\" with \"-o\"\n      remote: handle rename of remote without fetch refspec\n      shell: add basic tests\n      shell: limit size of interactive commands\n      sequencer: detect author name errors in read_author_script()\n      test-submodule: inline resolve_relative_url() function\n      multi-pack-index: avoid writing to global in option callback\n      commit: avoid writing to global in option callback\n      attr: drop DEBUG_ATTR code\n      dir: use fspathncmp() in pl_hashmap_cmp()\n      fsmonitor: fix leak of warning message\n      diffstat_consume(): assert non-zero length\n      submodule--helper: drop unused argc from module_list_compute()\n      update-index: drop unused argc from do_reupdate()\n      mark unused parameters in trivial compat functions\n      object-file: mark unused parameters in hash_unknown functions\n      string-list: mark unused callback parameters\n      date: mark unused parameters in handler functions\n      apply: mark unused parameters in handlers\n      apply: mark unused parameters in noop error/warning routine\n      convert: mark unused parameter in null stream filter\n      diffcore-pickaxe: mark unused parameters in pickaxe functions\n      ll-merge: mark unused parameters in callbacks\n      Makefile: force -O0 when compiling with SANITIZE=leak\n      repack: convert \"names\" util bitfield to array\n      repack: populate extension bits incrementally\n      repack: expand error message for missing pack files\n      repack: use tempfiles for signal cleanup\n      repack: drop remove_temporary_files()\n      Git.pm: trust rev-parse to find bare repositories\n      t7700: annotate cruft-pack failure with ok=sigpipe\n      shortlog: accept `--date`-related options\n      Makefile: force -O0 when compiling with SANITIZE=leak\n      t5516: move plaintext-password tests from t5601 and t5516\n      ref-filter: fix parsing of signatures without blank lines\n      ref-filter: fix parsing of signatures with CRLF and no body\n      branch: gracefully handle '-d' on orphan HEAD\n      t: run t5551 tests with both HTTP and HTTP/2\n      parse_object(): drop extra \"has\" check before checking object type\n      parse_object(): check on-disk type of suspected blob\n\nJerry Zhang (6):\n      patch-id: fix stable patch id for binary / header-only\n      patch-id: use stable patch-id for rebases\n      builtin: patch-id: fix patch-id with binary diffs\n      patch-id: fix patch-id for mode changes\n      builtin: patch-id: add --verbatim as a command mode\n      builtin: patch-id: remove unused diff-tree prefix\n\nJiang Xin (5):\n      t5516: fail to run in verbose mode\n      github-actions: run gcc-8 on ubuntu-20.04 image\n      ci: remove the pipe after \"p4 -V\" to catch errors\n      ci: use the same version of p4 on both Linux and macOS\n      ci: install python on ubuntu\n\nJohannes Altmanninger (1):\n      sequencer: avoid dropping fixup commit that targets self via commit-ish\n\nJohannes Schindelin (11):\n      merge-ort: fix segmentation fault in read-only repositories\n      merge-ort: return early when failing to write a blob\n      cmake: make it easier to diagnose regressions in CTest runs\n      cmake: copy the merge tools for testing\n      add -p: avoid ambiguous signed/unsigned comparison\n      cmake: avoid editing t/test-lib.sh\n      cmake: increase time-out for a long-running test\n      t5516/t5601: be less strict about the number of credential warnings\n      scalar reconfigure -a: remove stale `scalar.repo` entries\n      ci: use a newer `github-script` version\n      tests(scalar): tighten the stale `scalar.repo` test some\n\nJohn Cai (3):\n      tmp-objdir: skip clean up when handling a signal\n      fsck: remove the unused BAD_TAG_OBJECT\n      fsck: document msg-id\n\nJonathan Tan (4):\n      promisor-remote: remove a return value\n      promisor-remote: die upon failing fetch\n      negotiator/skipping: avoid stack overflow\n      Doc: document push.recurseSubmodules=only\n\nJulia Ramer (1):\n      embargoed releases: also describe the git-security list and the process\n\nJunio C Hamano (30):\n      environ: document GIT_SSL_NO_VERIFY\n      environ: explain Boolean environment variables\n      environ: GIT_FLUSH should be made a usual Boolean\n      environ: simplify description of GIT_INDEX_FILE\n      environ: GIT_INDEX_VERSION affects not just a new repository\n      branch: do not fail a no-op --edit-desc\n      SubmittingPatches: use usual capitalization in the log message body\n      Start 2.39 cycle\n      symbolic-ref: teach \"--[no-]recurse\" option\n      The (real) first batch for 2.39\n      The second batch\n      The third batch\n      The fourth batch\n      ci: add address and undefined sanitizer tasks\n      ci: use DC_SHA1=YesPlease on osx-clang job for CI\n      The fifth batch\n      diff: leave NEEDWORK notes in show_stats() function\n      fsck: remove the unused MISSING_TREE_OBJECT\n      Documentation: add lint-fsck-msgids\n      Downmerge a handful of topics for 2.38.2\n      The sixth batch\n      Downmerge a bit more for 2.38.2\n      The seventh batch\n      The eighth batch\n      adjust_shared_perm(): leave g+s alone when the group does not matter\n      Git 2.39-rc0\n      Another batch before -rc1\n      A bit more before -rc1\n      Git 2.39-rc1\n      Git 2.39-rc2\n\nKevin Backhouse (1):\n      alias.c: reject too-long cmdline strings in split_cmdline()\n\nKousik Sanagavarapu (1):\n      repository-version.txt: partialClone casing change\n\nKyle Meyer (1):\n      merge-recursive: fix variable typo in error message\n\nM Hickford (4):\n      Documentation/gitcredentials.txt: mention password alternatives\n      Documentation: increase example cache timeout to 1 hour\n      docs: clarify that credential discards unrecognised attributes\n      Docs: describe how a credential-generating helper works\n\nMartin Ågren (1):\n      test-lib-functions: drop redundant diagnostic print\n\nMatthew John Cheetham (3):\n      wincred: ignore unknown lines (do not die)\n      netrc: ignore unknown lines (do not die)\n      osxkeychain: clarify that we ignore unknown lines\n\nMichael J Gruber (1):\n      notes: avoid empty line in template\n\nMichael McClimon (1):\n      Git.pm: add semicolon after catch statement\n\nNoah Betzen (1):\n      mergetool.txt: typofix 'overwriten' -> 'overwritten'\n\nNsengiyumva Wilberforce (1):\n      t1002: modernize outdated conditional\n\nPatrick Steinhardt (7):\n      refs: fix memory leak when parsing hideRefs config\n      refs: get rid of global list of hidden refs\n      revision: move together exclusion-related functions\n      revision: introduce struct to handle exclusions\n      revision: add new parameter to exclude hidden refs\n      rev-parse: add `--exclude-hidden=` option\n      receive-pack: only use visible refs for connectivity check\n\nPaul Smith (1):\n      Makefile: avoid multiple patterns when recipes generate one file\n\nPhilip Oakley (4):\n      doc: use \"commit-graph\" hyphenation consistently\n      doc: use 'object database' not ODB or abbreviation\n      glossary: add \"commit graph\" description\n      glossary: add reachability bitmap description\n\nPhilippe Blain (9):\n      test-lib-functions: mark 'test_commit' variables as 'local'\n      subtree: use 'git rev-parse --verify [--quiet]' for better error messages\n      subtree: add 'die_incompatible_opt' function to reduce duplication\n      subtree: prefix die messages with 'fatal'\n      subtree: define a variable before its first use in 'find_latest_squash'\n      subtree: use named variables instead of \"$@\" in cmd_pull\n      subtree: process 'git-subtree-split' trailer in separate function\n      subtree: fix squash merging after annotated tag was squashed merged\n      subtree: fix split after annotated tag was squashed merged\n\nPhillip Wood (26):\n      mailinfo -b: fix an out of bounds access\n      ssh signing: return an error when signature cannot be read\n      t3435: remove redundant test case\n      t3416: tighten two tests\n      t3416: set $EDITOR in subshell\n      rebase: be stricter when reading state files containing oids\n      rebase: store orig_head as a commit\n      rebase: rename merge_base to branch_base\n      rebase: factor out branch_base calculation\n      rebase --keep-base: imply --reapply-cherry-picks\n      rebase --keep-base: imply --no-fork-point\n      rebase --apply: remove duplicated code\n      t3406: rework rebase reflog tests\n      rebase --merge: fix reflog when continuing\n      rebase --merge: fix reflog message after skipping\n      rebase --apply: respect GIT_REFLOG_ACTION\n      rebase --apply: make reflog messages match rebase --merge\n      rebase --abort: improve reflog message\n      rebase: cleanup action handling\n      sequencer: stop exporting GIT_REFLOG_ACTION\n      rebase: stop exporting GIT_REFLOG_ACTION\n      git_parse_unsigned: reject negative values\n      config: require at least one digit when parsing numbers\n      git_parse_signed(): avoid integer overflow\n      sequencer: unify label lookup\n      sequencer: tighten label lookups\n\nRené Scharfe (21):\n      revision: use strtol_i() for exclude_parent\n      revisions.txt: unspecify order of resolved parts of ^!\n      diff: support ^! for merges\n      gc: simplify maintenance_task_pack_refs()\n      t/lib-httpd: pass LANG and LC_ALL to Apache\n      bisect--helper: plug strvec leak\n      archive: deduplicate verbose printing\n      submodule: use strvec_pushf() for --super-prefix\n      run-command: fix return value comment\n      am: simplify building \"show\" argument list\n      bisect: simplify building \"checkout\" argument list\n      bisect--helper: factor out do_bisect_run()\n      sequencer: simplify building argument list in do_exec()\n      use child_process member \"args\" instead of string array variable\n      use child_process members \"args\" and \"env\" directly\n      replace and remove run_command_v_opt_cd_env()\n      replace and remove run_command_v_opt_tr2()\n      replace and remove run_command_v_opt_cd_env_tr2()\n      replace and remove run_command_v_opt()\n      archive-tar: report filter start error only once\n      list-objects-filter: plug combine_filter_data leak\n\nRonan Pigott (2):\n      for-each-repo: interpolate repo path arguments\n      maintenance: add option to register in a specific config\n\nRubén Justo (5):\n      ref-filter.c: fix a leak in get_head_description\n      branch: description for non-existent branch errors\n      branch: support for shortcuts like @{-1}, completed\n      branch: error copying or renaming a detached HEAD\n      branch: error code with --edit-description\n\nSZEDER Gábor (4):\n      Documentation/build-docdep.perl: generate sorted output\n      line-log: free diff queue when processing non-merge commits\n      line-log: free the diff queues' arrays when processing merge commits\n      diff.c: use diff_free_queue()\n\nSergey Organov (3):\n      diff-merges: cleanup func_by_opt()\n      diff-merges: cleanup set_diff_merges()\n      diff-merges: clarify log.diffMerges documentation\n\nShaoxuan Yuan (1):\n      builtin/grep.c: integrate with sparse index\n\nSotir Danailov (1):\n      docs: git-send-email: difference between ssl and tls smtp-encryption\n\nTaylor Blau (64):\n      Documentation/git-multi-pack-index.txt: fix typo\n      Documentation/git-multi-pack-index.txt: clarify expire behavior\n      midx.c: prevent `expire` from removing the cruft pack\n      midx.c: avoid cruft packs with `repack --batch-size=0`\n      midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`\n      midx.c: remove unnecessary loop condition\n      midx.c: avoid cruft packs with non-zero `repack --batch-size`\n      builtin/clone.c: disallow `--local` clones with symlinks\n      t/lib-submodule-update.sh: allow local submodules\n      t/t1NNN: allow local submodules\n      t/2NNNN: allow local submodules\n      t/t3NNN: allow local submodules\n      t/t4NNN: allow local submodules\n      t/t5NNN: allow local submodules\n      t/t6NNN: allow local submodules\n      t/t7NNN: allow local submodules\n      t/t9NNN: allow local submodules\n      transport: make `protocol.file.allow` be \"user\" by default\n      t1092: prepare for changing protocol.file.allow\n      t2080: prepare for changing protocol.file.allow\n      t1092: prepare for changing protocol.file.allow\n      t2080: prepare for changing protocol.file.allow\n      t3207: prepare for changing protocol.file.allow\n      t5516: prepare for changing protocol.file.allow\n      t5537: prepare for changing protocol.file.allow\n      t7814: prepare for changing protocol.file.allow\n      t3206: prepare for changing protocol.file.allow\n      t5537: prepare for changing protocol.file.allow\n      Git 2.30.6\n      Git 2.31.5\n      Git 2.32.4\n      Git 2.33.5\n      Git 2.34.5\n      Git 2.35.5\n      Git 2.36.3\n      t7527: prepare for changing protocol.file.allow\n      Git 2.37.4\n      Git 2.38.1\n      midx.c: fix whitespace typo\n      midx.c: consider annotated tags during bitmap selection\n      midx.c: instrument MIDX and bitmap generation with trace2 regions\n      pack-bitmap-write.c: instrument number of reused bitmaps\n      builtin/repack.c: remove redundant pack-based bitmaps\n      repack: don't remove .keep packs with `--pack-kept-objects`\n      builtin/repack.c: pass \"out\" to `prepare_pack_objects`\n      builtin/repack.c: pass \"cruft_expiration\" to `write_cruft_pack`\n      builtin/repack.c: write cruft packs to arbitrary locations\n      builtin/repack.c: implement `--expire-to` for storing pruned objects\n      shortlog: make trailer insertion a noop when appropriate\n      shortlog: extract `--group` fragment for translation\n      shortlog: support arbitrary commit format `--group`s\n      shortlog: extract `shortlog_finish_setup()`\n      shortlog: implement `--group=author` in terms of `--group=<format>`\n      shortlog: implement `--group=committer` in terms of `--group=<format>`\n      apply: reject patches larger than ~1 GiB\n      Documentation/howto/maintain-git.txt: fix Meta/redo-jch.sh invocation\n      The ninth batch\n      Documentation: build redo-jch.sh from master..jch\n      Documentation: build redo-seen.sh from jch..seen\n      The tenth batch\n      The eleventh batch\n      The twelfth batch\n      builtin/gc.c: fix use-after-free in maintenance_unregister()\n      The thirteenth batch\n\nTorsten Bögershausen (1):\n      diff.c: use utf8_strwidth() to count display width\n\nVictoria Dye (7):\n      read-cache: avoid misaligned reads in index v4\n      rebase --update-refs: avoid unintended ref deletion\n      cache-tree: add perf test comparing update and prime\n      unpack-trees: add 'skip_cache_tree_update' option\n      reset: use 'skip_cache_tree_update' option\n      read-tree: use 'skip_cache_tree_update' option\n      rebase: use 'skip_cache_tree_update' option\n\nVincent Bernat (1):\n      ls-files: fix --ignored and --killed flags in synopsis\n\nVlad-Stefan Harbuz (1):\n      Documentation: fix typo\n\nsrz_zumix (1):\n      fsmonitor--daemon: on macOS support symlink\n\nÆvar Arnfjörð Bjarmason (115):\n      test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK\n      CodingGuidelines: update for C99\n      CodingGuidelines: mention dynamic C99 initializer elements\n      CodingGuidelines: allow declaring variables in for loops\n      CodingGuidelines: mention C99 features we can't use\n      grep.c: remove \"extended\" in favor of \"pattern_expression\", fix segfault\n      CodingGuidelines: recommend against unportable C99 struct syntax\n      bundle-uri: create \"key=value\" line parsing\n      bundle-uri: unit test \"key=value\" parsing\n      run-command test helper: use \"else if\" pattern\n      run-command API: have \"run_processes_parallel{,_tr2}()\" return void\n      run-command tests: use \"return\", not \"exit\"\n      run-command API: make \"n\" parameter a \"size_t\"\n      run-command API: don't fall back on online_cpus()\n      run-command.c: use designated init for pp_init(), add \"const\"\n      run-command API: have run_process_parallel() take an \"opts\" struct\n      run-command API: move *_tr2() users to \"run_processes_parallel()\"\n      run-command.c: make \"struct parallel_processes\" const if possible\n      run-command.c: don't copy *_fn to \"struct parallel_processes\"\n      run-command.c: don't copy \"ungroup\" to \"struct parallel_processes\"\n      run-command.c: don't copy \"data\" to \"struct parallel_processes\"\n      run-command.c: use \"opts->processes\", not \"pp->max_processes\"\n      run-command.c: pass \"opts\" further down, and use \"opts->processes\"\n      run-command.c: remove \"max_processes\", add \"const\" to signal() handler\n      tests: assert *.txt SYNOPSIS and -h output\n      CodingGuidelines: update and clarify command-line conventions\n      builtin/bundle.c: indent with tabs\n      bundle: define subcommand -h in terms of command -h\n      doc SYNOPSIS: don't use ' for subcommands\n      doc SYNOPSIS: consistently use ' for commands\n      built-ins: consistently add \"\\n\" between \"usage\" and options\n      doc txt & -h consistency: word-wrap\n      doc txt & -h consistency: fix incorrect alternates syntax\n      doc txt & -h consistency: add \"-z\" to cat-file \"-h\"\n      doc txt & -h consistency: balance unbalanced \"[\" and \"]\"\n      doc txt & -h consistency: correct padding around \"[]()\"\n      stash doc SYNOPSIS & -h: correct padding around \"[]()\"\n      doc txt & -h consistency: use \"<options>\", not \"<options>...\"\n      doc SYNOPSIS & -h: use \"-\" to separate words in labels, not \"_\"\n      doc txt & -h consistency: fix mismatching labels\n      doc txt & -h consistency: add or fix optional \"--\" syntax\n      doc txt & -h consistency: make output order consistent\n      doc txt & -h consistency: add missing options and labels\n      doc txt & -h consistency: make \"rerere\" consistent\n      doc txt & -h consistency: make \"read-tree\" consistent\n      doc txt & -h consistency: make \"bundle\" consistent\n      doc txt & -h consistency: use \"git foo\" form, not \"git-foo\"\n      doc txt & -h consistency: add missing options\n      doc txt & -h consistency: make \"stash\" consistent\n      doc txt & -h consistency: make \"annotate\" consistent\n      doc txt & -h consistency: use \"[<label>...]\" for \"zero or more\"\n      doc txt & -h consistency: make \"diff-tree\" consistent\n      doc txt & -h consistency: make \"commit\" consistent\n      reflog doc: list real subcommands up-front\n      worktree: define subcommand -h in terms of command -h\n      doc txt & -h consistency: make \"worktree\" consistent\n      tests: start asserting that *.txt SYNOPSIS matches -h output\n      tests: assert consistent whitespace in -h output\n      fsmonitor OSX: compile with DC_SHA1=YesPlease\n      merge: remove always-the-same \"verbose\" arguments\n      hook tests: fix redirection logic error in 96e7225b310\n      submodule tests: reset \"trace.out\" between \"grep\" invocations\n      run-command tests: test stdout of run_command_parallel()\n      Makefile + shared.mak: rename and indent $(QUIET_SPATCH_T)\n      cocci rules: remove unused \"F\" metavariable from pending rule\n      Makefile: add ability to TAB-complete cocci *.patch rules\n      Makefile: have \"coccicheck\" re-run if flags change\n      Makefile: split off SPATCH_BATCH_SIZE comment from \"cocci\" heading\n      cocci: split off include-less \"tests\" from SPATCH_FLAGS\n      cocci: split off \"--all-includes\" from SPATCH_FLAGS\n      cocci: make \"coccicheck\" rule incremental\n      cocci: optimistically use COMPUTE_HEADER_DEPENDENCIES\n      Makefile: copy contrib/coccinelle/*.cocci to build/\n      cocci rules: remove <id>'s from rules that don't need them\n      cocci: run against a generated ALL.cocci\n      spatchcache: add a ccache-alike for \"spatch\"\n      Makefile: always (re)set DC_SHA1 on fallback\n      INSTALL: remove discussion of SHA-1 backends\n      Makefile: correct DC_SHA1 documentation\n      Makefile: create and use sections for \"define\" flag listing\n      Makefile: rephrase the discussion of *_SHA1 knobs\n      Makefile: document default SHA-256 backend\n      Makefile: document SHA-1 and SHA-256 default and selection order\n      Makefile & test-tool: replace \"DC_SHA1\" variable with a \"define\"\n      Makefile: document default SHA-1 backend on OSX\n      Makefile: discuss SHAttered in *_SHA{1,256} discussion\n      submodule--helper: move \"config\" to a test-tool\n      submodule tests: add tests for top-level flag output\n      submodule--helper: fix a memory leak in \"status\"\n      submodule tests: test for a \"foreach\" blind-spot\n      submodule.c: refactor recursive block out of absorb function\n      submodule API & \"absorbgitdirs\": remove \"----recursive\" option\n      submodule--helper: remove --prefix from \"absorbgitdirs\"\n      submodule--helper: drop \"update --prefix <pfx>\" for \"-C <pfx> update\"\n      submodule--helper: use OPT_SUBCOMMAND() API\n      revisions API: extend the nascent REV_INFO_INIT macro\n      t7610: fix flaky timeout issue, don't clone from example.com\n      Makefile: don't create a \".build/.build/\" for cocci, fix output\n      maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement\n      t7610: use \"file:///dev/null\", not \"/dev/null\", fixes MinGW\n      cache.h: remove unused \"the_index\" compat macros\n      builtin/{grep,log}.: don't define \"USE_THE_INDEX_COMPATIBILITY_MACROS\"\n      cocci & cache.h: remove rarely used \"the_index\" compat macros\n      read-cache API & users: make discard_index() return void\n      cocci: add a index-compatibility.pending.cocci\n      cocci & cache.h: apply a selection of \"pending\" index-compatibility\n      cocci & cache.h: apply variable section of \"pending\" index-compatibility\n      cocci: apply \"pending\" index-compatibility to \"t/helper/*.c\"\n      {builtin/*,repository}.c: add & use \"USE_THE_INDEX_VARIABLE\"\n      cache.h & test-tool.h: add & use \"USE_THE_INDEX_VARIABLE\"\n      cocci: apply \"pending\" index-compatibility to some \"builtin/*.c\"\n      parse_object(): simplify blob conditional\n      trace2 tests: guard pthread test with \"PTHREAD\"\n      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4\n      cocci: avoid \"should ... be a metavariable\" warnings\n\nĐoàn Trần Công Danh (8):\n      CodingGuidelines: allow grep -E\n      t: remove \\{m,n\\} from BRE grep usage\n      t: convert egrep usage to \"grep -E\"\n      t: convert fgrep usage to \"grep -F\"\n      Makefile: clarify runtime relative gitexecdir\n      bisect--helper: remove unused options\n      bisect--helper: move all subcommands into their own functions\n      bisect--helper: parse subcommand with OPT_SUBCOMMAND\n\n"}]}