Magit v2.3.0 Release Notes
==========================

Released 28 October 2015 by Jonas Bernoulli.

We are pleased to announce the release of Magit version 2.3.0,
representing 367 commits by 12 people over 10 weeks.

Changes since v2.2.0
--------------------

* Added `--interactive' switch to `magit-rebase-popup' so that rebase
  variants which normally perform a non-interactive rebase can be used
  to perform an interactive rebase too.  #2186

* Commands that perform an interactive rebase should no longer be used
  non-interactively (i.e. they should only be used as commands).  #2187

* Rebasing commands now can start with a root commit.  Root commits
  are detected automatically, so users don't have to use the `--root'
  switch explicitly.  #2187

* Added new command `magit-checkout-file'.

* Added new option `magit-bury-buffer-function' to give users more
  control over how Magit buffers are buried, replacing the old binary
  option `magit-restore-window-configuration'.  The default is still
  the same, i.e. `magit-restore-window-configuration' is used.  #2193

* Added new function `magit-mode-quit-window' as a simpler variant to
  `magit-restore-window-configuration'.  #2193

* Information about related refs in `magit-revision-mode' buffers are
  now grouped in the same section as other headers and are formatted
  like those other headers instead of like diffstats.  The redundant
  header which previously grouped the related refs section is gone.
  All headers are inserted by the new `magit-insert-revision-headers'
  section inserter.  #2216

* No longer avoid calling git more than absolutely necessary when
  creating a `magit-revision-mode' buffer.  This simplifies parsing,
  makes it simpler to prettify how information is presented, allows
  users to customize how and in what order information is presented,
  and prepares for faster, asynchronously created diffs.  #2216

* The various sections in revision buffers are now inserted using new
  section inserters named `magit-insert-revision-{*}', all of which
  are part of the default value of `magit-revision-sections-hook'.
  #2216

* The various sections in diff buffers are now inserted using new
  section inserters named `magit-insert-diff-{*}', all of which are
  part of the default value of `magit-diff-sections-hook'.  #2216

* Added new option `magit-revision-headers-format' whose value is
  passed to `git show --format=' to insert most of the headers,
  excluding the related-refs headers.  The default value now uses
  placeholders which respect information in the file ".mailmap".
  #2216

* Removed options `magit-revision-show-notes',
  `magit-diff-show-xref-buttons', `magit-revision-show-xref-buttons',
  `magit-diff-show-diffstat', and `magit-revision-show-diffstat'.
  Whether these sections are inserted is now controlled using the
  hooks `magit-diff-section-hook' and `magit-revision-section-hook'.
  #2216

* Gravatar images can now be shown in `magit-revision-buffers'.  New
  option `magit-revision-show-gravatars' controls whether these images
  should be inserted and can also be used to adjust to customizations
  of `magit-revision-headers-format'.

  This feature is not enabled by default due to privacy concerns.

  Gravatar images are spliced into two halves which are then displayed
  on separate lines.  On OS X the splicing has a bug in some Emacs
  builds, which causes the top and bottom halves to be interchanged.
  Setting the new option `magit-revision-use-gravatar-kludge' to `t'
  works around this issue.  #2216

* After using the region to stage or discard parts of a hunk, point is
  now placed on the beginning of the next or previous block of changed
  lines.  Previously we just jumped to the beginning of the hunk at
  the same index as the previous hunk, but that often was very far
  away from where point was before the refresh.  #2227

* The function `magit-toplevel' was refactored and many tests were
  added.  It now returns the correct value when a symlink to a
  sub-directory of a working tree is involved.  #2242

* New option `magit-keep-region-overlay' allows displaying the region
  overlay together with the visualization of a valid Magit selection.
  See the doc-string for why we think you shouldn't do that, but if
  you disagree then you can now have it your way.  #2091

* Avoid the inefficiency of `git log --graph --max-count=N REV' (it
  calculates the graph for all reachable commits, not just the N
  commits), by additionally limiting the history using a range
  calculated from REV and N, when possible.  #2243

* Renamed `magit-file-buffer-mode' to `magit-file-mode'.  Related
  symbols were renamed accordingly.

* Added new minor mode `magit-blob-mode' and new commands
  `magit-blob-previous' and `magit-blob-next'.  #2195

* Added new commands `magit-branch-spinoff' and `magit-branch-reset'.
  #2191

* Added new option `magit-status-expand-stashes'.

* In addition to `default-directory' also set `list-buffers-directory'
  to the top-level of the working tree in Magit buffers, causing that
  directory to be displayed in the "File" column of the *Buffer List*
  buffer.

* Added a kludge to keep Cygwin and MYSYS2 executables from expanding
  globs when called from a native Windows Emacs executable.  #2281

* Added a revision stack.  The new commands `magit-copy-section-value'
  and `magit-copy-buffer-revision', which are intended for use inside
  Magit buffers, push an entry to the stack, and the new command
  `magit-pop-revision-stack' inserts a representation into an editable
  buffer.  New option `magit-pop-revision-stack-format' controls how
  the representation of the revision is formatted.  The old commands
  `magit-copy-as-kill' and `magit-copy-buffer-thing-as-kill' have been
  removed.  #2225

