| 1 | Git v2.39 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | ------------------------ |
| 6 | |
| 7 | * "git grep" learned to expand the sparse-index more lazily and on |
| 8 | demand in a sparse checkout. |
| 9 | |
| 10 | * By default, use of fsmonitor on a repository on networked |
| 11 | filesystem is disabled. Add knobs to make it workable on macOS. |
| 12 | |
| 13 | * After checking out a "branch" that is a symbolic-ref that points at |
| 14 | another branch, "git symbolic-ref HEAD" reports the underlying |
| 15 | branch, not the symbolic-ref the user gave checkout as argument. |
| 16 | The command learned the "--no-recurse" option to stop after |
| 17 | dereferencing a symbolic-ref only once. |
| 18 | |
| 19 | * "git branch --edit-description @{-1}" is now a way to edit branch |
| 20 | description of the branch you were on before switching to the |
| 21 | current branch. |
| 22 | |
| 23 | * "git merge-tree --stdin" is a new way to request a series of merges |
| 24 | and report the merge results. |
| 25 | |
| 26 | * "git shortlog" learned to group by the "format" string. |
| 27 | |
| 28 | * A new "--include-whitespace" option is added to "git patch-id", and |
| 29 | existing bugs in the internal patch-id logic that did not match |
| 30 | what "git patch-id" produces have been corrected. |
| 31 | |
| 32 | * Enable gc.cruftpacks by default for those who opt into |
| 33 | feature.experimental setting. |
| 34 | |
| 35 | * "git repack" learns to send cruft objects out of the way into |
| 36 | packfiles outside the repository. |
| 37 | |
| 38 | * 'scalar reconfigure -a' is taught to automatically remove |
| 39 | scalar.repo entires which no longer exist. |
| 40 | |
| 41 | * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and |
| 42 | others. |
| 43 | |
| 44 | * 'git maintenance register' is taught to write configuration to an |
| 45 | arbitrary path, and 'git for-each-repo' is taught to expand tilde |
| 46 | characters in paths. |
| 47 | |
| 48 | * When creating new notes, the template used to get a stray empty |
| 49 | newline, which has been removed. |
| 50 | |
| 51 | * "git receive-pack" used to use all the local refs as the boundary for |
| 52 | checking connectivity of the data "git push" sent, but now it uses |
| 53 | only the refs that it advertised to the pusher. In a repository with |
| 54 | the .hideRefs configuration, this reduces the resources needed to |
| 55 | perform the check. |
| 56 | |
| 57 | * With '--recurse-submodules=on-demand', all submodules are |
| 58 | recursively pushed. |
| 59 | |
| 60 | |
| 61 | Performance, Internal Implementation, Development Support etc. |
| 62 | -------------------------------------------------------------- |
| 63 | |
| 64 | * With a bit of header twiddling, use the native regexp library on |
| 65 | macOS instead of the compat/ one. |
| 66 | |
| 67 | * Prepare for GNU [ef]grep that throw warning of their uses. |
| 68 | |
| 69 | * Sources related to fuzz testing have been moved down to their own |
| 70 | directory. |
| 71 | |
| 72 | * Most credential helpers ignored unknown entries in a credential |
| 73 | description, but a few died upon seeing them. The latter were |
| 74 | taught to ignore them, too |
| 75 | |
| 76 | * "scalar unregister" in a repository that is already been |
| 77 | unregistered reported an error. |
| 78 | |
| 79 | * Remove error detection from a function that fetches from promisor |
| 80 | remotes, and make it die when such a fetch fails to bring all the |
| 81 | requested objects, to give an early failure to various operations. |
| 82 | |
| 83 | * Update CodingGuidelines to clarify what features to use and avoid |
| 84 | in C99. |
| 85 | |
| 86 | * Avoid false-positive from LSan whose assumption may be broken with |
| 87 | higher optimization levels. |
| 88 | |
| 89 | * Enable address and undefined sanitizer tasks at GitHub Actions CI. |
| 90 | |
| 91 | * More UNUSED annotation to help using -Wunused option with the |
| 92 | compiler. |
| 93 | (merge 4b992f0a24 jk/unused-anno-more later to maint). |
| 94 | |
| 95 | * Rewrite a deep recursion in the skipping negotiator to use a loop |
| 96 | with on-heap prio queue to avoid stack wastage. |
| 97 | |
| 98 | * Add documentation for message IDs in fsck error messages. |
| 99 | |
| 100 | * Define the logical elements of a "bundle list", data structure to |
| 101 | store them in-core, format to transfer them, and code to parse |
| 102 | them. |
| 103 | |
| 104 | * The role the security mailing list plays in an embargoed release |
| 105 | has been documented. |
| 106 | |
| 107 | * Two new facilities, "timer" and "counter", are introduced to the |
| 108 | trace2 API. |
| 109 | |
| 110 | * Code simplification by using strvec_pushf() instead of building an |
| 111 | argument in a separate strbuf. |
| 112 | |
| 113 | * Make sure generated dependency file is stably sorted to help |
| 114 | developers debugging their build issues. |
| 115 | |
| 116 | * The glossary entries for "commit-graph file" and "reachability |
| 117 | bitmap" have been added. |
| 118 | |
| 119 | * Various tests exercising the transfer.credentialsInUrl |
| 120 | configuration are taught to avoid making requests which require |
| 121 | resolving localhost to reduce CI-flakiness. |
| 122 | |
| 123 | * A redundant diagnostic message is dropped from test_path_is_missing(). |
| 124 | |
| 125 | * Simplify the run-command API. |
| 126 | |
| 127 | * Update the actions/github-script dependency in CI to avoid a |
| 128 | deprecation warning. |
| 129 | |
| 130 | * Progress on being able to initialize a rev_info struct with a |
| 131 | macro. |
| 132 | |
| 133 | * Add trace2 counters to the region to clear skip worktree bits in a |
| 134 | sparse checkout. |
| 135 | |
| 136 | * Modernize test script to avoid "test -f" and friends. |
| 137 | |
| 138 | * Avoid calling 'cache_tree_update()' when doing so would be |
| 139 | redundant. |
| 140 | |
| 141 | * Update the credential-cache documentation to provide a more |
| 142 | realistic example. |
| 143 | |
| 144 | * Makefile comments updates and reordering to clarify knobs used to |
| 145 | choose SHA implementations. |
| 146 | |
| 147 | * A design document for sparse-checkout's future directions has been |
| 148 | added. |
| 149 | |
| 150 | * Teach chainlint.pl to annotate the original test definition instead |
| 151 | of the token stream. |
| 152 | |
| 153 | * "make coccicheck" is time consuming. It has been made to run more |
| 154 | incrementally. |
| 155 | |
| 156 | * `parse_object()` has been hardened to check for the existence of a |
| 157 | suspected blob object. |
| 158 | |
| 159 | * The build procedure has been adjusted to GNUmake version 4.4, which |
| 160 | made some changes to how pattern rule with multiple targets are |
| 161 | handled. |
| 162 | |
| 163 | |
| 164 | Fixes since v2.38 |
| 165 | ----------------- |
| 166 | |
| 167 | * The codepath that reads from the index v4 had unaligned memory |
| 168 | accesses, which has been corrected. |
| 169 | |
| 170 | * Fix messages incorrectly marked for translation. |
| 171 | |
| 172 | * "git fsck" failed to release contents of tree objects already used |
| 173 | from the memory, which has been fixed. |
| 174 | |
| 175 | * "git clone" did not like to see the "--bare" and the "--origin" |
| 176 | options used together without a good reason. |
| 177 | |
| 178 | * "git remote rename" failed to rename a remote without fetch |
| 179 | refspec, which has been corrected. |
| 180 | |
| 181 | * Documentation on various Boolean GIT_* environment variables have |
| 182 | been clarified. |
| 183 | |
| 184 | * "git rebase -i" can mistakenly attempt to apply a fixup to a commit |
| 185 | itself, which has been corrected. |
| 186 | |
| 187 | * "git multi-pack-index repack/expire" used to repack unreachable |
| 188 | cruft into a new pack, which have been corrected. |
| 189 | |
| 190 | * In read-only repositories, "git merge-tree" tried to come up with a |
| 191 | merge result tree object, which it failed (which is not wrong) and |
| 192 | led to a segfault (which is bad), which has been corrected. |
| 193 | |
| 194 | * Force C locale while running tests around httpd to make sure we can |
| 195 | find expected error messages in the log. |
| 196 | |
| 197 | * Fix a logic in "mailinfo -b" that miscomputed the length of a |
| 198 | substring, which lead to an out-of-bounds access. |
| 199 | |
| 200 | * The codepath to sign learned to report errors when it fails to read |
| 201 | from "ssh-keygen". |
| 202 | |
| 203 | * Code clean-up that results in plugging a leak. |
| 204 | |
| 205 | * "GIT_EDITOR=: git branch --edit-description" resulted in failure, |
| 206 | which has been corrected. |
| 207 | |
| 208 | * The code to clean temporary object directories (used for |
| 209 | quarantine) tried to remove them inside its signal handler, which |
| 210 | was a no-no. |
| 211 | |
| 212 | * Update comment in the Makefile about the RUNTIME_PREFIX config knob. |
| 213 | |
| 214 | * Clarify that "the sentence after <area>: prefix does not begin with |
| 215 | a capital letter" rule applies only to the commit title. |
| 216 | |
| 217 | * "git branch --edit-description" on an unborn branch misleadingly |
| 218 | said that no such branch exists, which has been corrected. |
| 219 | |
| 220 | * Work around older clang that warns against C99 zero initialization |
| 221 | syntax for struct. |
| 222 | |
| 223 | * Giving "--invert-grep" and "--all-match" without "--grep" to the |
| 224 | "git log" command resulted in an attempt to access grep pattern |
| 225 | expression structure that has not been allocated, which has been |
| 226 | corrected. |
| 227 | (merge db84376f98 ab/grep-simplify-extended-expression later to maint). |
| 228 | |
| 229 | * "git diff rev^!" did not show combined diff to go to the rev from |
| 230 | its parents. |
| 231 | (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint). |
| 232 | |
| 233 | * Allow configuration files in "protected" scopes to include other |
| 234 | configuration files. |
| 235 | (merge ecec57b3c9 gc/bare-repo-discovery later to maint). |
| 236 | |
| 237 | * Give a bit more diversity to macOS CI by using sha1dc in one of the |
| 238 | jobs (the other one tests Apple Common Crypto). |
| 239 | (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint). |
| 240 | |
| 241 | * A bugfix with tracing support in midx codepath |
| 242 | (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint). |
| 243 | |
| 244 | * When geometric repacking feature is in use together with the |
| 245 | --pack-kept-objects option, we lost packs marked with .keep files. |
| 246 | (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint). |
| 247 | |
| 248 | * Move a global variable added as a hack during regression fixes to |
| 249 | its proper place in the API. |
| 250 | (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint). |
| 251 | |
| 252 | * Update to build procedure with VS using CMake/CTest. |
| 253 | (merge c858750b41 js/cmake-updates later to maint). |
| 254 | |
| 255 | * The short-help text shown by "git cmd -h" and the synopsis text |
| 256 | shown at the beginning of "git help cmd" have been made more |
| 257 | consistent. |
| 258 | |
| 259 | * When creating a multi-pack bitmap, remove per-pack bitmap files |
| 260 | unconditionally as they will never be consulted. |
| 261 | (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint). |
| 262 | |
| 263 | * Fix a longstanding syntax error in Git.pm error codepath. |
| 264 | |
| 265 | * "git diff --stat" etc. were invented back when everything was ASCII |
| 266 | and strlen() was a way to measure the display width of a string; |
| 267 | adjust them to compute the display width assuming UTF-8 pathnames. |
| 268 | (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint). |
| 269 | |
| 270 | * "git branch --edit-description" can exit with status -1 which is |
| 271 | not a good practice; it learned to use 1 as everybody else instead. |
| 272 | |
| 273 | * "git apply" limits its input to a bit less than 1 GiB. |
| 274 | |
| 275 | * Merging a branch with directory renames into a branch that changes |
| 276 | the directory to a symlink was mishandled by the ort merge |
| 277 | strategy, which has been corrected. |
| 278 | |
| 279 | * A bugfix to "git subtree" in its split and merge features. |
| 280 | |
| 281 | * Fix some bugs in the reflog messages when rebasing and changes the |
| 282 | reflog messages of "rebase --apply" to match "rebase --merge" with |
| 283 | the aim of making the reflog easier to parse. |
| 284 | |
| 285 | * "git rebase --keep-base" used to discard the commits that are |
| 286 | already cherry-picked to the upstream, even when "keep-base" meant |
| 287 | that the base, on top of which the history is being rebuilt, does |
| 288 | not yet include these cherry-picked commits. The --keep-base |
| 289 | option now implies --reapply-cherry-picks and --no-fork-point |
| 290 | options. |
| 291 | |
| 292 | * The way "git repack" created temporary files when it received a |
| 293 | signal was prone to deadlocking, which has been corrected. |
| 294 | |
| 295 | * Various tests exercising the transfer.credentialsInUrl |
| 296 | configuration are taught to avoid making requests which require |
| 297 | resolving localhost to reduce CI-flakiness. |
| 298 | |
| 299 | * The adjust_shared_perm() helper function learned to refrain from |
| 300 | setting the "g+s" bit on directories when it is not necessary. |
| 301 | |
| 302 | * "git archive" mistakenly complained twice about a missing |
| 303 | executable, which has been corrected. |
| 304 | |
| 305 | * Fix a bug where `git branch -d` did not work on an orphaned HEAD. |
| 306 | |
| 307 | * `git rebase --update-refs` would delete references when all |
| 308 | `update-ref` commands in the sequencer were removed, which has been |
| 309 | corrected. |
| 310 | |
| 311 | * Fix a regression in the bisect-helper which mistakenly treats |
| 312 | arguments to the command given to 'git bisect run' as arguments to |
| 313 | the helper. |
| 314 | |
| 315 | * Correct an error where `git rebase` would mistakenly use a branch or |
| 316 | tag named "refs/rewritten/xyz" when missing a rebase label. |
| 317 | |
| 318 | * Assorted fixes of parsing end-user input as integers. |
| 319 | (merge 14770cf0de pw/config-int-parse-fixes later to maint). |
| 320 | |
| 321 | * "git prune" may try to iterate over .git/objects/pack for trash |
| 322 | files to remove in it, and loudly fail when the directory is |
| 323 | missing, which is not necessary. The command has been taught to |
| 324 | ignore such a failure. |
| 325 | (merge 6974765352 ew/prune-with-missing-objects-pack later to maint). |
| 326 | |
| 327 | * Add one more candidate directory that may house httpd modules while |
| 328 | running tests. |
| 329 | (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint). |
| 330 | |
| 331 | * A handful of leaks in the line-log machinery have been plugged. |
| 332 | |
| 333 | * The format of a line in /proc/cpuinfo that describes a CPU on s390x |
| 334 | looked different from everybody else, and the code in chainlint.pl |
| 335 | failed to parse it. |
| 336 | (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint). |
| 337 | |
| 338 | * Adjust the GitHub CI to newer ubuntu release. |
| 339 | (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint). |
| 340 | |
| 341 | * Other code cleanup, docfix, build fix, etc. |
| 342 | (merge 413bc6d20a ds/cmd-main-reorder later to maint). |
| 343 | (merge 8d2863e4ed nw/t1002-cleanup later to maint). |
| 344 | (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint). |
| 345 | (merge 288fcb1c94 zk/push-use-bitmaps later to maint). |
| 346 | (merge 42db324c0f km/merge-recursive-typofix later to maint). |