Git v1.8.4.1 Release Notes
========================

Fixes since v1.8.4
------------------

 * Some people still use rather old versions of bash, which cannot
   grok some constructs like 'printf -v varname' the prompt and
   completion code started to use recently.  The completion and
   prompt scripts have been adjusted to work better with these old
   versions of bash.

 * "git rebase -i" had a minor bug (the same could be in other
   programs, as the root cause is pretty generic) where the code
   feeds a random, data dependeant string to 'echo' and expects it
   to come out literally.

 * "submodule.<name>.path" variable mistakenly set to the empty
   "true" caused the configuration parser to segfault.

 * Output from "git log --full-diff -- <pathspec>" looked strange,
   because comparison was done with the previous ancestor that
   touched the specified <pathspec>, causing the patches for paths
   outside the pathspec to show more than the single commit has
   changed.

 * The auto-tag-following code in "git fetch" tries to reuse the
   same transport twice when the serving end does not cooperate and
   does not give tags that point to commits that are asked for as
   part of the primary transfer.  Unfortunately, Git-aware transport
   helper interface is not designed to be used more than once, hence
   this did not work over smart-http transfer.  Fixed.

 * Send a large request to read(2)/write(2) as a smaller but still
   reasonably large chunks, which would improve the latency when the
   operation needs to be killed and incidentally works around broken
   64-bit systems that cannot take a 2GB write or read in one go.

 * A ".mailmap" file that ends with an incomplete line, when read
   from a blob, was not handled properly.

 * The recent "short-cut clone connectivity check" topic broke a
   shallow repository when a fetch operation tries to auto-follow
   tags.

 * On platforms with fgetc() and friends defined as macros,
   the configuration parser did not compile.

Also contains a handful of trivial code clean-ups, documentation
updates, updates to the test suite, etc.
