Magit v1.4.0 Release Notes
==========================

Released 1 April 2015 by Jonas Bernoulli.

This release sits in the middle of a commit marathon that lasted for
more than 4700 commits.

When I became Magit's new maintainer during the summer of 2013 Magit
was already a big success, but underneath its shiny surface it was
having some serious problems.  Over the years the source had gotten
very disorganized and many old abstractions were no longer sufficient.
Unfortunately existing code had almost never been adjusted when new
features had been added, leading to a lot of new code that worked
around limitations of existing code.

This was clearly not sustainable in the long run, and so I started
cleaning up and replacing the existing abstractions with simpler, yet
often more powerful implementations.  Unfortunately his had to happen
incrementally as it was seldom possible to cleanup one area without
making substantial changes elsewhere.  Along the way I also addressed
many of the hundreds of feature requests, but that was more of a bonus
- the focus was on getting the codebase ready for future improvements.

At the beginning of 2014 I moved development to the new next branch.
Working on a branch which was not used by thousands of Melpa users
allowed me to move faster and users were no longer affected by the
occasional regression.  But it also meant that I now had to maintain
two branches.  In hindsight I should have released the master branch
as 1.3.0 at that time, despite all the known defects it had.

Since then I have finished the cleanup on the next branch and then
moved on to implement many new features.  On the master branch the
focus was on bugfixes and the occasional backport.  This release is
based on the master branch.  Later this spring 2.1.0 will be released
based on the next branch.

Compiling a list of all changes in 1.4.0 would by a major amount of
work in itself, so instead the below list is for the most part limited
to major changes, which enabled the user visible changes.  Many users
don't have to be told about the new features anyway - they have been
using them for more than a year now.

Changes since v1.2.2
--------------------

 * The libraries `magit-topgit.el', `magit-stgit.el', and
   `magit-svn.el' all reincarnated as separate repository.

 * The libraries `magit-classic-theme.el' and `magit-simple-keys.el',
   which allowed users to undo some of the changes in older releases,
   were removed.

 * The library `rebase-mode.el' was renamed to `git-rebase-mode.el'
   and moved to the `magit/git-modes' repository.

 * The library `magit-log-edit-mode.el' was removed and replaced with
   `git-commit-mode.el' from the `magit/git-modes' repository.

 * The functionality provided by the library `magit-bisect.el' was
   replaced with a new implementation in `magit.el'.

 * The package `cl-lib` is now used instead of the obsolete `cl'.

 * The library `magit.el' no longer lacks any recognizable structure.

 * The macro `magit-define-command' was removed.
   The hook that was defined in addition to the command only served
   to make things more complicated and the generated doc-string was
   insufficient.

 * The use of "section actions" has been reduced to a minimum.
   Commands that behave differently depending on the type of the
   current section still use `magit-section-case' or in some cases
   even `magit-section-action', but the preferred way for users to
   add new variants now is to add a new command to the type-specific
   section keymap, instead of the hooks defined by
   `magit-section-action'.

 * More work is done directly in `magit-with-section'.
   Most of the helper functions were removed.  These functions
   were not intended to be used directly, but that did not keep
   contributors from doing so, leading to many inconsistencies.

 * The mode machinery was massively refactored.
   Most importantly the new macro `magit-mode-setup' was added,
   replacing the old `magit-mode-init' which forgoes most of the
   things each and every of its callers has to do, which let to many
   inconsistencies

 * The refresh machinery was massively refactored.
   A refresh now has to be requested more explicitly by either calling
   `magit-refresh' or one of the functions that call Git and then the
   former.  Also, refreshing now more often correctly preserves point.

 * Washing diffs now takes less cycles.
   Previously the code used to wash diffs was very complicated.  It
   passed around state using many dynamically bound variables, and
   called `git diff' many times.  Now we call `git diff' once and then
   wash its output in one go.

 * Commits and stashes are now washed using the regular diffwasher.

 * Low-level functions for running Git were massively refactored, and
   many new variants were added.  Previously many callers had to deal
   with the gory details themselves (and usually did it badly).

 * The output from processes is now logged in a dedicated buffer.
   From this buffer it's also possible to kill a running process.

 * The Wazzup buffer was massively refactored.
   All options to optionally make it faster were removed, as it is now
   faster out-of-the-box without sacrificing any functionality at all.

 * Many more competing abstractions were unified.
   It was common to have one no longer sufficient core abstraction, and
   several competing wrapper abstractions.  In most cases this has been
   replaced with a single, less complex implementation, which serves all
   of the current use cases.

 * Refreshing "after a asynchronous process has run" now happens after
   the process has actually finished.  That was always the intention,
   but not what actually used to happen.

 * The commit message is no longer provided when calling `git commit'.
   Instead Git populates a file with a template and then uses $EDITOR
   to have the user edit that.  This did not work so well for a while
   but now we succeed in having the emacsclient being used as $EDITOR.

 * A new Branch Manager was added.

 * Log learned to show optionally show author information in the
   margin.

 * Terminology with regards to what a tracking branch is, was fixed.

 * When creating a new branch the default choice is what Git would
   default to, instead of some silly name.

 * Tools used to test whether Git supports certain features was removed.
   Instead we now require a non-ancient version of Git.

 * The shell script `magit' reincarnated as a separate repository.

