| 1 | Git v2.51 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | ------------------------ |
| 6 | |
| 7 | * Userdiff patterns for the R language have been added. |
| 8 | |
| 9 | * Documentation for "git send-email" has been updated with a bit more |
| 10 | credential helper and OAuth information. |
| 11 | |
| 12 | * "git cat-file --batch" learns to understand %(objectmode) atom to |
| 13 | allow the caller to tell missing objects (due to repository |
| 14 | corruption) and submodules (whose commit objects are OK to be |
| 15 | missing) apart. |
| 16 | |
| 17 | * "git diff --no-index dirA dirB" can limit the comparison with |
| 18 | pathspec at the end of the command line, just like normal "git |
| 19 | diff". |
| 20 | |
| 21 | * "git subtree" (in contrib/) learned to grok GPG signing its commits. |
| 22 | |
| 23 | * "git whatchanged" that is longer to type than "git log --raw" |
| 24 | which is its modern rough equivalent has outlived its usefulness |
| 25 | more than 10 years ago. Plan to deprecate and remove it. |
| 26 | |
| 27 | * An interchange format for stash entries is defined, and subcommand |
| 28 | of "git stash" to import/export has been added. |
| 29 | |
| 30 | * "git merge/pull" has been taught the "--compact-summary" option to |
| 31 | use the compact-summary format, intead of diffstat, when showing |
| 32 | the summary of the incoming changes. |
| 33 | |
| 34 | * "git imap-send" has been broken for a long time, which has been |
| 35 | resurrected and then taught to talk OAuth2.0 etc. |
| 36 | |
| 37 | * Some error messages from "git imap-send" has been updated. |
| 38 | |
| 39 | * When "git daemon" sees a signal while attempting to accept() a new |
| 40 | client, instead of retrying, it skipped it by mistake, which has |
| 41 | been corrected. |
| 42 | |
| 43 | * The reftable ref backend has matured enough; Git 3.0 will make it |
| 44 | the default format in a newly created repositories by default. |
| 45 | |
| 46 | * "netrc" credential helper has been improved to understand textual |
| 47 | service names (like smtp) in addition to the numeric port numbers |
| 48 | (like 25). |
| 49 | |
| 50 | * Lift the limitation to use changed-path filter in "git log" so that |
| 51 | it can be used for a pathspec with multiple literal paths. |
| 52 | |
| 53 | * Clean up the way how signature on commit objects are exported to |
| 54 | and imported from fast-import stream. |
| 55 | |
| 56 | * Remove unsupported, unused, and unsupportable old option from "git |
| 57 | log". |
| 58 | |
| 59 | * Document recently added "git imap-send --list" with an example. |
| 60 | |
| 61 | * "git pull" learned to pay attention to pull.autostash configuration |
| 62 | variable, which overrides rebase/merge.autostash. |
| 63 | |
| 64 | * "git for-each-ref" learns "--start-after" option to help |
| 65 | applications that want to page its output. |
| 66 | |
| 67 | * "git switch" and "git restore" are declared to be no longer |
| 68 | experimental. |
| 69 | |
| 70 | * "git -c alias.foo=bar foo -h baz" reported "'foo' is aliased to |
| 71 | 'bar'" and then went on to run "git foo -h baz", which was |
| 72 | unexpected. Tighten the rule so that alias expansion is reported |
| 73 | only when "-h" is the sole option. |
| 74 | |
| 75 | |
| 76 | Performance, Internal Implementation, Development Support etc. |
| 77 | -------------------------------------------------------------- |
| 78 | |
| 79 | * "git pack-objects" learned to find delta bases from blobs at the |
| 80 | same path, using the --path-walk API. |
| 81 | |
| 82 | * CodingGuidelines update. |
| 83 | |
| 84 | * Add settings for Solaris 10 & 11. |
| 85 | |
| 86 | * Meson-based build/test framework now understands TAP output |
| 87 | generated by our tests. |
| 88 | |
| 89 | * "Do not explicitly initialize to zero" rule has been clarified in |
| 90 | the CodingGuidelines document. |
| 91 | |
| 92 | * A test helper "test_seq" function learned the "-f <fmt>" option, |
| 93 | which allowed us to simplify a lot of test scripts. |
| 94 | |
| 95 | * A lot of stale stuff has been removed from the contrib/ hierarchy. |
| 96 | |
| 97 | * "git push" and "git fetch" are taught to update refs in batches to |
| 98 | gain performance. |
| 99 | |
| 100 | * Some code paths in "git prune" used to ignore the passed-in |
| 101 | repository object and used the `the_repository` singleton instance |
| 102 | instead, which has been corrected. |
| 103 | |
| 104 | * Update ".clang-format" and ".editorconfig" to match our style guide |
| 105 | a bit better. |
| 106 | |
| 107 | * "make coccicheck" succeeds even when spatch made suggestions, which |
| 108 | has been updated to fail in such a case. |
| 109 | |
| 110 | * Code clean-up around object access API. |
| 111 | |
| 112 | * Define .precision to more canned parse-options type to avoid bugs |
| 113 | coming from using a variable with a wrong type to capture the |
| 114 | parsed values. |
| 115 | |
| 116 | * Flipping the default hash function to SHA-256 at Git 3.0 boundary |
| 117 | is planned. |
| 118 | |
| 119 | * Declare weather-balloon we raised for "bool" type 18 months ago a |
| 120 | success and officially allow using the type in our codebase. |
| 121 | |
| 122 | * GIT_TEST_INSTALLED was not honored in the recent topic related to |
| 123 | SHA256 hashes, which has been corrected. |
| 124 | |
| 125 | * The pop_most_recent_commit() function can have quite expensive |
| 126 | worst case performance characteristics, which has been optimized by |
| 127 | using prio-queue data structure. |
| 128 | |
| 129 | * Move structure definition from unrelated header file to where it |
| 130 | belongs. |
| 131 | |
| 132 | * To help our developers, document what C99 language features are |
| 133 | being considered for adoption, in addition to what past experiments |
| 134 | have already decided. |
| 135 | |
| 136 | * The reftable unit tests are now ported to the "clar" unit testing |
| 137 | framework. |
| 138 | |
| 139 | * Redefine where the multi-pack-index sits in the object subsystem, |
| 140 | which recently was restructured to allow multiple backends that |
| 141 | support a single object source that belongs to one repository. A |
| 142 | MIDX does span multiple "object sources". |
| 143 | |
| 144 | * Reduce implicit assumption and dependence on the_repository in the |
| 145 | object-file subsystem. |
| 146 | |
| 147 | |
| 148 | Fixes since v2.50 |
| 149 | ----------------- |
| 150 | |
| 151 | Unless otherwise noted, all the changes in 2.50.X maintenance track, |
| 152 | including security updates, are included in this release. |
| 153 | |
| 154 | * A memory-leak in an error code path has been plugged. |
| 155 | (merge 7082da85cb ly/commit-graph-graph-write-leakfix later to maint). |
| 156 | |
| 157 | * A memory-leak in an error code path has been plugged. |
| 158 | (merge aedebdb6b9 ly/fetch-pack-leakfix later to maint). |
| 159 | |
| 160 | * Some leftover references to documentation source files that no |
| 161 | longer exist, due to recent ".txt" -> ".adoc" renaming, have been |
| 162 | corrected. |
| 163 | (merge 3717a5775a jw/doc-txt-to-adoc-refs later to maint). |
| 164 | |
| 165 | * "git stash -p <pathspec>" improvements. |
| 166 | (merge 468817bab2 pw/stash-p-pathspec-fixes later to maint). |
| 167 | |
| 168 | * "git send-email" incremented its internal message counter when a |
| 169 | message was edited, which made logic that treats the first message |
| 170 | specially misbehave, which has been corrected. |
| 171 | (merge 2cc27b3501 ag/send-email-edit-threading-fix later to maint). |
| 172 | |
| 173 | * "git stash" recorded a wrong branch name when submodules are |
| 174 | present in the current checkout, which has been corrected. |
| 175 | (merge ffb36c64f2 kj/stash-onbranch-submodule-fix later to maint). |
| 176 | |
| 177 | * When asking to apply mailmap to both author and committer field |
| 178 | while showing a commit object, the field that appears later was not |
| 179 | correctly parsed and replaced, which has been corrected. |
| 180 | (merge abf94a283f sa/multi-mailmap-fix later to maint). |
| 181 | |
| 182 | * "git maintenance" lacked the care "git gc" had to avoid holding |
| 183 | onto the repository lock for too long during packing refs, which |
| 184 | has been remedied. |
| 185 | (merge 1b5074e614 ps/maintenance-ref-lock later to maint). |
| 186 | |
| 187 | * Avoid regexp_constraint and instead use comparison_constraint when |
| 188 | listing functions to exclude from application of coccinelle rules, |
| 189 | as spatch can be built with different regexp engine X-<. |
| 190 | (merge f2ad545813 jc/cocci-avoid-regexp-constraint later to maint). |
| 191 | |
| 192 | * Updating submodules from the upstream did not work well when |
| 193 | submodule's HEAD is detached, which has been improved. |
| 194 | (merge ca62f524c1 jk/submodule-remote-lookup-cleanup later to maint). |
| 195 | |
| 196 | * Remove unnecessary check from "git daemon" code. |
| 197 | (merge 0c856224d2 cb/daemon-fd-check-fix later to maint). |
| 198 | |
| 199 | * Use of sysctl() system call to learn the total RAM size used on |
| 200 | BSDs has been corrected. |
| 201 | (merge 781c1cf571 cb/total-ram-bsd-fix later to maint). |
| 202 | |
| 203 | * Drop FreeBSD 4 support and declare that we support only FreeBSD 12 |
| 204 | or later, which has memmem() supported. |
| 205 | (merge 0392f976a7 bs/config-mak-freebsd later to maint). |
| 206 | |
| 207 | * A diff-filter with negative-only specification like "git log |
| 208 | --diff-filter=d" did not trigger correctly, which has been fixed. |
| 209 | (merge 375ac087c5 jk/all-negative-diff-filter-fix later to maint). |
| 210 | |
| 211 | * A failure to open the index file for writing due to conflicting |
| 212 | access did not state what went wrong, which has been corrected. |
| 213 | (merge 9455397a5c hy/read-cache-lock-error-fix later to maint). |
| 214 | |
| 215 | * Tempfile removal fix in the codepath to sign commits with SSH keys. |
| 216 | (merge 4498127b04 re/ssh-sign-buffer-fix later to maint). |
| 217 | |
| 218 | * Code and test clean-up around string-list API. |
| 219 | (merge 6e5b26c3ff sj/string-list later to maint). |
| 220 | |
| 221 | * "git apply -N" should start from the current index and register |
| 222 | only new files, but it instead started from an empty index, which |
| 223 | has been corrected. |
| 224 | (merge 2b49d97fcb rp/apply-intent-to-add-fix later to maint). |
| 225 | |
| 226 | * Leakfix with a new and a bit invasive test on pack-bitmap files. |
| 227 | (merge bfd5522e98 ly/load-bitmap-leakfix later to maint). |
| 228 | |
| 229 | * "git fetch --prune" used to be O(n^2) expensive when there are many |
| 230 | refs, which has been corrected. |
| 231 | (merge 87d8d8c5d0 ph/fetch-prune-optim later to maint). |
| 232 | |
| 233 | * When a ref creation at refs/heads/foo/bar fails, the files backend |
| 234 | now removes refs/heads/foo/ if the directory is otherwise not used. |
| 235 | (merge a3a7f20516 ps/refs-files-remove-empty-parent later to maint). |
| 236 | |
| 237 | * "pack-objects" has been taught to avoid pointing into objects in |
| 238 | cruft packs from midx. |
| 239 | |
| 240 | * "git remote" now detects remote names that overlap with each other |
| 241 | (e.g., remote nickname "outer" and "outer/inner" are used at the |
| 242 | same time), as it will lead to overlapping remote-tracking |
| 243 | branches. |
| 244 | (merge a5a727c448 jk/remote-avoid-overlapping-names later to maint). |
| 245 | |
| 246 | * The gpg.program configuration variable, which names a pathname to |
| 247 | the (custom) GPG compatible program, can now be spelled with ~tilde |
| 248 | expansion. |
| 249 | (merge 7d275cd5c0 jb/gpg-program-variable-is-a-pathname later to maint). |
| 250 | |
| 251 | * Our <sane-ctype.h> header file relied on that the system-supplied |
| 252 | <ctype.h> header is not later included, which would override our |
| 253 | macro definitions, but "amazon linux" broke this assumption. Fix |
| 254 | this by preemptively including <ctype.h> near the beginning of |
| 255 | <sane-ctype.h> ourselves. |
| 256 | (merge 9d3b33125f ps/sane-ctype-workaround later to maint). |
| 257 | |
| 258 | * Clean-up compat/bswap.h mess. |
| 259 | (merge f4ac32c03a ss/compat-bswap-revamp later to maint). |
| 260 | |
| 261 | * Meson-based build did not handle libexecdir setting correctly, |
| 262 | which has been corrected. |
| 263 | (merge 056dbe8612 rj/meson-libexecdir-fix later to maint). |
| 264 | |
| 265 | * Document that we do not require "real" name when signing your |
| 266 | patches off. |
| 267 | (merge 1f0fed312a bc/contribution-under-non-real-names later to maint). |
| 268 | |
| 269 | * "git commit" that concludes a conflicted merge failed to notice and remove |
| 270 | existing comment added automatically (like "# Conflicts:") when the |
| 271 | core.commentstring is set to 'auto'. |
| 272 | (merge 92b7c7c9f5 ac/auto-comment-char-fix later to maint). |
| 273 | |
| 274 | * "git rebase -i" with bogus rebase.instructionFormat configuration |
| 275 | failed to produce the todo file after recording the state files, |
| 276 | leading to confused "git status"; this has been corrected. |
| 277 | (merge ade14bffd7 ow/rebase-verify-insn-fmt-before-initializing-state later to maint). |
| 278 | |
| 279 | * A few file descriptors left unclosed upon program completion in a |
| 280 | few test helper programs are now closed. |
| 281 | (merge 0f1b33815b hl/test-helper-fd-close later to maint). |
| 282 | |
| 283 | * Interactive prompt code did not correctly strip CRLF from the end |
| 284 | of line on Windows. |
| 285 | (merge 711a20827b js/prompt-crlf-fix later to maint). |
| 286 | |
| 287 | * The config API had a set of convenience wrapper functions that |
| 288 | implicitly use the_repository instance; they have been removed and |
| 289 | inlined at the calling sites. |
| 290 | |
| 291 | * "git add/etc -p" now honor the diff.context configuration variable, |
| 292 | and also they learn to honor the -U<n> command-line option. |
| 293 | (merge 2b3ae04011 lm/add-p-context later to maint). |
| 294 | |
| 295 | * The case where a new submodule takes a path where there used to be a |
| 296 | completely different subproject is now dealt with a bit better than |
| 297 | before. |
| 298 | (merge 5ed8c5b465 kj/renamed-submodule later to maint). |
| 299 | |
| 300 | * The deflate codepath in "git archive --format=zip" had a |
| 301 | longstanding bug coming from misuse of zlib API, which has been |
| 302 | corrected. |
| 303 | |
| 304 | * Other code cleanup, docfix, build fix, etc. |
| 305 | (merge b257adb571 lo/my-first-ow-doc-update later to maint). |
| 306 | (merge 8b34b6a220 ly/sequencer-update-squash-is-fixup-only later to maint). |
| 307 | (merge 5dceb8bd05 ly/do-not-localize-bug-messages later to maint). |
| 308 | (merge 61372dd613 ly/commit-buffer-reencode-leakfix later to maint). |
| 309 | (merge 81cd1eef7d ly/pack-bitmap-root-leakfix later to maint). |
| 310 | (merge bfc9f9cc64 ly/submodule-update-failure-leakfix later to maint). |
| 311 | (merge 65dff89c6b ma/doc-diff-cc-headers later to maint). |
| 312 | (merge efb61591ee jm/bundle-uri-debug-output-to-fp later to maint). |
| 313 | (merge a3d278bb64 ly/prepare-show-merge-leakfix later to maint). |
| 314 | (merge 1fde1c5daf ac/preload-index-wo-the-repository later to maint). |
| 315 | (merge 855cfc65ae rm/t2400-modernize later to maint). |
| 316 | (merge 2939494284 ly/run-builtin-use-passed-in-repo later to maint). |
| 317 | (merge ff73f375bb jg/mailinfo-leakfix later to maint). |
| 318 | (merge 996f14c02b jj/doc-branch-markup-fix later to maint). |
| 319 | (merge 1e77de1864 cb/ci-freebsd-update-to-14.3 later to maint). |
| 320 | (merge b0e9d25865 jk/fix-leak-send-pack later to maint). |
| 321 | (merge f3a9558c8c bs/remote-helpers-doc-markup-fix later to maint). |
| 322 | (merge c4e9775c60 kh/doc-config-subcommands later to maint). |
| 323 | (merge de404249ab ps/perlless-test-fixes later to maint). |
| 324 | (merge 953049eed8 ts/merge-orig-head-doc-fix later to maint). |
| 325 | (merge 0c83bbc704 rj/freebsd-sysinfo-build-fix later to maint). |
| 326 | (merge ad7780b38f ps/doc-pack-refs-auto-with-files-backend-fix later to maint). |
| 327 | (merge f4fa8a3687 rh/doc-glob-pathspec-fix later to maint). |
| 328 | (merge b27be108c8 ja/doc-git-log-markup later to maint). |
| 329 | (merge 14d7583beb pw/config-kvi-remove-path later to maint). |
| 330 | (merge f31abb421d jc/do-not-scan-argv-without-parsing later to maint). |
| 331 | (merge 26552cb62a jk/unleak-reflog-expire-entry later to maint). |
| 332 | (merge 339d95fda9 jc/ci-print-test-failures-fix later to maint). |
| 333 | (merge 8c3add51a8 cb/meson-avoid-broken-macos-pcre2 later to maint). |
| 334 | (merge 5247da07b8 ps/meson-clar-decls-fix later to maint). |
| 335 | (merge f3ef347bb2 ch/t7450-recursive-clone-test-fix later to maint). |
| 336 | (merge 4ac3302a1a jc/doc-release-vs-clear later to maint). |
| 337 | (merge 3bdd897413 ms/meson-with-ancient-git-wo-ls-files-dedup later to maint). |
| 338 | (merge cca758d324 kh/doc-fast-import-historical later to maint). |
| 339 | (merge 9b0781196a jc/test-hashmap-is-still-here later to maint). |
| 340 | (merge 1bad05bacc jk/revert-squelch-compiler-warning later to maint). |
| 341 | (merge 3a7e783d9c dl/squelch-maybe-uninitialized later to maint). |