GIT v1.6.3.2 Release Notes
==========================

Fixes since v1.6.3.1
--------------------

 * A few codepaths picked up the first few bytes from an sha1[] by
   casting the (char *) pointer to (int *); GCC 4.4 did not like this,
   and aborted compilation.

 * Some unlink(2) failures went undiagnosed.

 * The "recursive" merge strategy misbehaved when faced rename/delete
   conflicts while coming up with an intermediate merge base.

 * The low-level merge algorithm did not handle a degenerate case of
   merging a file with itself using itself as the common ancestor
   gracefully.  It should produce the file itself, but instead
   produced an empty result.

 * GIT_TRACE mechanism segfaulted when tracing a shell-quoted aliases.

 * OpenBSD also uses st_ctimspec in "struct stat", instead of "st_ctim".

 * With NO_CROSS_DIRECTORY_HARDLINKS, "make install" can be told not to
   create hardlinks between $(gitexecdir)/git-$builtin_commands and
   $(bindir)/git.

 * command completion code in bash did not reliably detect that we are
   in a bare repository.

 * "git add ." in an empty directory complained that pathspec "." did not
   match anything, which may be technically correct, but not useful.  We
   silently make it a no-op now.

 * "git add -p" (and "patch" action in "git add -i") was broken when
   the first hunk that adds a line at the top was split into two and
   both halves are marked to be used.

 * "git for-each-ref" had a segfaulting bug when dealing with a tag object
   created by an ancient git.

 * "git format-patch -k" still added patch numbers if format.numbered
   configuration was set.

 * "git grep --color ''" did not terminate.

 * http-push had a small use-after-free bug.

 * "git push" was converting OFS_DELTA pack representation into less
   efficient REF_DELTA representation unconditionally upon transfer,
   making the transferred data unnecessarily larger.

 * "git remote show origin" segfaulted when origin was still empty.

Many other general usability updates around help text, diagnostic messages
and documentation are included as well.

---
exec >/var/tmp/1
O=v1.6.3.1-68-g456cb4c
echo O=$(git describe maint)
git shortlog --no-merges $O..maint
