Git fork
at reftables-rust 438 lines 18 kB view raw
1Git 2.34 Release Notes 2====================== 3 4Updates since Git 2.33 5---------------------- 6 7Backward compatibility notes 8 9 * The "--preserve-merges" option of "git rebase" has been removed. 10 11 12UI, Workflows & Features 13 14 * Pathname expansion (like "~username/") learned a way to specify a 15 location relative to Git installation (e.g. its $sharedir which is 16 $(prefix)/share), with "%(prefix)". 17 18 * The `ort` strategy is used instead of `recursive` as the default 19 merge strategy. 20 21 * The userdiff pattern for "java" language has been updated. 22 23 * "git rebase" by default skips changes that are equivalent to 24 commits that are already in the history the branch is rebased onto; 25 give messages when this happens to let the users be aware of 26 skipped commits, and also teach them how to tell "rebase" to keep 27 duplicated changes. 28 29 * The advice message that "git cherry-pick" gives when it asks 30 conflicted replay of a commit to be resolved by the end user has 31 been updated. 32 33 * After "git clone --recurse-submodules", all submodules are cloned 34 but they are not by default recursed into by other commands. With 35 submodule.stickyRecursiveClone configuration set, submodule.recurse 36 configuration is set to true in a repository created by "clone" 37 with "--recurse-submodules" option. 38 39 * The logic for auto-correction of misspelt subcommands learned to go 40 interactive when the help.autocorrect configuration variable is set 41 to 'prompt'. 42 43 * "git maintenance" scheduler learned to use systemd timers as a 44 possible backend. 45 46 * "git diff --submodule=diff" showed failure from run_command() when 47 trying to run diff inside a submodule, when the user manually 48 removes the submodule directory. 49 50 * "git bundle unbundle" learned to show progress display. 51 52 * In cone mode, the sparse-index code path learned to remove ignored 53 files (like build artifacts) outside the sparse cone, allowing the 54 entire directory outside the sparse cone to be removed, which is 55 especially useful when the sparse patterns change. 56 57 * Taking advantage of the CGI interface, http-backend has been 58 updated to enable protocol v2 automatically when the other side 59 asks for it. 60 61 * The credential-cache helper has been adjusted to Windows. 62 63 * The error in "git help no-such-git-command" is handled better. 64 65 * The unicode character width table (used for output alignment) has 66 been updated. 67 68 * The ref iteration code used to optionally allow dangling refs to be 69 shown, which has been tightened up. 70 71 * "git add", "git mv", and "git rm" have been adjusted to avoid 72 updating paths outside of the sparse-checkout definition unless 73 the user specifies a "--sparse" option. 74 75 * "git repack" has been taught to generate multi-pack reachability 76 bitmaps. 77 78 * "git fsck" has been taught to report mismatch between expected and 79 actual types of an object better. 80 81 * In addition to GnuPG, ssh public crypto can be used for object and 82 push-cert signing. Note that this feature cannot be used with 83 ssh-keygen from OpenSSH 8.7, whose support for it is broken. Avoid 84 using it unless you update to OpenSSH 8.8. 85 86 * "git log --grep=string --author=name" learns to highlight hits just 87 like "git grep string" does. 88 89 90 91Performance, Internal Implementation, Development Support etc. 92 93 * "git bisect" spawned "git show-branch" only to pretty-print the 94 title of the commit after checking out the next version to be 95 tested; this has been rewritten in C. 96 97 * "git add" can work better with the sparse index. 98 99 * Support for ancient versions of cURL library (pre 7.19.4) has been 100 dropped. 101 102 * A handful of tests that assumed implementation details of files 103 backend for refs have been cleaned up. 104 105 * trace2 logs learned to show parent process name to see in what 106 context Git was invoked. 107 108 * Loading of ref tips to prepare for common ancestry negotiation in 109 "git fetch-pack" has been optimized by taking advantage of the 110 commit graph when available. 111 112 * Remind developers that the userdiff patterns should be kept simple 113 and permissive, assuming that the contents they apply are always 114 syntactically correct. 115 116 * The current implementation of GIT_TEST_FAIL_PREREQS is broken in 117 that checking for the lack of a prerequisite would not work. Avoid 118 the use of "if ! test_have_prereq X" in a test script. 119 120 * The revision traversal API has been optimized by taking advantage 121 of the commit-graph, when available, to determine if a commit is 122 reachable from any of the existing refs. 123 124 * "git fetch --quiet" optimization to avoid useless computation of 125 info that will never be displayed. 126 127 * Callers from older advice_config[] based API has been updated to 128 use the newer advice_if_enabled() and advice_enabled() API. 129 130 * Teach "test_pause" and "debug" helpers to allow using the HOME and 131 TERM environment variables the user usually uses. 132 133 * "make INSTALL_STRIP=-s install" allows the installation step to use 134 "install -s" to strip the binaries as they get installed. 135 136 * Code that handles large number of refs in the "git fetch" code 137 path has been optimized. 138 139 * The reachability bitmap file used to be generated only for a single 140 pack, but now we've learned to generate bitmaps for history that 141 span across multiple packfiles. 142 143 * The code to make "git grep" recurse into submodules has been 144 updated to migrate away from the "add submodule's object store as 145 an alternate object store" mechanism (which is suboptimal). 146 147 * The tracing of process ancestry information has been enhanced. 148 149 * Reduce number of write(2) system calls while sending the 150 ref advertisement. 151 152 * Update the build procedure to use the "-pedantic" build when 153 DEVELOPER makefile macro is in effect. 154 155 * Large part of "git submodule add" gets rewritten in C. 156 157 * The run-command API has been updated so that the callers can easily 158 ask the file descriptors open for packfiles to be closed immediately 159 before spawning commands that may trigger auto-gc. 160 161 * An oddball OPTION_ARGUMENT feature has been removed from the 162 parse-options API. 163 164 * The mergesort implementation used to sort linked list has been 165 optimized. 166 167 * Remove external declaration of functions that no longer exist. 168 169 * "git multi-pack-index write --bitmap" learns to propagate the 170 hashcache from original bitmap to resulting bitmap. 171 172 * CI learns to run the leak sanitizer builds. 173 174 * "git grep --recurse-submodules" takes trees and blobs from the 175 submodule repository, but the textconv settings when processing a 176 blob from the submodule is not taken from the submodule repository. 177 A test is added to demonstrate the issue, without fixing it. 178 179 * Teach "git help -c" into helping the command line completion of 180 configuration variables. 181 182 * When "git cmd -h" shows more than one line of usage text (e.g. 183 the cmd subcommand may take sub-sub-command), parse-options API 184 learned to align these lines, even across i18n/l10n. 185 186 * Prevent "make sparse" from running for the source files that 187 haven't been modified. 188 189 * The code path to write a new version of .midx multi-pack index files 190 has learned to release the mmaped memory holding the current 191 version of .midx before removing them from the disk, as some 192 platforms do not allow removal of a file that still has mapping. 193 194 * A new feature has been added to abort early in the test framework. 195 196 197Fixes since v2.33 198----------------- 199 200 * Input validation of "git pack-objects --stdin-packs" has been 201 corrected. 202 203 * Bugfix for common ancestor negotiation recently introduced in "git 204 push" code path. 205 206 * "git pull" had various corner cases that were not well thought out 207 around its --rebase backend, e.g. "git pull --ff-only" did not stop 208 but went ahead and rebased when the history on other side is not a 209 descendant of our history. The series tries to fix them up. 210 211 * "git apply" miscounted the bytes and failed to read to the end of 212 binary hunks. 213 214 * "git range-diff" code clean-up. 215 216 * "git commit --fixup" now works with "--edit" again, after it was 217 broken in v2.32. 218 219 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the 220 new version has a blocker bug for that architecture. 221 222 * Checking out all the paths from HEAD during the last conflicted 223 step in "git rebase" and continuing would cause the step to be 224 skipped (which is expected), but leaves MERGE_MSG file behind in 225 $GIT_DIR and confuses the next "git commit", which has been 226 corrected. 227 228 * Various bugs in "git rebase -r" have been fixed. 229 230 * mmap() imitation used to call xmalloc() that dies upon malloc() 231 failure, which has been corrected to just return an error to the 232 caller to be handled. 233 234 * "git diff --relative" segfaulted and/or produced incorrect result 235 when there are unmerged paths. 236 237 * The delayed checkout code path in "git checkout" etc. were chatty 238 even when --quiet and/or --no-progress options were given. 239 240 * "git branch -D <branch>" used to refuse to remove a broken branch 241 ref that points at a missing commit, which has been corrected. 242 243 * Build update for Apple clang. 244 245 * The parser for the "--nl" option of "git column" has been 246 corrected. 247 248 * "git upload-pack" which runs on the other side of "git fetch" 249 forgot to take the ref namespaces into account when handling 250 want-ref requests. 251 252 * The sparse-index support can corrupt the index structure by storing 253 a stale and/or uninitialized data, which has been corrected. 254 255 * Buggy tests could damage repositories outside the throw-away test 256 area we created. We now by default export GIT_CEILING_DIRECTORIES 257 to limit the damage from such a stray test. 258 259 * Even when running "git send-email" without its own threaded 260 discussion support, a threading related header in one message is 261 carried over to the subsequent message to result in an unwanted 262 threading, which has been corrected. 263 264 * The output from "git fast-export", when its anonymization feature 265 is in use, showed an annotated tag incorrectly. 266 267 * Recent "diff -m" changes broke "gitk", which has been corrected. 268 269 * The "git apply -3" code path learned not to bother the lower level 270 merge machinery when the three-way merge can be trivially resolved 271 without the content level merge. This fixes a regression caused by 272 recent "-3way first and fall back to direct application" change. 273 274 * The code that optionally creates the *.rev reverse index file has 275 been optimized to avoid needless computation when it is not writing 276 the file out. 277 278 * "git range-diff -I... <range> <range>" segfaulted, which has been 279 corrected. 280 281 * The order in which various files that make up a single (conceptual) 282 packfile has been reevaluated and straightened up. This matters in 283 correctness, as an incomplete set of files must not be shown to a 284 running Git. 285 286 * The "mode" word is useless in a call to open(2) that does not 287 create a new file. Such a call in the files backend of the ref 288 subsystem has been cleaned up. 289 290 * "git update-ref --stdin" failed to flush its output as needed, 291 which potentially led the conversation to a deadlock. 292 293 * When "git am --abort" fails to abort correctly, it still exited 294 with exit status of 0, which has been corrected. 295 296 * Correct nr and alloc members of strvec struct to be of type size_t. 297 298 * "git stash", where the tentative change involves changing a 299 directory to a file (or vice versa), was confused, which has been 300 corrected. 301 302 * "git clone" from a repository whose HEAD is unborn into a bare 303 repository didn't follow the branch name the other side used, which 304 is corrected. 305 306 * "git cvsserver" had a long-standing bug in its authentication code, 307 which has finally been corrected (it is unclear and is a separate 308 question if anybody is seriously using it, though). 309 310 * "git difftool --dir-diff" mishandled symbolic links. 311 312 * Sensitive data in the HTTP trace were supposed to be redacted, but 313 we failed to do so in HTTP/2 requests. 314 315 * "make clean" has been updated to remove leftover .depend/ 316 directories, even when it is not told to use them to compute header 317 dependencies. 318 319 * Protocol v0 clients can get stuck parsing a malformed feature line. 320 321 * A few kinds of changes "git status" can show were not documented. 322 (merge d2a534c515 ja/doc-status-types-and-copies later to maint). 323 324 * The mergesort implementation used to sort linked list has been 325 optimized. 326 (merge c90cfc225b rs/mergesort later to maint). 327 328 * An editor session launched during a Git operation (e.g. during 'git 329 commit') can leave the terminal in a funny state. The code path 330 has updated to save the terminal state before, and restore it 331 after, it spawns an editor. 332 (merge 3d411afabc cm/save-restore-terminal later to maint). 333 334 * "git cat-file --batch" with the "--batch-all-objects" option is 335 supposed to iterate over all the objects found in a repository, but 336 it used to translate these object names using the replace mechanism, 337 which defeats the point of enumerating all objects in the repository. 338 This has been corrected. 339 (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint). 340 341 * Recent sparse-index work broke safety against attempts to add paths 342 with trailing slashes to the index, which has been corrected. 343 (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint). 344 345 * The "--color-lines" and "--color-by-age" options of "git blame" 346 have been missing, which are now documented. 347 (merge 8c32856133 bs/doc-blame-color-lines later to maint). 348 349 * The PATH used in CI job may be too wide and let incompatible dlls 350 to be grabbed, which can cause the build&test to fail. Tighten it. 351 (merge 7491ef6198 js/windows-ci-path-fix later to maint). 352 353 * Avoid performance measurements from getting ruined by gc and other 354 housekeeping pauses interfering in the middle. 355 (merge be79131a53 rs/disable-gc-during-perf-tests later to maint). 356 357 * Stop "git add --dry-run" from creating new blob and tree objects. 358 (merge e578d0311d rs/add-dry-run-without-objects later to maint). 359 360 * "git commit" gave duplicated error message when the object store 361 was unwritable, which has been corrected. 362 (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint). 363 364 * Recent sparse-index addition, namely any use of index_name_pos(), 365 can expand sparse index entries and breaks any code that walks 366 cache-tree or existing index entries. One such instance of such a 367 breakage has been corrected. 368 369 * The xxdiff difftool backend can exit with status 128, which the 370 difftool-helper that launches the backend takes as a significant 371 failure, when it is not significant at all. Work it around. 372 (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint). 373 374 * Improve test framework around unwritable directories. 375 (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint). 376 377 * "git push" client talking to an HTTP server did not diagnose the 378 lack of the final status report from the other side correctly, 379 which has been corrected. 380 (merge c5c3486f38 jk/http-push-status-fix later to maint). 381 382 * Update "git archive" documentation and give explicit mention on the 383 compression level for both zip and tar.gz format. 384 (merge c4b208c309 bs/archive-doc-compression-level later to maint). 385 386 * Drop "git sparse-checkout" from the list of common commands. 387 (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint). 388 389 * "git branch -c/-m new old" was not described to copy config, which 390 has been corrected. 391 (merge 8252ec300e jc/branch-copy-doc later to maint). 392 393 * Squelch over-eager warning message added during this cycle. 394 395 * Fix long-standing shell syntax error in the completion script. 396 (merge 46b0585286 re/completion-fix-test-equality later to maint). 397 398 * Teach "git commit-graph" command not to allow using replace objects 399 at all, as we do not use the commit-graph at runtime when we see 400 object replacement. 401 (merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint). 402 403 * "git pull --no-verify" did not affect the underlying "git merge". 404 (merge 47bfdfb3fd ar/fix-git-pull-no-verify later to maint). 405 406 * One CI task based on Fedora image noticed a not-quite-kosher 407 construct recently, which has been corrected. 408 409 * "git pull --ff-only" and "git pull --rebase --ff-only" should make 410 it a no-op to attempt pulling from a remote that is behind us, but 411 instead the command errored out by saying it was impossible to 412 fast-forward, which may technically be true, but not a useful thing 413 to diagnose as an error. This has been corrected. 414 (merge 361cb52383 jc/fix-pull-ff-only-when-already-up-to-date later to maint). 415 416 * The way Cygwin emulates a unix-domain socket, on top of which the 417 simple-ipc mechanism is implemented, can race with the program on 418 the other side that wants to use the socket, and briefly make it 419 appear as a regular file before lstat(2) starts reporting it as a 420 socket. We now have a workaround on the side that connects to a 421 unix domain socket. 422 423 * Other code cleanup, docfix, build fix, etc. 424 (merge f188160be9 ab/bundle-remove-verbose-option later to maint). 425 (merge 8c6b4332b4 rs/close-pack-leakfix later to maint). 426 (merge 51b04c05b7 bs/difftool-msg-tweak later to maint). 427 (merge dd20e4a6db ab/make-compdb-fix later to maint). 428 (merge 6ffb990dc4 os/status-docfix later to maint). 429 (merge 100c2da2d3 rs/p3400-lose-tac later to maint). 430 (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint). 431 (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint). 432 (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint). 433 (merge ec9a37d69b ab/pkt-line-cleanup later to maint). 434 (merge 8650c6298c ab/fix-make-lint-docs later to maint). 435 (merge 1c720357ce ab/test-lib-diff-cleanup later to maint). 436 (merge 6b615dbece ks/submodule-add-message-fix later to maint). 437 (merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint). 438 (merge 559664c792 ab/test-lib later to maint).