Git v2.10.3 Release Notes
=========================

Fixes since v2.10.2
-------------------

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   This by itself is not useful until a second caller appears in the
   future for "rebase -i" helper.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of Mail::Address perl module.

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.

 * "git daemon" used fixed-length buffers to turn URL to the
   repository the client asked for into the server side directory
   path, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes overlong path to be
   required to serve.

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing $(git --exec-path) output in front.

 * Fix for a racy false-positive test failure.

 * Portability update and workaround for builds on recent Mac OS X.

 * Update to the test framework made in 2.9 timeframe broke running
   the tests under valgrind, which has been fixed.

 * Improve the rule to convert "unsigned char [20]" into "struct
   object_id *" in contrib/coccinelle/

 * "git-shell" rejects a request to serve a repository whose name
   begins with a dash, which makes it no longer possible to get it
   confused into spawning service programs like "git-upload-pack" with
   an option like "--help", which in turn would spawn an interactive
   pager, instead of working with the repository user asked to access
   (i.e. the one whose name is "--help").

Also contains minor documentation updates and code clean-ups.
