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.

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