* The default values of options `magit-commit-extend-override-date'
  and `magit-commit-extend-override-date' changed to `t'.

* Added new option `magit-log-show-margin'.

* Added new option `magit-log-remove-graph-args'.  #2226

* Added support for showing actionable diffs inside logs.  #2226

* Added basic support for tracing the evolution of a region.  #2226

* Added new command `magit-stash-format-patch'.

* All apply variants learned how to apply multiple hunks at once. #2271

* Regular apply learned how to apply multiple files at once. #2271

* `git-commit-setup' learned to handle Cygwin paths.  It had to be
  taught about that separately from the rest of Magit, because, for
  historic reasons, we try to keep the `git-commit' package usable
  without Magit.

* The signatures of `magit-mode-setup' and `magit-mode-get-buffer'
  have changed, and `magit-mode-get-buffer-create' has been removed.
  Extensions have to be adjusted accordingly.  #2282.

* All Magit-Mode buffers (including process buffers, but excluding
  popup, blob-visiting, and file-visiting buffers, whose major-modes
  do not derive from `magit-mode' and therefore aren't "Magit-Mode
  buffers") are now displayed using `magit-display-buffer', which is a
  wrapper around the low-level `display-buffer'.  High-level functions
  such as `pop-to-buffer' and `switch-to-buffer' are no longer used to
  display Magit buffers.

  `magit-display-buffer' uses the function specified by the new option
  `magit-display-buffer-function' to actually display the buffer in
  some window.  The default value is `magit-display-buffer-traditional'.
  By implementing their own variant to wrap around `display-buffer',
  users can take complete control over how Magit buffers are displayed.
  It's also possible to use `display-buffer' directly and specify the
  display actions in `display-buffer-alist'.

  Added new options `magit-pre-display-buffer-hook' and
  `magit-post-display-buffer-hook', and removed the options
  `magit-status-buffer-switch-function' and
  `magit-diff-switch-buffer-function'.  #2282

* Added new options `magit-generate-buffer-name-function',
  `magit-buffer-name-format', and `magit-uniquify-buffer-names',
  replacing the various `magit-{*}-buffer-name-format' options.  #2282

* Added new command `magit-toggle-buffer-lock'.  Previously it was
  possible to prevent Magit from reusing an existing buffer to display
  something else, using the command `magit-rename-buffer' (which was
  removed).  Now this is done by locking the buffer to its value.
  #2282

* The status buffer is now always refreshed after running a Magit
  command triggers a refresh.  Previously that was only the case if
  the buffer in which the command was invoked was a Magit buffer too.

* Added optional support for refreshing the status buffer every time a
  buffer visiting a file, which is tracked in the current repository,
  is saved.  To enable this add `magit-after-save-refresh-buffers' to
  `after-save-hook'.

* Added new functions `magit-log-maybe-update-revision-buffer',
  `magit-log-maybe-update-blob-buffer',
  `magit-status-maybe-update-revision-buffer', and
  `magit-status-maybe-update-blob-buffer', and added some of them to
  `magit-section-movement-hook'.  Removed the function
  `magit-log-maybe-show-commit', which served about the same purpose
  as these new functions.  Previously one had to customize the option
  `magit-diff-auto-show' to control when the other buffer was updated,
  now one does so by adding or removing the above functions to or from
  `magit-section-movement-hook'.  The other window is only ever
  updated now, to initially create it, use `SPC'.  #2338

* Added new hook `magit-process-find-password-functions', with no
  default members.  These functions, if any, are run when git requests
  a password from the user, if there are no such functions, or if they
  fail, then the user has to type the password as before.  Added new
  function `magit-process-password-auth-source'.  It can be added to
  that hook and uses `auth-source' to get the password from one of the
  sources it supports.  #2311

* Removed broken support for unicode log graphs.

* `magit-expand-git-file-name' learned to use the output of `mount' to
  map Cygwin paths into native Windows paths.  `git-commit-setup' now
  uses `magit-expand-git-file-name' if available.  #2348

* Added new function `magit-define-popup-sequence-action' and taught
  related functions about `:sequence-actions'.

* Added new hook `magit-credential-hook' and added new hook function
  `magit-maybe-start-credential-cache-daemon' to it.  This allows
  starting Git's credential daemon separately, which is necessary
  because Emacs sends SIGHUP and closes the pty when e.g `git push'
  (which started the daemon) finishes.  Upon receiving that signal
  the daemon terminates.  We work around this by starting the daemon
  directly before invoking the git subcommand which might need
  credentials.  #2360

This release also contains the changes described in the v2.2.1 and
v2.2.2 release notes, as well as various other documentation fixes,
code clean-ups, bug fixes, and other small to medium improvements.

Authors
-------

   305  Jonas Bernoulli
    38  Kyle Meyer
    15  Noam Postavsky
     1  Andriy Kmit'
     1  Barak A. Pearlmutter
     1  Brian Warner
     1  Damien Cassou
     1  John Mastro
     1  Nicolas Petton
     1  Nikolay Martynov
     1  Peter Jaros
     1  Phil Sainty
