Git v1.8.4.3 Release Notes
==========================

Fixes since v1.8.4.2
--------------------

 * The interaction between use of Perl in our test suite and NO_PERL
   has been clarified a bit.

 * A fast-import stream expresses a pathname with funny characters by
   quoting them in C style; remote-hg remote helper (in contrib/)
   forgot to unquote such a path.

 * One long-standing flaw in the pack transfer protocol used by "git
   clone" was that there was no way to tell the other end which branch
   "HEAD" points at, and the receiving end needed to guess.  A new
   capability has been defined in the pack protocol to convey this
   information so that cloning from a repository with more than one
   branches pointing at the same commit where the HEAD is at now
   reliably sets the initial branch in the resulting repository.

 * We did not handle cases where http transport gets redirected during
   the authorization request (e.g. from http:// to https://).

 * "git rev-list --objects ^v1.0^ v1.0" gave v1.0 tag itself in the
   output, but "git rev-list --objects v1.0^..v1.0" did not.

 * The fall-back parsing of commit objects with broken author or
   committer lines were less robust than ideal in picking up the
   timestamps.

 * Bash prompting code to deal with an SVN remote as an upstream
   were coded in a way not supported by older Bash versions (3.x).

 * "git checkout topic", when there is not yet a local "topic" branch
   but there is a unique remote-tracking branch for a remote "topic"
   branch, pretended as if "git checkout -t -b topic remote/$r/topic"
   (for that unique remote $r) was run. This hack however was not
   implemented for "git checkout topic --".

 * Coloring around octopus merges in "log --graph" output was screwy.

 * We did not generate HTML version of documentation to "git subtree"
   in contrib/.

 * The synopsis section of "git unpack-objects" documentation has been
   clarified a bit.

 * An ancient How-To on serving Git repositories on an HTTP server
   lacked a warning that it has been mostly superseded with more
   modern way.

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