Git v1.7.8 Release Notes (draft)
================================

Updates since v1.7.7
--------------------

 * Some git-svn and git-gui updates.

 * Updates to bash completion scripts.

 * The build procedure has been taught to take advantage of computed
   dependency automatically when the complier supports it.

 * The date parser now accepts timezone designators that lack minutes
   part and also has a colon between "hh:mm".

 * On some BSD systems, adding +s bit on directories is detrimental
   (it is not necessary on BSD to begin with). The installation
   procedure has been updated to take this into account.

 * The contents of the /etc/mailname file, if exists, is used as the
   default value of the hostname part of the committer/author e-mail.

 * "git am" learned how to read from patches generated by Hg.

 * "git archive" talking with a remote repository can report errors
   from the remote side in a more informative way.

 * "git branch" learned an explicit --list option to ask for branches
   listed, optionally with a glob matching pattern to limit its output.

 * "git check-attr" learned "--cached" option to look at .gitattributes
   files from the index, not from the working tree.

 * Variants of "git cherry-pick" and "git revert" that take multiple
   commits learned to "--continue".

 * Errors at the network layer is logged by "git daemon".

 * "git diff" learned "--minimal" option to spend extra cycles to come
   up with a minimal patch output.

 * "git fetch" learned to honor transfer.fsckobjects configuration to
   validate the objects that were received from the other end, just like
   "git receive-pack" (the receiving end of "git push") does.

 * "git fetch" makes sure that the set of objects it received from the
   other end actually completes the history before updating the refs.
   "git receive-pack" (the receiving end of "git push") learned to do the
   same.

 * "git for-each-ref" learned "%(contents:subject)", "%(contents:body)"
   and "%(contents:signature)". The last one is useful for signed tags.

 * "git grep" used to incorrectly pay attention to .gitignore files
   scattered in the directory it was working in even when "--no-index"
   option was used. It no longer does this. The "--exclude-standard"
   option needs to be given to explicitly activate the ignore
   mechanism.

 * "git grep" learned "--untracked" option, where given patterns are
    searched in untracked (but not ignored) files as well as tracked
    files in the working tree, so that matches in new but not yet
    added files do not get missed.

 * "git ls-remote" learned to respond to "-h"(elp) requests.

 * "git send-email" learned to respond to "-h"(elp) requests.

 * "git send-email" allows the value given to sendemail.aliasfile to begin
   with "~/" to refer to the $HOME directory.

 * "git send-email" forces use of Authen::SASL::Perl to work around
   issues between Authen::SASL::Cyrus and AUTH PLAIN/LOGIN.

 * "git stash" learned "--include-untracked" option to stash away
   untracked/ignored cruft from the working tree.

 * "git submodule update" learned to honor "none" as the value for
   submodule.<name>.update to specify that the named submodule should
   not be checked out by default.

 * When populating a new submodule directory with "git submodule init",
   the $GIT_DIR metainformation directory for submodules is created inside
   $GIT_DIR/modules/<name>/ directory of the superproject and referenced
   via the gitfile mechanism. This is to make it possible to switch
   between commits in the superproject that has and does not have the
   submodule in the tree without re-cloning.

 * "mediawiki" remote helper can interact with (surprise!) MediaWiki
   with "git fetch" & "git push".

 * "gitweb" leaked unescaped control characters from syntax hiliter
   outputs.


Also contains other documentation updates and minor code cleanups.


Fixes since v1.7.7
------------------

Unless otherwise noted, all fixes in the 1.7.7.X maintenance track are
included in this release.

 * We used to drop error messages from libcurl on certain kinds of
   errors.
   (merge be22d92eac8 jn/maint-http-error-message later to maint).

 * Error report from smart HTTP transport, when the connection was
   broken in the middle of a transfer, showed a useless message on
   a corrupt packet.
   (merge 6cdf022 sp/smart-http-failure later to maint).

 * HTTP transport did not use pushurl correctly, and also did not tell
   what host it is trying to authenticate with when asking for
   credentials.
   (merge deba493 jk/http-auth later to maint).

 * Adding many refs to the local repository in one go (e.g. "git fetch"
   that fetches many tags) and looking up a ref by name in a repository
   with too many refs were unnecessarily slow.
   (merge 17d68a54d jp/get-ref-dir-unsorted later to maint).

 * After incorrectly written third-party tools store a tag object in
   HEAD, git diagnosed it as a repository corruption and refused to
   proceed in order to avoid spreading the damage. We now gracefully
   recover from such a situation by pretending as if the commit that
   is pointed at by the tag were in HEAD.
   (merge baf18fc nd/maint-autofix-tag-in-head later to maint).

 * Report from "git commit" on untracked files was confused under
   core.ignorecase option.
   (merge 2548183b jk/name-hash-dirent later to maint).

 * The attribute mechanism did not use case insensitive match when
   core.ignorecase was set.
   (merge 6eba621 bc/attr-ignore-case later to maint).

 * "git apply --whitespace=error" did not bother to report the exact
   line number in the patch that introduced new blank lines at the end
   of the file.
   (merge 8557263 jc/apply-blank-at-eof-fix later to maint).

 * "git bisect" did not notice when it failed to update the working tree
   to the next commit to be tested.
   (merge 1acf11717 js/bisect-no-checkout later to maint).

 * "git checkout $tree $directory/" resurrected paths locally removed or
   modified only in the working tree in $directory/ that did not appear
   in $directory of the given $tree. They should have been kept intact.
   (merge 0a1283b jc/checkout-from-tree-keep-local-changes later to maint).

 * "git config --bool --get-regexp" failed to separate the variable name
   and its value "true" when the variable is defined without "= true".
   (merge 880e3cc mm/maint-config-explicit-bool-display later to maint).

 * "git remote rename $a $b" were not careful to match the remote name
   against $a (i.e. source side of the remote nickname).
   (merge b52d00aed mz/remote-rename later to maint).

 * "git diff --[num]stat" used to use the number of lines of context
   different from the default, potentially giving different results from
   "git diff | diffstat" and confusing the users.
   (merge f01cae918 jc/maint-diffstat-numstat-context later to maint).

 * "git merge" did not understand ":/<pattern>" as a way to name a commit.

 * "git mergetool" learned to use its arguments as pathspec, not a path to
   the file that may not even have any conflict.
   (merge 6d9990a jm/mergetool-pathspec later to maint).

 * "git pull" and "git rebase" did not work well even when GIT_WORK_TREE is
   set correctly with GIT_DIR if the current directory is outside the working
   tree.
   (merge 035b5bf jk/pull-rebase-with-work-tree later to maint).

 " "git push" on the receiving end used to call post-receive and post-update
   hooks for attempted removal of non-existing refs.
   (merge 160b81ed ph/push-to-delete-nothing later to maint).

 * "gitweb" used to produce a non-working link while showing the contents
   of a blob, when JavaScript actions are enabled.
   (merge 2b07ff3ff ps/gitweb-js-with-lineno later to maint).

---
exec >/var/tmp/1
O=v1.7.7-368-g9638384
echo O=$(git describe --always master)
git log --first-parent --oneline --reverse ^$O master
echo
git shortlog --no-merges ^$O master
