Git 2.5 Release Notes
=====================

Updates since v2.4
------------------

UI, Workflows & Features

 * The bash completion script (in contrib/) learned a few options that
   "git revert" takes.

 * Whitespace breakages in deleted and context lines can also be
   painted in the output of "git diff" and friends with the new
   --ws-error-highlight option.

 * List of commands shown by "git help" are grouped along the workflow
   elements to help early learners.

 * "git p4" now detects the filetype (e.g. binary) correctly even when
   the files are opened exclusively.

 * git p4 attempts to better handle branches in Perforce.

 * "git p4" learned "--changes-block-size <n>" to read the changes in
   chunks from Perforce, instead of making one call to "p4 changes"
   that may trigger "too many rows scanned" error from Perforce.

 * More workaround for Perforce's row number limit in "git p4".

 * Unlike "$EDITOR" and "$GIT_EDITOR" that can hold the path to the
   command and initial options (e.g. "/path/to/emacs -nw"), 'git p4'
   did not let the shell interpolate the contents of the environment
   variable that name the editor "$P4EDITOR" (and "$EDITOR", too).
   This release makes it in line with the rest of Git, as well as with
   Perforce.

 * A new short-hand <branch>@{push} denotes the remote-tracking branch
   that tracks the branch at the remote the <branch> would be pushed
   to.

 * "git show-branch --topics HEAD" (with no other arguments) did not
   do anything interesting.  Instead, contrast the given revision
   against all the local branches by default.

 * A replacement for contrib/workdir/git-new-workdir that does not
   rely on symbolic links and make sharing of objects and refs safer
   by making the borrowee and borrowers aware of each other.

   Consider this as still an experimental feature; its UI is still
   likely to change.

 * Tweak the sample "store" backend of the credential helper to honor
   XDG configuration file locations when specified.

 * A heuristic we use to catch mistyped paths on the command line
   "git <cmd> <revs> <pathspec>" is to make sure that all the non-rev
   parameters in the later part of the command line are names of the
   files in the working tree, but that means "git grep $str -- \*.c"
   must always be disambiguated with "--", because nobody sane will
   create a file whose name literally is asterisk-dot-see.  Loosen the
   heuristic to declare that with a wildcard string the user likely
   meant to give us a pathspec.

 * "git merge FETCH_HEAD" learned that the previous "git fetch" could
   be to create an Octopus merge, i.e. recording multiple branches
   that are not marked as "not-for-merge"; this allows us to lose an
   old style invocation "git merge <msg> HEAD $commits..." in the
   implementation of "git pull" script; the old style syntax can now
   be deprecated (but not removed yet).

 * Filter scripts were run with SIGPIPE disabled on the Git side,
   expecting that they may not read what Git feeds them to filter.
   We however treated a filter that does not read its input fully
   before exiting as an error.  We no longer do and ignore EPIPE
   when writing to feed the filter scripts.

   This changes semantics, but arguably in a good way.  If a filter
   can produce its output without fully consuming its input using
   whatever magic, we now let it do so, instead of diagnosing it
   as a programming error.

 * Instead of dying immediately upon failing to obtain a lock, the
   locking (of refs etc) retries after a short while with backoff.

 * Introduce http.<url>.SSLCipherList configuration variable to tweak
   the list of cipher suite to be used with libcURL when talking with
   https:// sites.

 * "git subtree" script (in contrib/) used "echo -n" to produce
   progress messages in a non-portable way.

 * "git subtree" script (in contrib/) does not have --squash option
   when pushing, but the documentation and help text pretended as if
   it did.

 * The Git subcommand completion (in contrib/) no longer lists credential
   helpers among candidates; they are not something the end user would
   invoke interactively.

 * The index file can be taught with "update-index --untracked-cache"
   to optionally remember already seen untracked files, in order to
   speed up "git status" in a working tree with tons of cruft.

 * "git mergetool" learned to drive WinMerge as a backend.

 * "git upload-pack" that serves "git fetch" can be told to serve
   commits that are not at the tip of any ref, as long as they are
   reachable from a ref, with uploadpack.allowReachableSHA1InWant
   configuration variable.

 * "git cat-file --batch(-check)" learned the "--follow-symlinks"
   option that follows an in-tree symbolic link when asked about an
   object via extended SHA-1 syntax, e.g. HEAD:RelNotes that points at
   Documentation/RelNotes/2.5.0.txt.  With the new option, the command
   behaves as if HEAD:Documentation/RelNotes/2.5.0.txt was given as
   input instead.

   Consider this as still an experimental and incomplete feature:

    - We may want to do the same for in-index objects, e.g.
      asking for :RelNotes with this option should give
      :Documentation/RelNotes/2.5.0.txt, too

    - "git cat-file --follow-symlinks blob HEAD:RelNotes"
      may also be something we want to allow in the future.

 * "git send-email" learned the alias file format used by the sendmail
   program (in a simplified form; we obviously do not feed pipes).

 * Traditionally, external low-level 3-way merge drivers are expected
   to produce their results based solely on the contents of the three
   variants given in temporary files named by %O, %A and %B on their
   command line.  Additionally allow them to look at the final path
   (given by %P).

 * "git blame" learned blame.showEmail configuration variable.

 * "git apply" cannot diagnose a patch corruption when the breakage is
   to mark the length of the hunk shorter than it really is on the
   hunk header line "@@ -l,k +m,n @@"; one special case it could is
   when the hunk becomes no-op (e.g. k == n == 2 for two-line context
   patch output), and it learned to do so in this special case.

 * Add the "--allow-unknown-type" option to "cat-file" to allow
   inspecting loose objects of an experimental or a broken type.

 * Many long-running operations show progress eye-candy, even when
   they are later backgrounded.  Hide the eye-candy when the process
   is sent to the background instead.
   (merge a4fb76c lm/squelch-bg-progress later to maint).


