Git v1.7.10.2 Release Notes
===========================

Fixes since v1.7.10.1
---------------------

 * The test scaffolding for git-daemon was flaky.

 * The test scaffolding for fast-import was flaky.

 * The filesystem boundary was not correctly reported when .git directory
   discovery stopped at a mount point.

 * HTTP transport that requires authentication did not work correctly when
   multiple connections are used simultaneously.

 * Minor memory leak during unpack_trees (hence "merge" and "checkout"
   to check out another branch) has been plugged.

 * In the older days, the header "Conflicts:" in "cherry-pick" and "merge"
   was separated by a blank line from the list of paths that follow for
   readability, but when "merge" was rewritten in C, we lost it by
   mistake. Remove the newline from "cherry-pick" to make them match
   again.

 * The command line parser choked "git cherry-pick $name" when $name can
   be both revision name and a pathname, even though $name can never be a
   path in the context of the command.

 * The "include.path" facility in the configuration mechanism added in
   1.7.10 forgot to interpret "~/path" and "~user/path" as it should.

 * "git config --rename-section" to rename an existing section into a
   bogus one did not check the new name.

 * The "diff --no-index" codepath used limited-length buffers, risking
   pathnames getting truncated.  Update it to use the strbuf API.

 * The report from "git fetch" said "new branch" even for a non branch
   ref.

 * The http-backend (the server side of the smart http transfer) used
   to overwrite GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL with the
   value obtained from REMOTE_USER unconditionally, making it
   impossible for the server side site-specific customization to use
   different identity sources to affect the names logged. It now uses
   REMOTE_USER only as a fallback value.

 * "log --graph" was not very friendly with "--stat" option and its
   output had line breaks at wrong places.

 * Octopus merge strategy did not reduce heads that are recorded in the
   final commit correctly.

 * "git push" over smart-http lost progress output a few releases ago;
   this release resurrects it.

 * The error and advice messages given by "git push" when it fails due
   to non-ff were not very helpful to new users; it has been broken
   into three cases, and each is given a separate advice message.

 * The insn sheet given by "rebase -i" did not make it clear that the
   insn lines can be re-ordered to affect the order of the commits in
   the resulting history.

 * "git repack" used to write out unreachable objects as loose objects
   when repacking, even if such loose objects will immediately pruned
   due to its age.

 * A contrib script "rerere-train" did not work out of the box unless
   user futzed with her $PATH.

 * "git rev-parse --show-prefix" used to emit nothing when run at the
   top-level of the working tree, but now it gives a blank line.

 * The i18n of error message "git stash save" was not properly done.

 * "git submodule" used a sed script that some platforms mishandled.

 * When using a Perl script on a system where "perl" found on user's
   $PATH could be ancient or otherwise broken, we allow builders to
   specify the path to a good copy of Perl with $PERL_PATH.  The
   gitweb test forgot to use that Perl when running its test.

Also contains minor fixes and documentation updates.
