| Git v2.9.3 Release Notes | 
 | ======================== | 
 |  | 
 | Fixes since v2.9.2 | 
 | ------------------ | 
 |  | 
 |  * A helper function that takes the contents of a commit object and | 
 |    finds its subject line did not ignore leading blank lines, as is | 
 |    commonly done by other codepaths.  Make it ignore leading blank | 
 |    lines to match. | 
 |  | 
 |  * Git does not know what the contents in the index should be for a | 
 |    path added with "git add -N" yet, so "git grep --cached" should not | 
 |    show hits (or show lack of hits, with -L) in such a path, but that | 
 |    logic does not apply to "git grep", i.e. searching in the working | 
 |    tree files.  But we did so by mistake, which has been corrected. | 
 |  | 
 |  * "git rebase -i --autostash" did not restore the auto-stashed change | 
 |    when the operation was aborted. | 
 |  | 
 |  * "git commit --amend --allow-empty-message -S" for a commit without | 
 |    any message body could have misidentified where the header of the | 
 |    commit object ends. | 
 |  | 
 |  * More mark-up updates to typeset strings that are expected to | 
 |    literally typed by the end user in fixed-width font. | 
 |  | 
 |  * For a long time, we carried an in-code comment that said our | 
 |    colored output would work only when we use fprintf/fputs on | 
 |    Windows, which no longer is the case for the past few years. | 
 |  | 
 |  * "gc.autoPackLimit" when set to 1 should not trigger a repacking | 
 |    when there is only one pack, but the code counted poorly and did | 
 |    so. | 
 |  | 
 |  * One part of "git am" had an oddball helper function that called | 
 |    stuff from outside "his" as opposed to calling what we have "ours", | 
 |    which was not gender-neutral and also inconsistent with the rest of | 
 |    the system where outside stuff is usually called "theirs" in | 
 |    contrast to "ours". | 
 |  | 
 |  * The test framework learned a new helper test_match_signal to | 
 |    check an exit code from getting killed by an expected signal. | 
 |  | 
 |  * "git blame -M" missed a single line that was moved within the file. | 
 |  | 
 |  * Fix recently introduced codepaths that are involved in parallel | 
 |    submodule operations, which gave up on reading too early, and | 
 |    could have wasted CPU while attempting to write under a corner | 
 |    case condition. | 
 |  | 
 |  * "git grep -i" has been taught to fold case in non-ascii locales | 
 |    correctly. | 
 |  | 
 |  * A test that unconditionally used "mktemp" learned that the command | 
 |    is not necessarily available everywhere. | 
 |  | 
 |  * "git blame file" allowed the lineage of lines in the uncommitted, | 
 |    unadded contents of "file" to be inspected, but it refused when | 
 |    "file" did not appear in the current commit.  When "file" was | 
 |    created by renaming an existing file (but the change has not been | 
 |    committed), this restriction was unnecessarily tight. | 
 |  | 
 |  * "git add -N dir/file && git write-tree" produced an incorrect tree | 
 |    when there are other paths in the same directory that sorts after | 
 |    "file". | 
 |  | 
 |  * "git fetch http://user:pass@host/repo..." scrubbed the userinfo | 
 |    part, but "git push" didn't. | 
 |  | 
 |  * An age old bug that caused "git diff --ignore-space-at-eol" | 
 |    misbehave has been fixed. | 
 |  | 
 |  * "git notes merge" had a code to see if a path exists (and fails if | 
 |    it does) and then open the path for writing (when it doesn't). | 
 |    Replace it with open with O_EXCL. | 
 |  | 
 |  * "git pack-objects" and "git index-pack" mostly operate with off_t | 
 |    when talking about the offset of objects in a packfile, but there | 
 |    were a handful of places that used "unsigned long" to hold that | 
 |    value, leading to an unintended truncation. | 
 |  | 
 |  * Recent update to "git daemon" tries to enable the socket-level | 
 |    KEEPALIVE, but when it is spawned via inetd, the standard input | 
 |    file descriptor may not necessarily be connected to a socket. | 
 |    Suppress an ENOTSOCK error from setsockopt(). | 
 |  | 
 |  * Recent FreeBSD stopped making perl available at /usr/bin/perl; | 
 |    switch the default the built-in path to /usr/local/bin/perl on not | 
 |    too ancient FreeBSD releases. | 
 |  | 
 |  * "git status" learned to suggest "merge --abort" during a conflicted | 
 |    merge, just like it already suggests "rebase --abort" during a | 
 |    conflicted rebase. | 
 |  | 
 |  * The .c/.h sources are marked as such in our .gitattributes file so | 
 |    that "git diff -W" and friends would work better. | 
 |  | 
 |  * Existing autoconf generated test for the need to link with pthread | 
 |    library did not check all the functions from pthread libraries; | 
 |    recent FreeBSD has some functions in libc but not others, and we | 
 |    mistakenly thought linking with libc is enough when it is not. | 
 |  | 
 |  * Allow http daemon tests in Travis CI tests. | 
 |  | 
 |  * Users of the parse_options_concat() API function need to allocate | 
 |    extra slots in advance and fill them with OPT_END() when they want | 
 |    to decide the set of supported options dynamically, which makes the | 
 |    code error-prone and hard to read.  This has been corrected by tweaking | 
 |    the API to allocate and return a new copy of "struct option" array. | 
 |  | 
 |  * The use of strbuf in "git rm" to build filename to remove was a bit | 
 |    suboptimal, which has been fixed. | 
 |  | 
 |  * "git commit --help" said "--no-verify" is only about skipping the | 
 |    pre-commit hook, and failed to say that it also skipped the | 
 |    commit-msg hook. | 
 |  | 
 |  * "git merge" in Git v2.9 was taught to forbid merging an unrelated | 
 |    lines of history by default, but that is exactly the kind of thing | 
 |    the "--rejoin" mode of "git subtree" (in contrib/) wants to do. | 
 |    "git subtree" has been taught to use the "--allow-unrelated-histories" | 
 |    option to override the default. | 
 |  | 
 |  * The build procedure for "git persistent-https" helper (in contrib/) | 
 |    has been updated so that it can be built with more recent versions | 
 |    of Go. | 
 |  | 
 |  * There is an optimization used in "git diff $treeA $treeB" to borrow | 
 |    an already checked-out copy in the working tree when it is known to | 
 |    be the same as the blob being compared, expecting that open/mmap of | 
 |    such a file is faster than reading it from the object store, which | 
 |    involves inflating and applying delta.  This however kicked in even | 
 |    when the checked-out copy needs to go through the convert-to-git | 
 |    conversion (including the clean filter), which defeats the whole | 
 |    point of the optimization.  The optimization has been disabled when | 
 |    the conversion is necessary. | 
 |  | 
 |  * "git -c grep.patternType=extended log --basic-regexp" misbehaved | 
 |    because the internal API to access the grep machinery was not | 
 |    designed well. | 
 |  | 
 |  * Windows port was failing some tests in t4130, due to the lack of | 
 |    inum in the returned values by its lstat(2) emulation. | 
 |  | 
 |  * The characters in the label shown for tags/refs for commits in | 
 |    "gitweb" output are now properly escaped for proper HTML output. | 
 |  | 
 |  * FreeBSD can lie when asked mtime of a directory, which made the | 
 |    untracked cache code to fall back to a slow-path, which in turn | 
 |    caused tests in t7063 to fail because it wanted to verify the | 
 |    behaviour of the fast-path. | 
 |  | 
 |  * Squelch compiler warnings for netmalloc (in compat/) library. | 
 |  | 
 |  * The API documentation for hashmap was unclear if hashmap_entry | 
 |    can be safely discarded without any other consideration.  State | 
 |    that it is safe to do so. | 
 |  | 
 |  * Not-so-recent rewrite of "git am" that started making internal | 
 |    calls into the commit machinery had an unintended regression, in | 
 |    that no matter how many seconds it took to apply many patches, the | 
 |    resulting committer timestamp for the resulting commits were all | 
 |    the same. | 
 |  | 
 |  * "git difftool <paths>..." started in a subdirectory failed to | 
 |    interpret the paths relative to that directory, which has been | 
 |    fixed. | 
 |  | 
 | Also contains minor documentation updates and code clean-ups. |