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