Performance, Internal Implementation, Development Support etc.

 * "unsigned char [20]" used throughout the code to represent object
   names are being converted into a semi-opaque "struct object_id".
   This effort is expected to interfere with other topics in flight,
   but hopefully will give us one extra level of abstraction in the
   end, when completed.

 * for_each_ref() callback functions were taught to name the objects
   not with "unsigned char sha1[20]" but with "struct object_id".

 * Catch a programmer mistake to feed a pointer not an array to
   ARRAY_SIZE() macro, by using a couple of GCC extensions.

 * Some error messages in "git config" were emitted without calling
   the usual error() facility.

 * When "add--interactive" splits a hunk into two overlapping hunks
   and then let the user choose only one, it sometimes feeds an
   incorrect patch text to "git apply".  Add tests to demonstrate
   this.

   I have a slight suspicion that this may be $gmane/87202 coming back
   and biting us (I seem to have said "let's run with this and see
   what happens" back then).

 * More line-ending tests.

 * An earlier rewrite to use strbuf_getwholeline() instead of fgets(3)
   to read packed-refs file revealed that the former is unacceptably
   inefficient.  It has been optimized by using getdelim(3) when
   available.

 * The refs API uses ref_lock struct which had its own "int fd", even
   though the same file descriptor was in the lock struct it contains.
   Clean-up the code to lose this redundant field.

 * There was a dead code that used to handle "git pull --tags" and
   show special-cased error message, which was made irrelevant when
   the semantics of the option changed back in Git 1.9 days.
   (merge 19d122b pt/pull-tags-error-diag later to maint).

 * Help us to find broken test script that splits the body part of the
   test by mistaken use of wrong kind of quotes.
   (merge d93d5d5 jc/test-prereq-validate later to maint).

 * Developer support to automatically detect broken &&-chain in the
   test scripts is now turned on by default.
   (merge 92b269f jk/test-chain-lint later to maint).

 * Error reporting mechanism used in "refs" API has been made more
   consistent.

 * "git pull" has more test coverage now.

 * "git pull" has become more aware of the options meant for
   underlying "git fetch" and then learned to use parse-options
   parser.

 * Clarify in the Makefile a guideline to decide use of USE_NSEC.

Also contains various documentation updates and code clean-ups.


Fixes since v2.4
----------------

Unless otherwise noted, all the fixes since v2.4 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Git 2.4 broke setting verbosity and progress levels on "git clone"
   with native transports.
   (merge 822f0c4 mh/clone-verbosity-fix later to maint).

 * "git add -e" did not allow the user to abort the operation by
   killing the editor.
   (merge cb64800 jk/add-e-kill-editor later to maint).

 * Memory usage of "git index-pack" has been trimmed by tens of
   per-cent.
   (merge f0e7f11 nd/slim-index-pack-memory-usage later to maint).

 * "git rev-list --objects $old --not --all" to see if everything that
   is reachable from $old is already connected to the existing refs
   was very inefficient.
   (merge b6e8a3b jk/still-interesting later to maint).

 * "hash-object --literally" introduced in v2.2 was not prepared to
   take a really long object type name.
   (merge 1427a7f jc/hash-object later to maint).

 * "git rebase --quiet" was not quite quiet when there is nothing to
   do.
   (merge 22946a9 jk/rebase-quiet-noop later to maint).

 * The completion for "log --decorate=" parameter value was incorrect.
   (merge af16bda sg/complete-decorate-full-not-long later to maint).

 * "filter-branch" corrupted commit log message that ends with an
   incomplete line on platforms with some "sed" implementations that
   munge such a line.  Work it around by avoiding to use "sed".
   (merge df06201 jk/filter-branch-use-of-sed-on-incomplete-line later to maint).

 * "git daemon" fails to build from the source under NO_IPV6
   configuration (regression in 2.4).
   (merge d358f77 jc/daemon-no-ipv6-for-2.4.1 later to maint).

 * Some time ago, "git blame" (incorrectly) lost the convert_to_git()
   call when synthesizing a fake "tip" commit that represents the
   state in the working tree, which broke folks who record the history
   with LF line ending to make their project portable across platforms
   while terminating lines in their working tree files with CRLF for
   their platform.
   (merge 4bf256d tb/blame-resurrect-convert-to-git later to maint).

 * We avoid setting core.worktree when the repository location is the
   ".git" directory directly at the top level of the working tree, but
   the code misdetected the case in which the working tree is at the
   root level of the filesystem (which arguably is a silly thing to
   do, but still valid).
   (merge 84ccad8 jk/init-core-worktree-at-root later to maint).

 * "git commit --date=now" or anything that relies on approxidate lost
   the daylight-saving-time offset.
   (merge f6e6362 jc/epochtime-wo-tz later to maint).

 * Access to objects in repositories that borrow from another one on a
   slow NFS server unnecessarily got more expensive due to recent code
   becoming more cautious in a naive way not to lose objects to pruning.
   (merge ee1c6c3 jk/prune-mtime later to maint).

 * The codepaths that read .gitignore and .gitattributes files have been
   taught that these files encoded in UTF-8 may have UTF-8 BOM marker at
   the beginning; this makes it in line with what we do for configuration
   files already.
   (merge 27547e5 cn/bom-in-gitignore later to maint).

 * a few helper scripts in the test suite did not report errors
   correctly.
   (merge de248e9 ep/fix-test-lib-functions-report later to maint).

 * The default $HOME/.gitconfig file created upon "git config --global"
   that edits it had incorrectly spelled user.name and user.email
   entries in it.
   (merge 7e11052 oh/fix-config-default-user-name-section later to maint).

 * "git cat-file bl $blob" failed to barf even though there is no
   object type that is "bl".
   (merge b7994af jk/type-from-string-gently later to maint).

 * The usual "git diff" when seeing a file turning into a directory
   showed a patchset to remove the file and create all files in the
   directory, but "git diff --no-index" simply refused to work.  Also,
   when asked to compare a file and a directory, imitate POSIX "diff"
   and compare the file with the file with the same name in the
   directory, instead of refusing to run.
   (merge 0615173 jc/diff-no-index-d-f later to maint).

 * "git rebase -i" moved the "current" command from "todo" to "done" a
   bit too prematurely, losing a step when a "pick" did not even start.
   (merge 8cbc57c ph/rebase-i-redo later to maint).

 * The connection initiation code for "ssh" transport tried to absorb
   differences between the stock "ssh" and Putty-supplied "plink" and
   its derivatives, but the logic to tell that we are using "plink"
   variants were too loose and falsely triggered when "plink" appeared
   anywhere in the path (e.g. "/home/me/bin/uplink/ssh").
   (merge baaf233 bc/connect-plink later to maint).

 * We have prepended $GIT_EXEC_PATH and the path "git" is installed in
   (typically "/usr/bin") to $PATH when invoking subprograms and hooks
   for almost eternity, but the original use case the latter tried to
   support was semi-bogus (i.e. install git to /opt/foo/git and run it
   without having /opt/foo on $PATH), and more importantly it has
   become less and less relevant as Git grew more mainstream (i.e. the
   users would _want_ to have it on their $PATH).  Stop prepending the
   path in which "git" is installed to users' $PATH, as that would
   interfere the command search order people depend on (e.g. they may
   not like versions of programs that are unrelated to Git in /usr/bin
   and want to override them by having different ones in /usr/local/bin
   and have the latter directory earlier in their $PATH).
   (merge a0b4507 jk/git-no-more-argv0-path-munging later to maint).

 * core.excludesfile (defaulting to $XDG_HOME/git/ignore) is supposed
   to be overridden by repository-specific .git/info/exclude file, but
   the order was swapped from the beginning. This belatedly fixes it.
   (merge 099d2d8 jc/gitignore-precedence later to maint).

 * There was a commented-out (instead of being marked to expect
   failure) test that documented a breakage that was fixed since the
   test was written; turn it into a proper test.
   (merge 66d2e04 sb/t1020-cleanup later to maint).

 * The "log --decorate" enhancement in Git 2.4 that shows the commit
   at the tip of the current branch e.g. "HEAD -> master", did not
   work with --decorate=full.
   (merge 429ad20 mg/log-decorate-HEAD later to maint).

 * The ref API did not handle cases where 'refs/heads/xyzzy/frotz' is
   removed at the same time as 'refs/heads/xyzzy' is added (or vice
   versa) very well.
   (merge c628edf mh/ref-directory-file later to maint).

 * Multi-ref transaction support we merged a few releases ago
   unnecessarily kept many file descriptors open, risking to fail with
   resource exhaustion.  This is for 2.4.x track.
   (merge 185ce3a mh/write-refs-sooner-2.4 later to maint).

 * "git bundle verify" did not diagnose extra parameters on the
   command line.
   (merge 7886cfa ps/bundle-verify-arg later to maint).

 * Various documentation mark-up fixes to make the output more
   consistent in general and also make AsciiDoctor (an alternative
   formatter) happier.
   (merge d0258b9 jk/asciidoc-markup-fix later to maint).
   (merge ad3967a jk/stripspace-asciidoctor-fix later to maint).
   (merge 975e382 ja/tutorial-asciidoctor-fix later to maint).

 * The code to read pack-bitmap wanted to allocate a few hundred
   pointers to a structure, but by mistake allocated and leaked memory
   enough to hold that many actual structures.  Correct the allocation
   size and also have it on stack, as it is small enough.
   (merge 599dc76 rs/plug-leak-in-pack-bitmaps later to maint).

 * The pull.ff configuration was supposed to override the merge.ff
   configuration, but it didn't.
   (merge db9bb28 pt/pull-ff-vs-merge-ff later to maint).

 * "git pull --log" and "git pull --no-log" worked as expected, but
   "git pull --log=20" did not.
   (merge 5061a44 pt/pull-log-n later to maint).

 * "git rerere forget" in a repository without rerere enabled gave a
   cryptic error message; it should be a silent no-op instead.
   (merge 0544574 jk/rerere-forget-check-enabled later to maint).

 * "git rebase -i" fired post-rewrite hook when it shouldn't (namely,
   when it was told to stop sequencing with 'exec' insn).
   (merge 141ff8f mm/rebase-i-post-rewrite-exec later to maint).

 * Clarify that "log --raw" and "log --format=raw" are unrelated
   concepts.
   (merge 92de921 mm/log-format-raw-doc later to maint).

 * Make "git stash something --help" error out, so that users can
   safely say "git stash drop --help".
   (merge 5ba2831 jk/stash-options later to maint).

 * The clean/smudge interface did not work well when filtering an
   empty contents (failed and then passed the empty input through).
   It can be argued that a filter that produces anything but empty for
   an empty input is nonsense, but if the user wants to do strange
   things, then why not?
   (merge f6a1e1e jh/filter-empty-contents later to maint).

 * Communication between the HTTP server and http_backend process can
   lead to a dead-lock when relaying a large ref negotiation request.
   Diagnose the situation better, and mitigate it by reading such a
   request first into core (to a reasonable limit).
   (merge 636614f jk/http-backend-deadlock later to maint).

 * "git clean pathspec..." tried to lstat(2) and complain even for
   paths outside the given pathspec.
   (merge 838d6a9 dt/clean-pathspec-filter-then-lstat later to maint).

 * Recent "git prune" traverses young unreachable objects to safekeep
   old objects in the reachability chain from them, which sometimes
   caused error messages that are unnecessarily alarming.
   (merge ce4e7b2 jk/squelch-missing-link-warning-for-unreachable later to maint).

 * The configuration reader/writer uses mmap(2) interface to access
   the files; when we find a directory, it barfed with "Out of memory?".
   (merge 9ca0aaf jk/diagnose-config-mmap-failure later to maint).

 * "color.diff.plain" was a misnomer; give it 'color.diff.context' as
   a more logical synonym.
   (merge 8dbf3eb jk/color-diff-plain-is-context later to maint).

 * The setup code used to die when core.bare and core.worktree are set
   inconsistently, even for commands that do not need working tree.
   (merge fada767 jk/die-on-bogus-worktree-late later to maint).

 * Recent Mac OS X updates breaks the logic to detect that the machine
   is on the AC power in the sample pre-auto-gc script.
   (merge c54c7b3 pa/auto-gc-mac-osx later to maint).

 * "git commit --cleanup=scissors" was not careful enough to protect
   against getting fooled by a line that looked like scissors.
   (merge fbfa097 sg/commit-cleanup-scissors later to maint).

 * "Have we lost a race with competing repack?" check was too
   expensive, especially while receiving a huge object transfer
   that runs index-pack (e.g. "clone" or "fetch").
   (merge 0eeb077 jk/index-pack-reduce-recheck later to maint).

 * The tcsh completion writes a bash scriptlet but that would have
   failed for users with noclobber set.
   (merge 0b1f688 af/tcsh-completion-noclobber later to maint).

 * "git for-each-ref" reported "missing object" for 0{40} when it
   encounters a broken ref.  The lack of object whose name is 0{40} is
   not the problem; the ref being broken is.
   (merge 501cf47 mh/reporting-broken-refs-from-for-each-ref later to maint).

 * Various fixes around "git am" that applies a patch to a history
   that is not there yet.
   (merge 6ea3b67 pt/am-abort-fix later to maint).

 * "git fsck" used to ignore missing or invalid objects recorded in reflog.
   (merge 19bf6c9 mh/fsck-reflog-entries later to maint).

 * "git format-patch --ignore-if-upstream A..B" did not like to be fed
   tags as boundary commits.
   (merge 9b7a61d jc/do-not-feed-tags-to-clear-commit-marks later to maint).

 * "git fetch --depth=<depth>" and "git clone --depth=<depth>" issued
   a shallow transfer request even to an upload-pack that does not
   support the capability.
   (merge eb86a50 me/fetch-into-shallow-safety later to maint).

 * "git rebase" did not exit with failure when format-patch it invoked
   failed for whatever reason.
   (merge 60d708b cb/rebase-am-exit-code later to maint).

 * Fix a small bug in our use of umask() return value.
   (merge 3096b2e jk/fix-refresh-utime later to maint).

 * An ancient test framework enhancement to allow color was not
   entirely correct; this makes it work even when tput needs to read
   from the ~/.terminfo under the user's real HOME directory.
   (merge d5c1b7c rh/test-color-avoid-terminfo-in-original-home later to maint).

 * A minor bugfix when pack bitmap is used with "rev-list --count".
   (merge c8a70d3 jk/rev-list-no-bitmap-while-pruning later to maint).

 * "git config" failed to update the configuration file when the
   underlying filesystem is incapable of renaming a file that is still
   open.
   (merge 7a64592 kb/config-unmap-before-renaming later to maint).

 * Avoid possible ssize_t to int truncation.
   (merge 6c8afe4 mh/strbuf-read-file-returns-ssize-t later to maint).

 * When you say "!<ENTER>" while running say "git log", you'd confuse
   yourself in the resulting shell, that may look as if you took
   control back to the original shell you spawned "git log" from but
   that isn't what is happening.  To that new shell, we leaked
   GIT_PAGER_IN_USE environment variable that was meant as a local
   communication between the original "Git" and subprocesses that was
   spawned by it after we launched the pager, which caused many
   "interesting" things to happen, e.g. "git diff | cat" still paints
   its output in color by default.

   Stop leaking that environment variable to the pager's half of the
   fork; we only need it on "Git" side when we spawn the pager.
   (merge 124b519 jc/unexport-git-pager-in-use-in-pager later to maint).

 * Abandoning an already applied change in "git rebase -i" with
   "--continue" left CHERRY_PICK_HEAD and confused later steps.
   (merge 0e0aff4 js/rebase-i-clean-up-upon-continue-to-skip later to maint).

 * We used to ask libCURL to use the most secure authentication method
   available when talking to an HTTP proxy only when we were told to
   talk to one via configuration variables.  We now ask libCURL to
   always use the most secure authentication method, because the user
   can tell libCURL to use an HTTP proxy via an environment variable
   without using configuration variables.
   (merge 5841520 et/http-proxyauth later to maint).

 * A fix to a minor regression to "git fsck" in v2.2 era that started
   complaining about a body-less tag object when it lacks a separator
   empty line after its header to separate it with a non-existent body.
   (merge 84d18c0 jc/fsck-retire-require-eoh later to maint).

 * Code cleanups and documentation updates.
   (merge 0269f96 mm/usage-log-l-can-take-regex later to maint).
   (merge 64f2589 nd/t1509-chroot-test later to maint).
   (merge d201a1e sb/test-bitmap-free-at-end later to maint).
   (merge 05bfc7d sb/line-log-plug-pairdiff-leak later to maint).
   (merge 846e5df pt/xdg-config-path later to maint).
   (merge 1154aa4 jc/plug-fmt-merge-msg-leak later to maint).
   (merge 319b678 jk/sha1-file-reduce-useless-warnings later to maint).
   (merge 9a35c14 fg/document-commit-message-stripping later to maint).
   (merge bbf431c ps/doc-packfile-vs-pack-file later to maint).
   (merge 309a9e3 jk/skip-http-tests-under-no-curl later to maint).
   (merge ccd593c dl/branch-error-message later to maint).
   (merge 22570b6 rs/janitorial later to maint).
   (merge 5c2a581 mc/commit-doc-grammofix later to maint).
   (merge ce41720 ah/usage-strings later to maint).
   (merge e6a268c sb/glossary-submodule later to maint).
   (merge ec48a76 sb/submodule-doc-intro later to maint).
   (merge 14f8b9b jk/clone-dissociate later to maint).
   (merge 055c7e9 sb/pack-protocol-mention-smart-http later to maint).
   (merge 7c37a5d jk/make-fix-dependencies later to maint).
   (merge fc0aa39 sg/merge-summary-config later to maint).
   (merge 329af6c pt/t0302-needs-sanity later to maint).
   (merge d614f07 fk/doc-format-patch-vn later to maint).
   (merge 72dbb36 sg/completion-commit-cleanup later to maint).
   (merge e654eb2 es/utf8-stupid-compiler-workaround later to maint).
   (merge 34b935c es/osx-header-pollutes-mask-macro later to maint).
   (merge ab7fade jc/prompt-document-ps1-state-separator later to maint).
   (merge 25f600e mm/describe-doc later to maint).
   (merge 83fe167 mm/branch-doc-updates later to maint).
   (merge 75d2e5a ls/hint-rev-list-count later to maint).
   (merge edc8f71 cb/subtree-tests-update later to maint).
   (merge 5330e6e sb/p5310-and-chain later to maint).
   (merge c4ac525 tb/checkout-doc later to maint).
   (merge e479c5f jk/pretty-encoding-doc later to maint).
   (merge 7e837c6 ss/clone-guess-dir-name-simplify later to maint).
