| Git v2.43 Release Notes | 
 | ======================= | 
 |  | 
 | Backward Compatibility Notes | 
 |  | 
 |  * The "--rfc" option of "git format-patch" used to be a valid way to | 
 |    override an earlier "--subject-prefix=<something>" on the command | 
 |    line and replace it with "[RFC PATCH]", but from this release, it | 
 |    merely prefixes the string "RFC " in front of the given subject | 
 |    prefix.  If you are negatively affected by this change, please use | 
 |    "--subject-prefix=PATCH --rfc" as a replacement. | 
 |  | 
 |  * "git rev-list --stdin" learned to take non-revisions (like "--not") | 
 |    recently from the standard input, but the way such a "--not" was | 
 |    handled was quite confusing, which has been rethought.  The updated | 
 |    rule is that "--not" given from the command line only affects revs | 
 |    given from the command line that comes but not revs read from the | 
 |    standard input, and "--not" read from the standard input affects | 
 |    revs given from the standard input and not revs given from the | 
 |    command line. | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * A message written in olden time prevented a branch from getting | 
 |    checked out saying it is already checked out elsewhere, but these | 
 |    days, we treat a branch that is being bisected or rebased just like | 
 |    a branch that is checked out and protect it.  Rephrase the message | 
 |    to say that the branch is in use. | 
 |  | 
 |  * Hourly and other schedule of "git maintenance" jobs are randomly | 
 |    distributed now. | 
 |  | 
 |  * "git cmd -h" learned to signal which options can be negated by | 
 |    listing such options like "--[no-]opt". | 
 |  | 
 |  * The way authentication related data other than passwords (e.g. | 
 |    oath token and password expiration data) are stored in libsecret | 
 |    keyrings has been rethought. | 
 |  | 
 |  * Update the libsecret and wincred credential helpers to correctly | 
 |    match which credential to erase; they erased the wrong entry in | 
 |    some cases. | 
 |  | 
 |  * Git GUI updates. | 
 |  | 
 |  * "git format-patch" learns a way to feed cover letter description, | 
 |    that (1) can be used on detached HEAD where there is no branch | 
 |    description available, and (2) also can override the branch | 
 |    description if there is one. | 
 |  | 
 |  * Use of --max-pack-size to allow multiple packfiles to be created is | 
 |    now supported even when we are sending unreachable objects to cruft | 
 |    packs. | 
 |  | 
 |  * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the | 
 |    "--subject-prefix" option and used "[RFC PATCH]"; now we will add | 
 |    "RFC" prefix to whatever subject prefix is specified. | 
 |  | 
 |  * "git log --format" has been taught the %(decorate) placeholder. | 
 |  | 
 |  * The default log message created by "git revert", when reverting a | 
 |    commit that records a revert, has been tweaked, to encourage people | 
 |    describe complex "revert of revert of revert" situation better in | 
 |    their own words. | 
 |  | 
 |  * The command-line completion support (in contrib/) learned to | 
 |    complete "git commit --trailer=" for possible trailer keys. | 
 |  | 
 |  * "git update-index" learns "--show-index-version" to inspect | 
 |    the index format version used by the on-disk index file. | 
 |  | 
 |  * "git diff" learned diff.statNameWidth configuration variable, to | 
 |    give the default width for the name part in the "--stat" output. | 
 |  | 
 |  * "git range-diff --notes=foo" compared "log --notes=foo --notes" of | 
 |    the two ranges, instead of using just the specified notes tree. | 
 |  | 
 |  * The command line completion script (in contrib/) can be told to | 
 |    complete aliases by including ": git <cmd> ;" in the alias to tell | 
 |    it that the alias should be completed similar to how "git <cmd>" is | 
 |    completed.  The parsing code for the alias as been loosened to | 
 |    allow ';' without an extra space before it. | 
 |  | 
 |  * "git for-each-ref" and friends learned to apply mailmap to | 
 |    authorname and other fields. | 
 |  | 
 |  * "git repack" machinery learns to pay attention to the "--filter=" | 
 |    option. | 
 |  | 
 |  * "git repack" learned "--max-cruft-size" to prevent cruft packs from | 
 |    growing without bounds. | 
 |  | 
 |  * "git merge-tree" learned to take strategy backend specific options | 
 |    via the "-X" option, like "git merge" does. | 
 |  | 
 |  * "git log" and friends learned "--dd" that is a short-hand for | 
 |    "--diff-merges=first-parent -p". | 
 |  | 
 |  * The attribute subsystem learned to honor `attr.tree` configuration | 
 |    that specifies which tree to read the .gitattributes files from. | 
 |  | 
 |  | 
 | Performance, Internal Implementation, Development Support etc. | 
 |  | 
 |  * "git check-attr" has been taught to work better with sparse-index. | 
 |  | 
 |  * It may be tempting to leave the help text NULL for a command line | 
 |    option that is either hidden or too obvious, but "git subcmd -h" | 
 |    and "git subcmd --help-all" would have segfaulted if done so.  Now | 
 |    the help text is optional. | 
 |  | 
 |  * Tests that are known to pass with LSan are now marked as such. | 
 |  | 
 |  * Flaky "git p4" tests, as well as "git svn" tests, are now skipped | 
 |    in the (rather expensive) sanitizer CI job. | 
 |  | 
 |  * Tests with LSan from time to time seem to emit harmless message | 
 |    that makes our tests unnecessarily flaky; we work it around by | 
 |    filtering the uninteresting output. | 
 |  | 
 |  * Unused parameters to functions are marked as such, and/or removed, | 
 |    in order to bring us closer to -Wunused-parameter clean. | 
 |  | 
 |  * The code to keep track of existing packs in the repository while | 
 |    repacking has been refactored. | 
 |  | 
 |  * The "streaming" interface used for bulk-checkin codepath has been | 
 |    narrowed to take only blob objects for now, with no real loss of | 
 |    functionality. | 
 |  | 
 |  * GitHub CI workflow has learned to trigger Coverity check. | 
 |  | 
 |  * Test coverage for trailers has been improved. | 
 |  | 
 |  * The code to iterate over loose references have been optimized to | 
 |    reduce the number of lstat() system calls. | 
 |    (merge 2cdb796101 vd/loose-ref-iteration-optimization later to maint). | 
 |  | 
 |  * The codepaths that read "chunk" formatted files have been corrected | 
 |    to pay attention to the chunk size and notice broken files. | 
 |  | 
 |  | 
 | Fixes since v2.42 | 
 | ----------------- | 
 |  | 
 |  * Overly long label names used in the sequencer machinery are now | 
 |    chopped to fit under filesystem limitation. | 
 |  | 
 |  * Scalar updates. | 
 |  | 
 |  * Tweak GitHub Actions CI so that pushing the same commit to multiple | 
 |    branch tips at the same time will not waste building and testing | 
 |    the same thing twice. | 
 |  | 
 |  * The commit-graph verification code that detects mixture of zero and | 
 |    non-zero generation numbers has been updated. | 
 |  | 
 |  * "git diff -w --exit-code" with various options did not work | 
 |    correctly, which is being addressed. | 
 |  | 
 |  * transfer.unpackLimit ought to be used as a fallback, but overrode | 
 |    fetch.unpackLimit and receive.unpackLimit instead. | 
 |  | 
 |  * The use of API between two calls to require_clean_work_tree() from | 
 |    the sequencer code has been cleaned up for consistency. | 
 |  | 
 |  * "git diff --no-such-option" and other corner cases around the exit | 
 |    status of the "diff" command has been corrected. | 
 |  | 
 |  * "git for-each-ref --sort='contents:size'" sorts the refs according | 
 |    to size numerically, giving a ref that points at a blob twelve-byte | 
 |    (12) long before showing a blob hundred-byte (100) long. | 
 |  | 
 |  * We now limit depth of the tree objects and maximum length of | 
 |    pathnames recorded in tree objects. | 
 |    (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint). | 
 |  | 
 |  * Various fixes to the behavior of "rebase -i" when the command got | 
 |    interrupted by conflicting changes. | 
 |  | 
 |  * References from description of the `--patch` option in various | 
 |    manual pages have been simplified and improved. | 
 |  | 
 |  * "git grep -e A --no-or -e B" is accepted, even though the negation | 
 |    of "or" did not mean anything, which has been tightened. | 
 |  | 
 |  * The completion script (in contrib/) has been taught to treat the | 
 |    "-t" option to "git checkout" and "git switch" just like the | 
 |    "--track" option, to complete remote-tracking branches. | 
 |  | 
 |  * "git diff --no-index -R <(one) <(two)" did not work correctly, | 
 |    which has been corrected. | 
 |  | 
 |  * Update "git maintenance" timers' implementation based on systemd | 
 |    timers to work with WSL. | 
 |  | 
 |  * "git diff --cached" codepath did not fill the necessary stat | 
 |    information for a file when fsmonitor knows it is clean and ended | 
 |    up behaving as if it is not clean, which has been corrected. | 
 |  | 
 |  * Clarify how "alias.foo = : git cmd ; aliased-command-string" should | 
 |    be spelled with necessary whitespaces around punctuation marks to | 
 |    work. | 
 |  | 
 |  * HTTP Header redaction code has been adjusted for a newer version of | 
 |    cURL library that shows its traces differently from earlier | 
 |    versions. | 
 |  | 
 |  * An error message given by "git send-email" when given a malformed | 
 |    address did not give correct information, which has been corrected. | 
 |  | 
 |  * UBSan options were not propagated through the test framework to git | 
 |    run via the httpd, unlike ASan options, which has been corrected. | 
 |  | 
 |  * "checkout --merge -- path" and "update-index --unresolve path" did | 
 |    not resurrect conflicted state that was resolved to remove path, | 
 |    but now they do. | 
 |    (merge 5bdedac3c7 jc/unresolve-removal later to maint). | 
 |  | 
 |  * The display width table for unicode characters has been updated for | 
 |    Unicode 15.1 | 
 |    (merge 872976c37e bb/unicode-width-table-15 later to maint). | 
 |  | 
 |  * Update mailmap entry for Derrick. | 
 |    (merge 6e5457d8c7 ds/mailmap-entry-update later to maint). | 
 |  | 
 |  * In .gitmodules files, submodules are keyed by their names, and the | 
 |    path to the submodule whose name is $name is specified by the | 
 |    submodule.$name.path variable.  There were a few codepaths that | 
 |    mixed the name and path up when consulting the submodule database, | 
 |    which have been corrected.  It took long for these bugs to be found | 
 |    as the name of a submodule initially is the same as its path, and | 
 |    the problem does not surface until it is moved to a different path, | 
 |    which apparently happens very rarely. | 
 |  | 
 |  * "git diff --merge-base X other args..." insisted that X must be a | 
 |    commit and errored out when given an annotated tag that peels to a | 
 |    commit, but we only need it to be a committish.  This has been | 
 |    corrected. | 
 |    (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint). | 
 |  | 
 |  * Fix "git merge-tree" to stop segfaulting when the --attr-source | 
 |    option is used. | 
 |    (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint). | 
 |  | 
 |  * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did | 
 |    not auto-initialize the decoration subsystem, which has been | 
 |    corrected. | 
 |  | 
 |  * Feeding "git stash store" with a random commit that was not created | 
 |    by "git stash create" now errors out. | 
 |    (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint). | 
 |  | 
 |  * The index file has room only for lower 32-bit of the file size in | 
 |    the cached stat information, which means cached stat information | 
 |    will have 0 in its sd_size member for a file whose size is multiple | 
 |    of 4GiB.  This is mistaken for a racily clean path.  Avoid it by | 
 |    storing a bogus sd_size value instead for such files. | 
 |    (merge 5143ac07b1 bc/racy-4gb-files later to maint). | 
 |  | 
 |  * "git p4" tried to store symlinks to LFS when told, but has been | 
 |    fixed not to do so, because it does not make sense. | 
 |    (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint). | 
 |  | 
 |  * The codepath to handle recipient addresses `git send-email | 
 |    --compose` learns from the user was completely broken, which has | 
 |    been corrected. | 
 |    (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint). | 
 |  | 
 |  * "cd sub && git grep -f patterns" tried to read "patterns" file at | 
 |    the top level of the working tree; it has been corrected to read | 
 |    "sub/patterns" instead. | 
 |  | 
 |  | 
 |  * "git reflog expire --single-worktree" has been broken for the past | 
 |    20 months or so, which has been corrected. | 
 |  | 
 |  * "git send-email" did not have certain pieces of data computed yet | 
 |    when it tried to validate the outging messages and its recipient | 
 |    addresses, which has been sorted out. | 
 |  | 
 |  * "git bugreport" learned to complain when it received a command line | 
 |    argument that it will not use. | 
 |  | 
 |  * Other code cleanup, docfix, build fix, etc. | 
 |    (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint). |