Authors
-------

  1838  Jonas Bernoulli
   171  Yann Hodique
   121  Pieter Praet
    59  Rémi Vanicat
    24  Nicolas Dudebout
    21  Takafumi Arakaki
    16  acple
    14  Phil Jackson
    13  Rüdiger Sonderfeld
    12  Mitchel Humpherys
     8  Servilio Afre Puentes
     7  Ramkumar Ramachandra
     7  Teruki Shigitani
     6  Lluís Vilanova
     6  Sergey Vinokurov
     5  Thierry Volpiatto
     4  Moritz Bunkus
     4  Noam Postavsky
     4  Seong-Kook Shin
     3  Laurent Laffont
     3  Leonardo Etcheverry
     3  Loic Dachary
     3  Raimon Grau
     3  Sébastien Gross
     2  Bastian Beischer
     2  Damien Cassou
     2  Evgkeni Sampelnikof
     2  Greg A. Woods
     2  Greg Sexton
     2  Jesse Alama
     2  Leandro Facchinetti
     2  Nguyễn Tuấn Anh
     2  Nick Alexander
     2  Pekka Pessi
     2  Philippe Vaucher
     2  Rafael Laboissiere
     2  Sebastian Wiesner
     1  Abdo Roig-Maranges
     1  Adam Spiers
     1  Andrei Chițu
     1  Andrew Schwartzmeyer
     1  Brandon W Maister
     1  Chris Done
     1  Chris Ring
     1  Christopher Monsanto
     1  Cornelius Mika
     1  Dan LaManna
     1  David Hull
     1  Dennis Paskorz
     1  Divye Kapoor
     1  Eric Schulte
     1  Felix Geller
     1  Feng Li
     1  Geoff Shannon
     1  Jan Tatarik
     1  Jeff Dairiki
     1  John Wiegley
     1  Jordan Greenberg
     1  Kyle Meyer
     1  Lele Gaifax
     1  Manuel Vázquez Acosta
     1  Marcel Wolf
     1  Marian Schubert
     1  Matus Goljer
     1  Nick Dimiduk
     1  Nicolas Richard
     1  Peter J. Weisberg
     1  Philipp Haselwarter
     1  Prathamesh Sonpatki
     1  Romain Francoise
     1  Roy Crihfield
     1  Sanjoy Das
     1  Sergey Pashinin
     1  Steve Purcell
     1  Steven Chow
     1  Steven Thomas
     1  Thomas Frössman
     1  Thomas Riccardi
     1  Ting-Yu Lin
     1  Wilfred Hughes
     1  Win Treese
     1  York Zhao
     1  aaa707
     1  Ævar Arnfjörð Bjarmason
