Git v2.6.5 Release Notes
========================

Fixes since v2.6.4
------------------

 * Because "test_when_finished" in our test framework queues the
   clean-up tasks to be done in a shell variable, it should not be
   used inside a subshell.  Add a mechanism to allow 'bash' to catch
   such uses, and fix the ones that were found.

 * Update "git subtree" (in contrib/) so that it can take whitespaces
   in the pathnames, not only in the in-tree pathname but the name of
   the directory that the repository is in.

 * Cosmetic improvement to lock-file error messages.

 * mark_tree_uninteresting() has code to handle the case where it gets
   passed a NULL pointer in its 'tree' parameter, but the function had
   'object = &tree->object' assignment before checking if tree is
   NULL.  This gives a compiler an excuse to declare that tree will
   never be NULL and apply a wrong optimization.  Avoid it.

 * The helper used to iterate over loose object directories to prune
   stale objects did not closedir() immediately when it is done with a
   directory--a callback such as the one used for "git prune" may want
   to do rmdir(), but it would fail on open directory on platforms
   such as WinXP.

 * "git p4" used to import Perforce CLs that touch only paths outside
   the client spec as empty commits.  It has been corrected to ignore
   them instead, with a new configuration git-p4.keepEmptyCommits as a
   backward compatibility knob.

 * The exit code of git-fsck did not reflect some types of errors
   found in packed objects, which has been corrected.

 * The completion script (in contrib/) used to list "git column"
   (which is not an end-user facing command) as one of the choices

 * Improve error reporting when SMTP TLS fails.

 * When getpwuid() on the system returned NULL (e.g. the user is not
   in the /etc/passwd file or other uid-to-name mappings), the
   codepath to find who the user is to record it in the reflog barfed
   and died.  Loosen the check in this codepath, which already accepts
   questionable ident string (e.g. host part of the e-mail address is
   obviously bogus), and in general when we operate fmt_ident() function
   in non-strict mode.

 * "git symbolic-ref" forgot to report a failure with its exit status.

 * History traversal with "git log --source" that starts with an
   annotated tag failed to report the tag as "source", due to an
   old regression in the command line parser back in v2.2 days.

Also contains typofixes, documentation updates and trivial code
clean-ups.
