about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2019-01-13T19·33-0500
committerWilliam Carroll <wpcarro@gmail.com>2019-01-13T19·45-0500
commit481df5a3855ccd5ea3bf4d5f41ae780f4773b7b4 (patch)
tree3aeb7e20eaba176536cb8d10ba531ac39674fc4a /configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247
parent18b9930b8604134f087ca61fe94740b31f94327c (diff)
Remove Emacs spam
My inconsistent git history-keeping is coming to bite me here. At the
moment, I can only speculate about what went wrong here. The gist is
this: I unintentionally committed files that were supposed to be ignored

This commit removes those files which includes:

- auto-save-list
- elpa packages
- quelpa packages
- misc
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/AUTHORS.md311
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/LICENSE676
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/dir18
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.el592
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.elcbin20536 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.el658
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.elcbin28808 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autoloads.el2494
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.el260
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.elcbin12007 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.el210
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.elcbin13602 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.el926
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.elcbin34400 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.el366
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.elcbin11216 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.el1090
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.elcbin40140 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.el171
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.elcbin4892 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.el518
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.elcbin18611 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.el132
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.elcbin3279 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.el2780
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.elcbin124135 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.el509
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.elcbin18389 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.el700
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.elcbin24446 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.el563
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.elcbin27244 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.el2121
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.elcbin82190 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.el241
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.elcbin6819 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.el1708
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.elcbin88151 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.el240
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.elcbin8491 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.el279
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.elcbin16102 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.el1384
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.elcbin52828 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.el201
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.elcbin7770 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.el33
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.elcbin487 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-pkg.el11
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.el1121
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.elcbin44228 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.el748
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.elcbin36088 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.el1052
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.elcbin42597 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.el304
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.elcbin13297 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.el125
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.elcbin5561 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.el1403
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.elcbin52851 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.el908
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.elcbin41239 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.el492
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.elcbin31949 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.el632
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.elcbin45768 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.el502
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.elcbin27979 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.el146
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.elcbin5295 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.el132
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.elcbin4389 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.el978
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.elcbin33754 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.el370
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.elcbin21038 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.el174
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.elcbin8569 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.el616
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.elcbin19489 -> 0 bytes
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info184
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-17899
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-22676
84 files changed, 0 insertions, 39654 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/AUTHORS.md b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/AUTHORS.md
deleted file mode 100644
index 2d6388b76df7..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/AUTHORS.md
+++ /dev/null
@@ -1,311 +0,0 @@
-Authors
-=======
-
-The following people have contributed to Magit, including the
-libraries `git-commit.el`, `magit-popup.el`, and `with-editor.el`
-which are distributed as separate Elpa packages.
-
-For statistics see https://magit.vc/stats/authors.html.
-
-Names below are sorted alphabetically.
-
-Author
-------
-
-- Marius Vollmer <marius.vollmer@gmail.com>
-
-Maintainer
-----------
-
-- Jonas Bernoulli <jonas@bernoul.li>
-
-Developers
-----------
-
-- Kyle Meyer <kyle@kyleam.com>
-- Noam Postavsky <npostavs@users.sourceforge.net>
-
-Retired Maintainers and Developers
-----------------------------------
-
-- Nicolas Dudebout <nicolas.dudebout@gatech.edu>
-- Peter J. Weisberg <pj@irregularexpressions.net>
-- Pieter Praet <pieter@praet.org>
-- Phil Jackson <phil@shellarchive.co.uk>
-- Rémi Vanicat <vanicat@debian.org>
-- Yann Hodique <yann.hodique@gmail.com>
-
-Contributors
-------------
-
-- Aaron Culich <aculich@gmail.com>
-- Aaron Madlon-Kay <aaron@madlon-kay.com>
-- Abdo Roig-Maranges <abdo.roig@gmail.com>
-- Adam Benanti <0entropy@protonmail.com>
-- Adam Porter <adam@alphapapa.net>
-- Adam Spiers <emacs@adamspiers.org>
-- Adeodato Simó <dato@net.com.org.es>
-- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
-- Alan Falloon <alan.falloon@gmail.com>
-- Alban Gruin <alban@pa1ch.fr>
-- Aleksey Uimanov <s9gf4ult@gmail.com>
-- Alexander Gramiak <fice-t@protonmail.com>
-- Alex Dunn <adunn@ucsb.edu>
-- Alexey Voinov <alexey.v.voinov@gmail.com>
-- Alex Kost <alezost@gmail.com>
-- Alex Ott <alexott@gmail.com>
-- Allen <darkfeline@felesatra.moe>
-- Allen Li <darkfeline@felesatra.moe>
-- Andreas Fuchs <asf@boinkor.net>
-- Andreas Liljeqvist <andreas.liljeqvist@robacks.se>
-- Andreas Rottmann <a.rottmann@gmx.at>
-- Andrei Chițu <andrei.chitu1@gmail.com>
-- Andrew Kirkpatrick <andrew.kirkpatrick@adelaide.edu.au>
-- Andrew Schwartzmeyer <andrew@schwartzmeyer.com>
-- Andrey Smirnov <andrew.smirnov@gmail.com>
-- Andriy Kmit' <dev@madand.net>
-- Andy Sawyer <git@pureabstract.org>
-- Aria Edmonds <aria@ar1as.space>
-- Barak A. Pearlmutter <barak+git@pearlmutter.net>
-- Bar Magal <bmagamb@gmail.com>
-- Bart Bakker <bart@thesoftwarecraft.com>
-- Basil L. Contovounesios <contovob@tcd.ie>
-- Bastian Beischer <beischer@physik.rwth-aachen.de>
-- Benjamin Motz <benjamin.motz@mailbox.org>
-- Ben North <ben@redfrontdoor.org>
-- Ben Walton <bwalton@artsci.utoronto.ca>
-- Bob Uhl <buhl@zvelo.com>
-- Bradley Wright <brad@intranation.com>
-- Brandon W Maister <quodlibetor@gmail.com>
-- Brian Warner <warner@lothar.com>
-- Bryan Shell <bryan.shell@orbitz.com>
-- Buster Copley <buster@buster.me.uk>
-- Carl Lieberman <liebermancarl@gmail.com>
-- Chillar Anand <anand21nanda@gmail.com>
-- Chris Bernard <cebernard@gmail.com>
-- Chris Done <chrisdone@gmail.com>
-- Chris LaRose <cjlarose@gmail.com>
-- Chris Moore <dooglus@gmail.com>
-- Chris Ring <chris@ringthis.com>
-- Chris Shoemaker <chris@mojotech.com>
-- Christian Dietrich <christian.dietrich@informatik.uni-erlangen.de>
-- Christian Kluge <ckfrakturfreak@web.de>
-- Christophe Junke <junke.christophe@gmail.com>
-- Christopher Monsanto <chris@monsan.to>
-- Cornelius Mika <cornelius.mika@gmail.com>
-- Craig Andera <candera@wangdera.com>
-- Dale Hagglund <dale.hagglund@gmail.com>
-- Damien Cassou <damien@cassou.me>
-- Dan Erikson <derikson3@gmail.com>
-- Daniel Brockman <daniel@gointeractive.se>
-- Daniel Farina <drfarina@acm.org>
-- Daniel Gröber <daniel@dps.uibk.ac.at>
-- Daniel Hackney <dan@haxney.org>
-- Daniel Kraus <daniel@kraus.my>
-- Daniel Mai <daniel@danielmai.net>
-- Dan LaManna <dan.lamanna@gmail.com>
-- Dato Simó <dato@net.com.org.es>
-- David Abrahams <dave@boostpro.com>
-- David Ellison <davide@voicebox.com>
-- David Hull <david.hull@openx.com>
-- David L. Rager <ragerdl@gmail.com>
-- David Wallin <david.wallin@gmail.com>
-- Dean Kariniemi <8913263+d3k4r@users.noreply.github.com>
-- Dennis Paskorz <dennis@walltowall.com>
-- Divye Kapoor <divye@google.com>
-- Dominique Quatravaux <domq@google.com>
-- Duianto Vebotci <vebotci@openmailbox.org>
-- Eli Barzilay <eli@barzilay.org>
-- Eric Davis <ed@npri.org>
-- Eric Prud'hommeaux <eric@w3.org>
-- Eric Schulte <schulte.eric@gmail.com>
-- Erik Anderson <erikbpanderson@gmail.com>
-- Evgkeni Sampelnikof <esabof@gmail.com>
-- Eyal Lotem <eyal.lotem@gmail.com>
-- Fabian Wiget <fabacino@gmail.com>
-- Felix Geller <fgeller@gmail.com>
-- Felix Yan <felixonmars@archlinux.org>
-- Feng Li <fengli@blackmagicdesign.com>
-- Florian Ragwitz <rafl@debian.org>
-- Fritz Grabo <fritz.grabo@gmail.com>
-- Fritz Stelzer <brotzeitmacher@gmail.com>
-- Geoff Shannon <geoffpshannon@gmail.com>
-- George Kadianakis <desnacked@gmail.com>
-- Graham Clark <grclark@gmail.com>
-- Graham Dobbins <gdobbins@protonmail.com>
-- Greg A. Woods <woods@planix.com>
-- Greg Lucas <greg@glucas.net>
-- Greg Sexton <gregsexton@gmail.com>
-- Guillaume Martres <smarter@ubuntu.com>
-- Hannu Koivisto <azure@iki.fi>
-- Hans-Peter Deifel <hpdeifel@gmx.de>
-- Ian Eure <ian.eure@gmail.com>
-- Ingo Lohmar <i.lohmar@gmail.com>
-- Ioan-Adrian Ratiu <adi@adirat.com>
-- Ivan Brennan <ivan.brennan@gmail.com>
-- Jan Tatarik <jan.tatarik@xing.com>
-- Jasper St. Pierre <jstpierre@mecheye.net>
-- Jeff Bellegarde <jbellegarde@whitepages.com>
-- Jeff Dairiki <dairiki@dairiki.org>
-- Jeremy Meng <yumeng@microsoft.com>
-- Jesse Alama <jesse.alama@gmail.com>
-- Jim Blandy <jimb@red-bean.com>
-- Joakim Jalap <JOJA@stoneridge.com>
-- Johann Klähn <kljohann@gmail.com>
-- John Mastro <john.b.mastro@gmail.com>
-- John Wiegley <johnw@newartisans.com>
-- Jonas Bernoulli <jonas@bernoul.li>
-- Jonathan Leech-Pepin <jonathan.leechpepin@gmail.com>
-- Jonathan Roes <jroes@jroes.net>
-- Jon Vanderwijk <jonathn@github.com>
-- Jordan Greenberg <jordan@softwareslave.com>
-- Josiah Schwab <jschwab@gmail.com>
-- Julien Danjou <julien@danjou.info>
-- Justin Burkett <justin@burkett.cc>
-- Justin Caratzas <justin.caratzas@gmail.com>
-- Justin Guenther <jguenther@gmail.com>
-- Justin Thomas <justin.thomas1@gmail.com>
-- Kan-Ru Chen <kanru@kanru.info>
-- Kenny Ballou <kballou@devnulllabs.io>
-- Keshav Kini <keshav.kini@gmail.com>
-- Kévin Le Gouguec <kevin.legouguec@gmail.com>
-- Kimberly Wolk <kimwolk@hotmail.com>
-- Kyle Meyer <kyle@kyleam.com>
-- Laurent Laffont <laurent.laffont@gmail.com>
-- Laverne Schrock <laverne@schrock.email>
-- Leandro Facchinetti <me@leafac.com>
-- Lele Gaifax <lele@metapensiero.it>
-- Leo Liu <sdl.web@gmail.com>
-- Leonardo Etcheverry <leo@kalio.net>
-- Lingchao Xin <douglarek@users.noreply.github.com>
-- Li-Yun Chang <michael142536@gmail.com>
-- Lluís Vilanova <vilanova@ac.upc.edu>
-- Loic Dachary <loic@dachary.org>
-- Luís Oliveira <luismbo@gmail.com>
-- Luke Amdor <luke.amdor@gmail.com>
-- Manuel Vázquez Acosta <mva.led@gmail.com>
-- Marcel Wolf <mwolf@ml1.net>
-- Marc Herbert <marc.herbert@gmail.com>
-- Marcin Bachry <hegel666@gmail.com>
-- Marco Craveiro <marco.craveiro@gmail.com>
-- Marco Wahl <marcowahlsoft@gmail.com>
-- Marc Sherry <msherry@gmail.com>
-- Marian Schubert <marian.schubert@gmail.com>
-- Mario Rodas <marsam@users.noreply.github.com>
-- Marius Vollmer <marius.vollmer@gmail.com>
-- Mark Hepburn <Mark.Hepburn@csiro.au>
-- Mark Karpov <markkarpov@opmbx.org>
-- Mark Oteiza <mvoteiza@udel.edu>
-- Matthew Fluet <matthew.fluet@gmail.com>
-- Matthieu Hauglustaine <matt.hauglustaine@gmail.com>
-- Matus Goljer <dota.keys@gmail.com>
-- Michael Fogleman <michaelwfogleman@gmail.com>
-- Michael Griffiths <mikey@cich.li>
-- Michael Heerdegen <michael_heerdegen@web.de>
-- Michal Sojka <sojkam1@fel.cvut.cz>
-- Miciah Masters <miciah.masters@gmail.com>
-- Miles Bader <miles@gnu.org>
-- Miloš Mošić <mosic.milos@gmail.com>
-- Mitchel Humpherys <mitch.special@gmail.com>
-- Moritz Bunkus <moritz@bunkus.org>
-- Natalie Weizenbaum <nex342@gmail.com>
-- Nguyễn Tuấn Anh <ubolonton@gmail.com>
-- Nic Ferier <nic@ferrier.me.uk>
-- Nick Alcock <nick.alcock@oracle.com>
-- Nick Alexander <nalexander@mozilla.com>
-- Nick Dimiduk <ndimiduk@gmail.com>
-- Nicklas Lindgren <nili@gulmohar.se>
-- Nicolas Dudebout <nicolas.dudebout@gatech.edu>
-- Nicolas Petton <nicolas@petton.fr>
-- Nicolas Richard <theonewiththeevillook@yahoo.fr>
-- Nikolay Martynov <mar.kolya@gmail.com>
-- Noam Postavsky <npostavs@users.sourceforge.net>
-- N. Troy de Freitas <me@ntdef.com>
-- Ole Arndt <oliver.arndt@cegedim.com>
-- Oleh Krehel <ohwoeowho@gmail.com>
-- Orivej Desh <orivej@gmx.fr>
-- Óscar Fuentes <ofv@wanadoo.es>
-- Paul Stadig <paul@stadig.name>
-- Pavel Holejsovsky <pavel.holejsovsky@upek.com>
-- Pekka Pessi <nospam@pessi.fi>
-- Peter Eisentraut <peter@eisentraut.org>
-- Peter Jaros <peter.a.jaros@gmail.com>
-- Peter J. Weisberg <pj@irregularexpressions.net>
-- Peter Vasil <mail@petervasil.net>
-- Philippe Vaucher <philippe.vaucher@gmail.com>
-- Philipp Haselwarter <philipp@haselwarter.org>
-- Philipp Stephani <phst@google.com>
-- Philip Weaver <philip.weaver@gmail.com>
-- Phil Jackson <phil@shellarchive.co.uk>
-- Phil Sainty <phil@catalyst.net.nz>
-- Pierre Neidhardt <ambrevar@gmail.com>
-- Pieter Praet <pieter@praet.org>
-- Prathamesh Sonpatki <csonpatki@gmail.com>
-- rabio <rabiodev@o2.pl>
-- Radon Rosborough <radon.neon@gmail.com>
-- Rafael Laboissiere <rafael@laboissiere.net>
-- Raimon Grau <raimon@3scale.net>
-- Ramkumar Ramachandra <artagnon@gmail.com>
-- Remco van 't Veer <rwvtveer@xs4all.nl>
-- Rémi Vanicat <vanicat@debian.org>
-- René Stadler <mail@renestadler.de>
-- Richard Kim <emacs18@gmail.com>
-- Robert Boone <robo4288@gmail.com>
-- Robin Green <greenrd@greenrd.org>
-- Roger Crew <crew@cs.stanford.edu>
-- Romain Francoise <romain@orebokech.com>
-- Ron Parker <rparker@a123systems.com>
-- Roy Crihfield <rscrihf@gmail.com>
-- Rüdiger Sonderfeld <ruediger@c-plusplus.net>
-- Russell Black <black.russell@gmail.com>
-- Ryan C. Thompson <rct@thompsonclan.org>
-- Samuel Bronson <naesten@gmail.com>
-- Samuel W. Flint <swflint@flintfam.org>
-- Sanjoy Das <sanjoy@playingwithpointers.com>
-- Sean Allred <code@seanallred.com>
-- Sean Bryant <sbryant@hackinggibsons.com>
-- Sean Whitton <spwhitton@spwhitton.name>
-- Sebastian Wiesner <lunaryorn@gmail.com>
-- Sébastien Gross <seb@chezwam.org>
-- Seong-Kook Shin <cinsky@gmail.com>
-- Sergey Pashinin <sergey@pashinin.com>
-- Sergey Vinokurov <serg.foo@gmail.com>
-- Servilio Afre Puentes <afrepues@mcmaster.ca>
-- Silent Sphere <silentsphere110@gmail.com>
-- Štěpán Němec <stepnem@gmail.com>
-- Steven Chow <steve@myfreestuffapp.com>
-- Steven E. Harris <seh@panix.com>
-- Steven Thomas <sthomas314@gmail.com>
-- Steven Vancoillie <steven.vancoillie@runbox.com>
-- Steve Purcell <steve@sanityinc.com>
-- Suhail Shergill <suhailshergill@gmail.com>
-- Sylvain Rousseau <thisirs@gmail.com>
-- Syohei Yoshida <syohex@gmail.com>
-- Takafumi Arakaki <aka.tkf@gmail.com>
-- Teemu Likonen <tlikonen@iki.fi>
-- Teruki Shigitani <teruki.shigitani@gmail.com>
-- Thierry Volpiatto <thierry.volpiatto@gmail.com>
-- Thomas A Caswell <tcaswell@gmail.com>
-- Thomas Frössman <thomasf@jossystem.se>
-- Thomas Jost <thomas.jost@gmail.com>
-- Thomas Riccardi <riccardi.thomas@gmail.com>
-- Tibor Simko <tibor.simko@cern.ch>
-- Timo Juhani Lindfors <timo.lindfors@iki.fi>
-- Tim Perkins <tprk77@gmail.com>
-- Tim Wraight <tim@wraight.net>
-- Ting-Yu Lin <aethanyc@gmail.com>
-- Tom Feist <shabble@metavore.org>
-- Tunc Uzlu <bb2020@users.noreply.github.com>
-- Vineet Naik <vineet@helpshift.com>
-- Vladimir Panteleev <git@thecybershadow.net>
-- Wei Huang <weih@opera.com>
-- Wilfred Hughes <me@wilfred.me.uk>
-- Win Treese <treese@acm.org>
-- Wouter Bolsterlee <wouter@bolsterl.ee>
-- Xavier Noria <fxn@hashref.com>
-- Xu Chunyang <mail@xuchunyang.me>
-- Yann Hodique <yann.hodique@gmail.com>
-- York Zhao <gtdplatform@gmail.com>
-- Yuichi Higashi <aaa707b@gmail.com>
-- Yuri Khan <yurivkhan@gmail.com>
-- Zach Latta <zach@zachlatta.com>
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/LICENSE b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/LICENSE
deleted file mode 100644
index 443254047416..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/LICENSE
+++ /dev/null
@@ -1,676 +0,0 @@
-
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
- 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-  
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/dir b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/dir
deleted file mode 100644
index dfdbd715cf05..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/dir
+++ /dev/null
@@ -1,18 +0,0 @@
-This is the file .../info/dir, which contains the
-topmost node of the Info hierarchy, called (dir)Top.
-The first time you invoke Info you start off looking at this node.
-
-File: dir,	Node: Top	This is the top of the INFO tree
-
-  This (the Directory node) gives a menu of major topics.
-  Typing "q" exits, "H" lists all Info commands, "d" returns here,
-  "h" gives a primer for first-timers,
-  "mEmacs<Return>" visits the Emacs manual, etc.
-
-  In Emacs, you can click mouse button 2 on a menu item or cross reference
-  to select it.
-
-* Menu:
-
-Emacs
-* Magit: (magit).               Using Git from Emacs with Magit.
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.el
deleted file mode 100644
index 63f50a8a32b3..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.el
+++ /dev/null
@@ -1,592 +0,0 @@
-;;; git-rebase.el --- Edit Git rebase files  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Phil Jackson <phil@shellarchive.co.uk>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; This file is not part of GNU Emacs.
-
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this file.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This package assists the user in editing the list of commits to be
-;; rewritten during an interactive rebase.
-
-;; When the user initiates an interactive rebase, e.g. using "r e" in
-;; a Magit buffer or on the command line using "git rebase -i REV",
-;; Git invokes the `$GIT_SEQUENCE_EDITOR' (or if that is undefined
-;; `$GIT_EDITOR' or even `$EDITOR') letting the user rearrange, drop,
-;; reword, edit, and squash commits.
-
-;; This package provides the major-mode `git-rebase-mode' which makes
-;; doing so much more fun, by making the buffer more colorful and
-;; providing the following commands:
-;;
-;;   C-c C-c  Tell Git to make it happen.
-;;   C-c C-k  Tell Git that you changed your mind, i.e. abort.
-;;
-;;   p        Move point to previous line.
-;;   n        Move point to next line.
-;;
-;;   M-p      Move the commit at point up.
-;;   M-n      Move the commit at point down.
-;;
-;;   k        Drop the commit at point.
-;;   c        Don't drop the commit at point.
-;;   r        Change the message of the commit at point.
-;;   e        Edit the commit at point.
-;;   s        Squash the commit at point, into the one above.
-;;   f        Like "s" but don't also edit the commit message.
-;;   x        Add a script to be run with the commit at point
-;;            being checked out.
-;;   z        Add noop action at point.
-;;
-;;   SPC      Show the commit at point in another buffer.
-;;   RET      Show the commit at point in another buffer and
-;;            select its window.
-;;   C-/      Undo last change.
-
-;; You should probably also read the `git-rebase' manpage.
-
-;;; Code:
-
-(require 'dash)
-(require 'easymenu)
-(require 'server)
-(require 'with-editor)
-(require 'magit)
-
-(and (require 'async-bytecomp nil t)
-     (memq 'magit (bound-and-true-p async-bytecomp-allowed-packages))
-     (fboundp 'async-bytecomp-package-mode)
-     (async-bytecomp-package-mode 1))
-
-(eval-when-compile (require 'recentf))
-
-;;; Options
-;;;; Variables
-
-(defgroup git-rebase nil
-  "Edit Git rebase sequences."
-  :link '(info-link "(magit)Editing Rebase Sequences")
-  :group 'tools)
-
-(defcustom git-rebase-auto-advance t
-  "Whether to move to next line after changing a line."
-  :group 'git-rebase
-  :type 'boolean)
-
-(defcustom git-rebase-show-instructions t
-  "Whether to show usage instructions inside the rebase buffer."
-  :group 'git-rebase
-  :type 'boolean)
-
-(defcustom git-rebase-confirm-cancel t
-  "Whether confirmation is required to cancel."
-  :group 'git-rebase
-  :type 'boolean)
-
-;;;; Faces
-
-(defgroup git-rebase-faces nil
-  "Faces used by Git-Rebase mode."
-  :group 'faces
-  :group 'git-rebase)
-
-(defface git-rebase-hash '((t (:inherit magit-hash)))
-  "Face for commit hashes."
-  :group 'git-rebase-faces)
-
-(defface git-rebase-description nil
-  "Face for commit descriptions."
-  :group 'git-rebase-faces)
-
-(defface git-rebase-killed-action
-  '((t (:inherit font-lock-comment-face :strike-through t)))
-  "Face for commented action and exec lines."
-  :group 'git-rebase-faces)
-
-(defface git-rebase-comment-hash
-  '((t (:inherit git-rebase-hash :weight bold)))
-  "Face for commit hashes in commit message comments."
-  :group 'git-rebase-faces)
-
-(defface git-rebase-comment-heading
-  '((t :inherit font-lock-keyword-face))
-  "Face for headings in rebase message comments."
-  :group 'git-commit-faces)
-
-;;; Keymaps
-
-(defvar git-rebase-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map special-mode-map)
-    (cond ((featurep 'jkl)
-           (define-key map [return]    'git-rebase-show-commit)
-           (define-key map (kbd   "i") 'git-rebase-backward-line)
-           (define-key map (kbd   "k") 'forward-line)
-           (define-key map (kbd "M-i") 'git-rebase-move-line-up)
-           (define-key map (kbd "M-k") 'git-rebase-move-line-down)
-           (define-key map (kbd   "p") 'git-rebase-pick)
-           (define-key map (kbd   ",") 'git-rebase-kill-line))
-          (t
-           (define-key map (kbd "C-m") 'git-rebase-show-commit)
-           (define-key map (kbd   "p") 'git-rebase-backward-line)
-           (define-key map (kbd   "n") 'forward-line)
-           (define-key map (kbd "M-p") 'git-rebase-move-line-up)
-           (define-key map (kbd "M-n") 'git-rebase-move-line-down)
-           (define-key map (kbd   "c") 'git-rebase-pick)
-           (define-key map (kbd   "k") 'git-rebase-kill-line)
-           (define-key map (kbd "C-k") 'git-rebase-kill-line)))
-    (define-key map (kbd "e") 'git-rebase-edit)
-    (define-key map (kbd "m") 'git-rebase-edit)
-    (define-key map (kbd "f") 'git-rebase-fixup)
-    (define-key map (kbd "q") 'undefined)
-    (define-key map (kbd "r") 'git-rebase-reword)
-    (define-key map (kbd "w") 'git-rebase-reword)
-    (define-key map (kbd "s") 'git-rebase-squash)
-    (define-key map (kbd "x") 'git-rebase-exec)
-    (define-key map (kbd "y") 'git-rebase-insert)
-    (define-key map (kbd "z") 'git-rebase-noop)
-    (define-key map (kbd "SPC")     'git-rebase-show-or-scroll-up)
-    (define-key map (kbd "DEL")     'git-rebase-show-or-scroll-down)
-    (define-key map (kbd "C-x C-t") 'git-rebase-move-line-up)
-    (define-key map [M-up]          'git-rebase-move-line-up)
-    (define-key map [M-down]        'git-rebase-move-line-down)
-    (define-key map [remap undo]    'git-rebase-undo)
-    map)
-  "Keymap for Git-Rebase mode.")
-
-(cond ((featurep 'jkl)
-       (put 'git-rebase-reword       :advertised-binding "r")
-       (put 'git-rebase-move-line-up :advertised-binding (kbd "M-i"))
-       (put 'git-rebase-kill-line    :advertised-binding ","))
-      (t
-       (put 'git-rebase-reword       :advertised-binding "r")
-       (put 'git-rebase-move-line-up :advertised-binding (kbd "M-p"))
-       (put 'git-rebase-kill-line    :advertised-binding "k")))
-
-(easy-menu-define git-rebase-mode-menu git-rebase-mode-map
-  "Git-Rebase mode menu"
-  '("Rebase"
-    ["Pick" git-rebase-pick t]
-    ["Reword" git-rebase-reword t]
-    ["Edit" git-rebase-edit t]
-    ["Squash" git-rebase-squash t]
-    ["Fixup" git-rebase-fixup t]
-    ["Kill" git-rebase-kill-line t]
-    ["Noop" git-rebase-noop t]
-    ["Execute" git-rebase-exec t]
-    ["Move Down" git-rebase-move-line-down t]
-    ["Move Up" git-rebase-move-line-up t]
-    "---"
-    ["Cancel" with-editor-cancel t]
-    ["Finish" with-editor-finish t]))
-
-(defvar git-rebase-command-descriptions
-  '((with-editor-finish           . "tell Git to make it happen")
-    (with-editor-cancel           . "tell Git that you changed your mind, i.e. abort")
-    (git-rebase-backward-line     . "move point to previous line")
-    (forward-line                 . "move point to next line")
-    (git-rebase-move-line-up      . "move the commit at point up")
-    (git-rebase-move-line-down    . "move the commit at point down")
-    (git-rebase-show-or-scroll-up . "show the commit at point in another buffer")
-    (git-rebase-show-commit
-     . "show the commit at point in another buffer and select its window")
-    (undo                         . "undo last change")
-    (git-rebase-kill-line         . "drop the commit at point")
-    (git-rebase-insert            . "insert a line for an arbitrary commit")
-    (git-rebase-noop              . "add noop action at point")))
-
-;;; Commands
-
-(defun git-rebase-pick ()
-  "Use commit on current line."
-  (interactive)
-  (git-rebase-set-action "pick"))
-
-(defun git-rebase-reword ()
-  "Edit message of commit on current line."
-  (interactive)
-  (git-rebase-set-action "reword"))
-
-(defun git-rebase-edit ()
-  "Stop at the commit on the current line."
-  (interactive)
-  (git-rebase-set-action "edit"))
-
-(defun git-rebase-squash ()
-  "Meld commit on current line into previous commit, edit message."
-  (interactive)
-  (git-rebase-set-action "squash"))
-
-(defun git-rebase-fixup ()
-  "Meld commit on current line into previous commit, discard its message."
-  (interactive)
-  (git-rebase-set-action "fixup"))
-
-(defvar-local git-rebase-line nil)
-(defvar-local git-rebase-comment-re nil)
-
-(defun git-rebase-set-action (action)
-  (goto-char (line-beginning-position))
-  (if (and (looking-at git-rebase-line)
-           (not (string-match-p "\\(e\\|exec\\|noop\\)$" (match-string 1))))
-      (let ((inhibit-read-only t))
-        (replace-match action t t nil 1)
-        (when git-rebase-auto-advance
-          (forward-line)))
-    (ding)))
-
-(defun git-rebase-line-p (&optional pos)
-  (save-excursion
-    (when pos (goto-char pos))
-    (goto-char (line-beginning-position))
-    (looking-at-p git-rebase-line)))
-
-(defun git-rebase-region-bounds ()
-  (when (use-region-p)
-    (let ((beg (save-excursion (goto-char (region-beginning))
-                               (line-beginning-position)))
-          (end (save-excursion (goto-char (region-end))
-                               (line-end-position))))
-      (when (and (git-rebase-line-p beg)
-                 (git-rebase-line-p end))
-        (list beg (1+ end))))))
-
-(defun git-rebase-move-line-down (n)
-  "Move the current commit (or command) N lines down.
-If N is negative, move the commit up instead.  With an active
-region, move all the lines that the region touches, not just the
-current line."
-  (interactive "p")
-  (pcase-let* ((`(,beg ,end)
-                (or (git-rebase-region-bounds)
-                    (list (line-beginning-position)
-                          (1+ (line-end-position)))))
-               (pt-offset (- (point) beg))
-               (mark-offset (and mark-active (- (mark) beg))))
-    (save-restriction
-      (narrow-to-region
-       (point-min)
-       (1+ (save-excursion
-             (goto-char (point-min))
-             (while (re-search-forward git-rebase-line nil t))
-             (point))))
-      (if (or (and (< n 0) (= beg (point-min)))
-              (and (> n 0) (= end (point-max)))
-              (> end (point-max)))
-          (ding)
-        (goto-char (if (< n 0) beg end))
-        (forward-line n)
-        (atomic-change-group
-          (let ((inhibit-read-only t))
-            (insert (delete-and-extract-region beg end)))
-          (let ((new-beg (- (point) (- end beg))))
-            (when (use-region-p)
-              (setq deactivate-mark nil)
-              (set-mark (+ new-beg mark-offset)))
-            (goto-char (+ new-beg pt-offset))))))))
-
-(defun git-rebase-move-line-up (n)
-  "Move the current commit (or command) N lines up.
-If N is negative, move the commit down instead.  With an active
-region, move all the lines that the region touches, not just the
-current line."
-  (interactive "p")
-  (git-rebase-move-line-down (- n)))
-
-(defun git-rebase-highlight-region (start end window rol)
-  (let ((inhibit-read-only t)
-        (deactivate-mark nil)
-        (bounds (git-rebase-region-bounds)))
-    (mapc #'delete-overlay magit-section-highlight-overlays)
-    (when bounds
-      (magit-section-make-overlay (car bounds) (cadr bounds)
-                                  'magit-section-heading-selection))
-    (if (and bounds (not magit-keep-region-overlay))
-        (funcall (default-value 'redisplay-unhighlight-region-function) rol)
-      (funcall (default-value 'redisplay-highlight-region-function)
-               start end window rol))))
-
-(defun git-rebase-unhighlight-region (rol)
-  (mapc #'delete-overlay magit-section-highlight-overlays)
-  (funcall (default-value 'redisplay-unhighlight-region-function) rol))
-
-(defun git-rebase-kill-line ()
-  "Kill the current action line."
-  (interactive)
-  (goto-char (line-beginning-position))
-  (when (and (looking-at git-rebase-line)
-             (not (eq (char-after) (string-to-char comment-start))))
-    (let ((inhibit-read-only t))
-      (insert comment-start)
-      (insert " "))
-    (when git-rebase-auto-advance
-      (forward-line))))
-
-(defun git-rebase-insert (rev)
-  "Read an arbitrary commit and insert it below current line."
-  (interactive (list (magit-read-branch-or-commit "Insert revision")))
-  (forward-line)
-  (--if-let (magit-rev-format "%h %s" rev)
-      (let ((inhibit-read-only t))
-        (insert "pick " it ?\n))
-    (user-error "Unknown revision")))
-
-(defun git-rebase-exec (arg)
-  "Insert a shell command to be run after the proceeding commit.
-
-If there already is such a command on the current line, then edit
-that instead.  With a prefix argument insert a new command even
-when there already is one on the current line.  With empty input
-remove the command on the current line, if any."
-  (interactive "P")
-  (let ((inhibit-read-only t) initial command)
-    (unless arg
-      (goto-char (line-beginning-position))
-      (when (looking-at (concat git-rebase-comment-re "?"
-                                "\\(e\\|exec\\) \\(.*\\)"))
-        (setq initial (match-string-no-properties 2))))
-    (setq command (read-shell-command "Execute: " initial))
-    (pcase (list command initial)
-      (`("" nil) (ding))
-      (`(""  ,_)
-       (delete-region (match-beginning 0) (1+ (match-end 0))))
-      (`(,_ nil)
-       (forward-line)
-       (insert (concat "exec " command "\n"))
-       (unless git-rebase-auto-advance
-         (forward-line -1)))
-      (_
-       (replace-match (concat "exec " command) t t)
-       (if git-rebase-auto-advance
-           (forward-line)
-         (goto-char (line-beginning-position)))))))
-
-(defun git-rebase-noop (&optional arg)
-  "Add noop action at point.
-
-If the current line already contains a a noop action, leave it
-unchanged.  If there is a commented noop action present, remove
-the comment.  Otherwise add a new noop action.  With a prefix
-argument insert a new noop action regardless what is already
-present on the current line.
-
-A noop action can be used to make git perform a rebase even if
-no commits are selected.  Without the noop action present, git
-would see an empty file and therefore do nothing."
-  (interactive "P")
-  (goto-char (line-beginning-position))
-  ;; The extra space at the end is only there to make the action
-  ;; consistent with the others (action argument). This keeps
-  ;; the regexp `git-rebase-line' from getting complicated.
-  (let ((noop-string "noop \n"))
-    (when (or arg (not (looking-at noop-string)))
-      (let ((inhibit-read-only t))
-        (if (and (not arg)
-                 (looking-at (concat comment-start noop-string)))
-            (delete-char 1)
-          (insert noop-string))))))
-
-(defun git-rebase-undo (&optional arg)
-  "Undo some previous changes.
-Like `undo' but works in read-only buffers."
-  (interactive "P")
-  (let ((inhibit-read-only t))
-    (undo arg)))
-
-(defun git-rebase--show-commit (&optional scroll)
-  (let ((disable-magit-save-buffers t))
-    (save-excursion
-      (goto-char (line-beginning-position))
-      (--if-let (and (looking-at git-rebase-line)
-                     (match-string 2))
-          (pcase scroll
-            (`up   (magit-diff-show-or-scroll-up))
-            (`down (magit-diff-show-or-scroll-down))
-            (_     (apply #'magit-show-commit it (magit-diff-arguments))))
-        (ding)))))
-
-(defun git-rebase-show-commit ()
-  "Show the commit on the current line if any."
-  (interactive)
-  (git-rebase--show-commit))
-
-(defun git-rebase-show-or-scroll-up ()
-  "Update the commit buffer for commit on current line.
-
-Either show the commit at point in the appropriate buffer, or if
-that buffer is already being displayed in the current frame and
-contains information about that commit, then instead scroll the
-buffer up."
-  (interactive)
-  (git-rebase--show-commit 'up))
-
-(defun git-rebase-show-or-scroll-down ()
-  "Update the commit buffer for commit on current line.
-
-Either show the commit at point in the appropriate buffer, or if
-that buffer is already being displayed in the current frame and
-contains information about that commit, then instead scroll the
-buffer down."
-  (interactive)
-  (git-rebase--show-commit 'down))
-
-(defun git-rebase-backward-line (&optional n)
-  "Move N lines backward (forward if N is negative).
-Like `forward-line' but go into the opposite direction."
-  (interactive "p")
-  (forward-line (- (or n 1))))
-
-;;; Mode
-
-;;;###autoload
-(define-derived-mode git-rebase-mode special-mode "Git Rebase"
-  "Major mode for editing of a Git rebase file.
-
-Rebase files are generated when you run 'git rebase -i' or run
-`magit-interactive-rebase'.  They describe how Git should perform
-the rebase.  See the documentation for git-rebase (e.g., by
-running 'man git-rebase' at the command line) for details."
-  :group 'git-rebase
-  (setq comment-start (or (magit-get "core.commentChar") "#"))
-  (setq git-rebase-comment-re (concat "^" (regexp-quote comment-start)))
-  (setq git-rebase-line
-        (concat "^\\(" (regexp-quote comment-start) "? *"
-                "\\(?:[fprse]\\|pick\\|reword\\|edit\\|squash\\|fixup\\|exec\\|noop\\)\\) "
-                "\\(?:\\([^ \n]+\\) \\(.*\\)\\)?"))
-  (setq font-lock-defaults (list (git-rebase-mode-font-lock-keywords) t t))
-  (unless git-rebase-show-instructions
-    (let ((inhibit-read-only t))
-      (flush-lines git-rebase-comment-re)))
-  (unless with-editor-mode
-    ;; Maybe already enabled when using `shell-command' or an Emacs shell.
-    (with-editor-mode 1))
-  (when git-rebase-confirm-cancel
-    (add-hook 'with-editor-cancel-query-functions
-              'git-rebase-cancel-confirm nil t))
-  (setq-local redisplay-highlight-region-function 'git-rebase-highlight-region)
-  (setq-local redisplay-unhighlight-region-function 'git-rebase-unhighlight-region)
-  (add-hook 'with-editor-pre-cancel-hook  'git-rebase-autostash-save  nil t)
-  (add-hook 'with-editor-post-cancel-hook 'git-rebase-autostash-apply nil t)
-  (setq imenu-prev-index-position-function
-        #'magit-imenu--rebase-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        #'magit-imenu--rebase-extract-index-name-function)
-  (when (boundp 'save-place)
-    (setq save-place nil)))
-
-(defun git-rebase-cancel-confirm (force)
-  (or (not (buffer-modified-p))
-      force
-      (magit-confirm 'abort-rebase "Abort this rebase" nil 'noabort)))
-
-(defun git-rebase-autostash-save ()
-  (--when-let (magit-file-line (magit-git-dir "rebase-merge/autostash"))
-    (push (cons 'stash it) with-editor-cancel-alist)))
-
-(defun git-rebase-autostash-apply ()
-  (--when-let (cdr (assq 'stash with-editor-cancel-alist))
-    (magit-stash-apply it)))
-
-(defun git-rebase-match-comment-line (limit)
-  (re-search-forward (concat git-rebase-comment-re ".*") limit t))
-
-(defun git-rebase-mode-font-lock-keywords ()
-  "Font lock keywords for Git-Rebase mode."
-  (let ((action-re "\
-\\([efprs]\\|pick\\|reword\\|edit\\|squash\\|fixup\\) \\([^ \n]+\\) \\(.*\\)"))
-    `((,(concat "^" action-re)
-       (1 'font-lock-keyword-face)
-       (2 'git-rebase-hash)
-       (3 'git-rebase-description))
-      ("^\\(exec\\) \\(.*\\)"
-       (1 'font-lock-keyword-face)
-       (2 'git-rebase-description))
-      ("^\\(noop\\)"
-       (1 'font-lock-keyword-face))
-      (git-rebase-match-comment-line 0 'font-lock-comment-face)
-      (,(concat git-rebase-comment-re " *" action-re)
-       0 'git-rebase-killed-action t)
-      ("\\[[^[]*\\]"
-       0 'magit-keyword t)
-      (,(format "^%s Rebase \\([^ ]*\\) onto \\([^ ]*\\)" comment-start)
-       (1 'git-rebase-comment-hash t)
-       (2 'git-rebase-comment-hash t))
-      (,(format "^%s \\(Commands:\\)" comment-start)
-       (1 'git-rebase-comment-heading t)))))
-
-(defun git-rebase-mode-show-keybindings ()
-  "Modify the \"Commands:\" section of the comment Git generates
-at the bottom of the file so that in place of the one-letter
-abbreviation for the command, it shows the command's keybinding.
-By default, this is the same except for the \"pick\" command."
-  (let ((inhibit-read-only t))
-    (save-excursion
-      (goto-char (point-min))
-      (when (and git-rebase-show-instructions
-                 (re-search-forward
-                  (concat git-rebase-comment-re "\\s-+p, pick")
-                  nil t))
-        (goto-char (line-beginning-position))
-        (pcase-dolist (`(,cmd . ,desc) git-rebase-command-descriptions)
-          (insert (format "%s %-8s %s\n"
-                          comment-start
-                          (substitute-command-keys (format "\\[%s]" cmd))
-                          desc)))
-        (while (re-search-forward (concat git-rebase-comment-re
-                                          "\\(  ?\\)\\([^\n,],\\) "
-                                          "\\([^\n ]+\\) ")
-                                  nil t)
-          (let ((cmd (intern (concat "git-rebase-" (match-string 3)))))
-            (if (not (fboundp cmd))
-                (delete-region (line-beginning-position) (1+ (line-end-position)))
-              (replace-match " " t t nil 1)
-              (replace-match
-               (format "%-8s"
-                       (mapconcat #'key-description
-                                  (--remove (eq (elt it 0) 'menu-bar)
-                                            (reverse (where-is-internal cmd)))
-                                  ", "))
-               t t nil 2))))))))
-
-(add-hook 'git-rebase-mode-hook 'git-rebase-mode-show-keybindings t)
-
-(defun git-rebase-mode-disable-before-save-hook ()
-  (set (make-local-variable 'before-save-hook) nil))
-
-(add-hook 'git-rebase-mode-hook 'git-rebase-mode-disable-before-save-hook)
-
-;;;###autoload
-(defconst git-rebase-filename-regexp "/git-rebase-todo\\'")
-;;;###autoload
-(add-to-list 'auto-mode-alist
-             (cons git-rebase-filename-regexp 'git-rebase-mode))
-
-(add-to-list 'with-editor-server-window-alist
-             (cons git-rebase-filename-regexp 'switch-to-buffer))
-
-(eval-after-load 'recentf
-  '(add-to-list 'recentf-exclude git-rebase-filename-regexp))
-
-(add-to-list 'with-editor-file-name-history-exclude git-rebase-filename-regexp)
-
-(provide 'git-rebase)
-;;; git-rebase.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.elc
deleted file mode 100644
index 165b9439914f..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/git-rebase.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.el
deleted file mode 100644
index fde59e85cbd1..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.el
+++ /dev/null
@@ -1,658 +0,0 @@
-;;; magit-apply.el --- apply Git diffs  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements commands for applying Git diffs or parts
-;; of such a diff.  The supported "apply variants" are apply, stage,
-;; unstage, discard, and reverse - more than Git itself knows about,
-;; at least at the porcelain level.
-
-;;; Code:
-
-(require 'magit-core)
-(require 'magit-diff)
-(require 'magit-wip)
-
-;; For `magit-apply'
-(declare-function magit-am-popup "magit-sequence" (&optional arg))
-(declare-function magit-patch-apply-popup "magit-files" (&optional arg))
-;; For `magit-discard-files'
-(declare-function magit-checkout-stage "magit-merge" (file arg))
-(declare-function magit-checkout-read-stage "magit-merge" (file))
-(defvar auto-revert-verbose)
-;; For `magit-stage-untracked'
-(declare-function magit-submodule-add "magit-submodule"
-                  (url &optional path name args))
-(declare-function magit-submodule-read-name-for-path "magit-submodule"
-                  (path &optional prefer-short))
-(declare-function borg--maybe-absorb-gitdir "borg" (pkg))
-(declare-function borg--sort-submodule-sections "borg" (file))
-(defvar borg-user-emacs-directory)
-
-;;; Options
-
-(defcustom magit-delete-by-moving-to-trash t
-  "Whether Magit uses the system's trash can.
-
-You should absolutely not disable this and also remove `discard'
-from `magit-no-confirm'.  You shouldn't do that even if you have
-all of the Magit-Wip modes enabled, because those modes do not
-track any files that are not tracked in the proper branch."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-essentials
-  :type 'boolean)
-
-(defcustom magit-unstage-committed t
-  "Whether unstaging a committed change reverts it instead.
-
-A committed change cannot be unstaged, because staging and
-unstaging are actions that are concerned with the differences
-between the index and the working tree, not with committed
-changes.
-
-If this option is non-nil (the default), then typing \"u\"
-\(`magit-unstage') on a committed change, causes it to be
-reversed in the index but not the working tree.  For more
-information see command `magit-reverse-in-index'."
-  :package-version '(magit . "2.4.1")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-reverse-atomically nil
-  "Whether to reverse changes atomically.
-
-If some changes can be reversed while others cannot, then nothing
-is reversed if the value of this option is non-nil.  But when it
-is nil, then the changes that can be reversed are reversed and
-for the other changes diff files are created that contain the
-rejected reversals."
-  :package-version '(magit . "2.7.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-;;; Commands
-;;;; Apply
-
-(defun magit-apply (&rest args)
-  "Apply the change at point to the working tree.
-With a prefix argument fallback to a 3-way merge.  Doing
-so causes the change to be applied to the index as well."
-  (interactive (and current-prefix-arg (list "--3way")))
-  (--when-let (magit-apply--get-selection)
-    (pcase (list (magit-diff-type) (magit-diff-scope))
-      (`(,(or `unstaged `staged) ,_)
-       (user-error "Change is already in the working tree"))
-      (`(untracked ,(or `file `files))
-       (magit-am-popup))
-      (`(,_ region) (magit-apply-region it args))
-      (`(,_   hunk) (magit-apply-hunk   it args))
-      (`(,_  hunks) (magit-apply-hunks  it args))
-      (`(rebase-sequence file) (magit-patch-apply-popup))
-      (`(,_   file) (magit-apply-diff   it args))
-      (`(,_  files) (magit-apply-diffs  it args)))))
-
-(defun magit-apply--section-content (section)
-  (buffer-substring-no-properties (if (magit-hunk-section-p section)
-                                      (oref section start)
-                                    (oref section content))
-                                  (oref section end)))
-
-(defun magit-apply-diffs (sections &rest args)
-  (setq sections (magit-apply--get-diffs sections))
-  (magit-apply-patch sections args
-                     (mapconcat
-                      (lambda (s)
-                        (concat (magit-diff-file-header s)
-                                (magit-apply--section-content s)))
-                      sections "")))
-
-(defun magit-apply-diff (section &rest args)
-  (setq section (car (magit-apply--get-diffs (list section))))
-  (magit-apply-patch section args
-                     (concat (magit-diff-file-header section)
-                             (magit-apply--section-content section))))
-
-(defun magit-apply-hunks (sections &rest args)
-  (let ((section (oref (car sections) parent)))
-    (when (string-match "^diff --cc" (oref section value))
-      (user-error "Cannot un-/stage resolution hunks.  Stage the whole file"))
-    (magit-apply-patch section args
-                       (concat (oref section header)
-                               (mapconcat 'magit-apply--section-content
-                                          sections "")))))
-
-(defun magit-apply-hunk (section &rest args)
-  (when (string-match "^diff --cc" (magit-section-parent-value section))
-    (user-error "Cannot un-/stage resolution hunks.  Stage the whole file"))
-  (magit-apply-patch (oref section parent) args
-                     (concat (magit-diff-file-header section)
-                             (magit-apply--section-content section))))
-
-(defun magit-apply-region (section &rest args)
-  (unless (magit-diff-context-p)
-    (user-error "Not enough context to apply region.  Increase the context"))
-  (when (string-match "^diff --cc" (magit-section-parent-value section))
-    (user-error "Cannot un-/stage resolution hunks.  Stage the whole file"))
-  (magit-apply-patch (oref section parent) args
-                     (concat (magit-diff-file-header section)
-                             (magit-diff-hunk-region-patch section args))))
-
-(defun magit-apply-patch (section:s args patch)
-  (let* ((files (if (atom section:s)
-                    (list (oref section:s value))
-                  (--map (oref it value) section:s)))
-         (command (symbol-name this-command))
-         (command (if (and command (string-match "^magit-\\([^-]+\\)" command))
-                      (match-string 1 command)
-                    "apply")))
-    (when (and magit-wip-before-change-mode (not inhibit-magit-refresh))
-      (magit-wip-commit-before-change files (concat " before " command)))
-    (with-temp-buffer
-      (insert patch)
-      (magit-run-git-with-input
-       "apply" args "-p0"
-       (unless (magit-diff-context-p) "--unidiff-zero")
-       "--ignore-space-change" "-"))
-    (unless inhibit-magit-refresh
-      (when magit-wip-after-apply-mode
-        (magit-wip-commit-after-apply files (concat " after " command)))
-      (magit-refresh))))
-
-(defun magit-apply--get-selection ()
-  (or (magit-region-sections '(hunk file) t)
-      (let ((section (magit-current-section)))
-        (pcase (oref section type)
-          ((or `hunk `file) section)
-          ((or `staged `unstaged `untracked
-               `stashed-index `stashed-worktree `stashed-untracked)
-           (oref section children))
-          (_ (user-error "Cannot apply this, it's not a change"))))))
-
-(defun magit-apply--get-diffs (sections)
-  (magit-section-case
-    ([file diffstat]
-     (--map (or (magit-get-section
-                 (append `((file . ,(oref it value)))
-                         (magit-section-ident magit-root-section)))
-                (error "Cannot get required diff headers"))
-            sections))
-    (t sections)))
-
-(defun magit-apply--diff-ignores-whitespace-p ()
-  (and (cl-intersection (if (derived-mode-p 'magit-diff-mode)
-                            (nth 2 magit-refresh-args)
-                          magit-diff-section-arguments)
-                        '("--ignore-space-at-eol"
-                          "--ignore-space-change"
-                          "--ignore-all-space"
-                          "--ignore-blank-lines")
-                        :test #'equal)
-       t))
-
-;;;; Stage
-
-(defun magit-stage (&optional intent)
-  "Add the change at point to the staging area.
-With a prefix argument, INTENT, and an untracked file (or files)
-at point, stage the file but not its content."
-  (interactive "P")
-  (--if-let (and (derived-mode-p 'magit-mode) (magit-apply--get-selection))
-      (pcase (list (magit-diff-type)
-                   (magit-diff-scope)
-                   (magit-apply--diff-ignores-whitespace-p))
-        (`(untracked     ,_  ,_) (magit-stage-untracked intent))
-        (`(unstaged  region  ,_) (magit-apply-region it "--cached"))
-        (`(unstaged    hunk  ,_) (magit-apply-hunk   it "--cached"))
-        (`(unstaged   hunks  ,_) (magit-apply-hunks  it "--cached"))
-        (`(unstaged    file   t) (magit-apply-diff   it "--cached"))
-        (`(unstaged   files   t) (magit-apply-diffs  it "--cached"))
-        (`(unstaged    list   t) (magit-apply-diffs  it "--cached"))
-        (`(unstaged    file nil) (magit-stage-1 "-u" (list (oref it value))))
-        (`(unstaged   files nil) (magit-stage-1 "-u" (magit-region-values nil t)))
-        (`(unstaged    list nil) (magit-stage-modified))
-        (`(staged        ,_  ,_) (user-error "Already staged"))
-        (`(committed     ,_  ,_) (user-error "Cannot stage committed changes"))
-        (`(undefined     ,_  ,_) (user-error "Cannot stage this change")))
-    (call-interactively 'magit-stage-file)))
-
-;;;###autoload
-(defun magit-stage-file (file)
-  "Stage all changes to FILE.
-With a prefix argument or when there is no file at point ask for
-the file to be staged.  Otherwise stage the file at point without
-requiring confirmation."
-  (interactive
-   (let* ((atpoint (magit-section-when (file)))
-          (current (magit-file-relative-name))
-          (choices (nconc (magit-unstaged-files)
-                          (magit-untracked-files)))
-          (default (car (member (or atpoint current) choices))))
-     (list (if (or current-prefix-arg (not default))
-               (magit-completing-read "Stage file" choices
-                                      nil t nil nil default)
-             default))))
-  (magit-with-toplevel
-    (magit-stage-1 nil (list file))))
-
-;;;###autoload
-(defun magit-stage-modified (&optional all)
-  "Stage all changes to files modified in the worktree.
-Stage all new content of tracked files and remove tracked files
-that no longer exist in the working tree from the index also.
-With a prefix argument also stage previously untracked (but not
-ignored) files."
-  (interactive "P")
-  (when (magit-anything-staged-p)
-    (magit-confirm 'stage-all-changes))
-  (magit-with-toplevel
-    (magit-stage-1 (if all "--all" "-u"))))
-
-(defun magit-stage-1 (arg &optional files)
-  (magit-wip-commit-before-change files " before stage")
-  (magit-run-git "add" arg (if files (cons "--" files) "."))
-  (when magit-auto-revert-mode
-    (mapc #'magit-turn-on-auto-revert-mode-if-desired files))
-  (magit-wip-commit-after-apply files " after stage"))
-
-(defun magit-stage-untracked (&optional intent)
-  (let* ((section (magit-current-section))
-         (files (pcase (magit-diff-scope)
-                  (`file  (list (oref section value)))
-                  (`files (magit-region-values nil t))
-                  (`list  (magit-untracked-files))))
-         plain repos)
-    (dolist (file files)
-      (if (and (not (file-symlink-p file))
-               (magit-git-repo-p file t))
-          (push file repos)
-        (push file plain)))
-    (magit-wip-commit-before-change files " before stage")
-    (when plain
-      (magit-run-git "add" (and intent "--intent-to-add")
-                     "--" plain)
-      (when magit-auto-revert-mode
-        (mapc #'magit-turn-on-auto-revert-mode-if-desired plain)))
-    (dolist (repo repos)
-      (save-excursion
-        (goto-char (oref (magit-get-section
-                          `((file . ,repo) (untracked) (status)))
-                         start))
-        (let* ((topdir (magit-toplevel))
-               (package
-                (and (equal (bound-and-true-p borg-user-emacs-directory)
-                            topdir)
-                     (file-name-nondirectory (directory-file-name repo)))))
-          (magit-submodule-add
-           (let ((default-directory
-                   (file-name-as-directory (expand-file-name repo))))
-             (or (magit-get "remote" (magit-get-some-remote) "url")
-                 (concat (file-name-as-directory ".") repo)))
-           repo
-           (magit-submodule-read-name-for-path repo package))
-          (when package
-            (borg--sort-submodule-sections
-             (expand-file-name ".gitmodules" topdir))
-            (let ((default-directory borg-user-emacs-directory))
-              (borg--maybe-absorb-gitdir package))
-            (when (and (y-or-n-p
-                        (format "Also build and activate `%s' drone?" package))
-                       (fboundp 'borg-build)
-                       (fboundp 'borg-activate))
-              (borg-build package)
-              (borg-activate package))))))
-    (magit-wip-commit-after-apply files " after stage")))
-
-;;;; Unstage
-
-(defun magit-unstage ()
-  "Remove the change at point from the staging area."
-  (interactive)
-  (--when-let (magit-apply--get-selection)
-    (pcase (list (magit-diff-type)
-                 (magit-diff-scope)
-                 (magit-apply--diff-ignores-whitespace-p))
-      (`(untracked     ,_  ,_) (user-error "Cannot unstage untracked changes"))
-      (`(unstaged      ,_  ,_) (user-error "Already unstaged"))
-      (`(staged    region  ,_) (magit-apply-region it "--reverse" "--cached"))
-      (`(staged      hunk  ,_) (magit-apply-hunk   it "--reverse" "--cached"))
-      (`(staged     hunks  ,_) (magit-apply-hunks  it "--reverse" "--cached"))
-      (`(staged      file   t) (magit-apply-diff   it "--reverse" "--cached"))
-      (`(staged     files   t) (magit-apply-diffs  it "--reverse" "--cached"))
-      (`(staged      list   t) (magit-apply-diffs  it "--reverse" "--cached"))
-      (`(staged      file nil) (magit-unstage-1 (list (oref it value))))
-      (`(staged     files nil) (magit-unstage-1 (magit-region-values nil t)))
-      (`(staged      list nil) (magit-unstage-all))
-      (`(committed     ,_  ,_) (if magit-unstage-committed
-                                   (magit-reverse-in-index)
-                                 (user-error "Cannot unstage committed changes")))
-      (`(undefined     ,_  ,_) (user-error "Cannot unstage this change")))))
-
-;;;###autoload
-(defun magit-unstage-file (file)
-  "Unstage all changes to FILE.
-With a prefix argument or when there is no file at point ask for
-the file to be unstaged.  Otherwise unstage the file at point
-without requiring confirmation."
-  (interactive
-   (let* ((atpoint (magit-section-when (file)))
-          (current (magit-file-relative-name))
-          (choices (magit-staged-files))
-          (default (car (member (or atpoint current) choices))))
-     (list (if (or current-prefix-arg (not default))
-               (magit-completing-read "Unstage file" choices
-                                      nil t nil nil default)
-             default))))
-  (magit-with-toplevel
-    (magit-unstage-1 (list file))))
-
-(defun magit-unstage-1 (files)
-  (magit-wip-commit-before-change files " before unstage")
-  (if (magit-no-commit-p)
-      (magit-run-git "rm" "--cached" "--" files)
-    (magit-run-git "reset" "HEAD" "--" files))
-  (magit-wip-commit-after-apply files " after unstage"))
-
-;;;###autoload
-(defun magit-unstage-all ()
-  "Remove all changes from the staging area."
-  (interactive)
-  (when (or (magit-anything-unstaged-p)
-            (magit-untracked-files))
-    (magit-confirm 'unstage-all-changes))
-  (magit-wip-commit-before-change nil " before unstage")
-  (magit-run-git "reset" "HEAD" "--")
-  (magit-wip-commit-after-apply nil " after unstage"))
-
-;;;; Discard
-
-(defun magit-discard ()
-  "Remove the change at point."
-  (interactive)
-  (--when-let (magit-apply--get-selection)
-    (pcase (list (magit-diff-type) (magit-diff-scope))
-      (`(committed ,_) (user-error "Cannot discard committed changes"))
-      (`(undefined ,_) (user-error "Cannot discard this change"))
-      (`(,_    region) (magit-discard-region it))
-      (`(,_      hunk) (magit-discard-hunk   it))
-      (`(,_     hunks) (magit-discard-hunks  it))
-      (`(,_      file) (magit-discard-file   it))
-      (`(,_     files) (magit-discard-files  it))
-      (`(,_      list) (magit-discard-files  it)))))
-
-(defun magit-discard-region (section)
-  (magit-confirm 'discard "Discard region")
-  (magit-discard-apply section 'magit-apply-region))
-
-(defun magit-discard-hunk (section)
-  (magit-confirm 'discard "Discard hunk")
-  (magit-discard-apply section 'magit-apply-hunk))
-
-(defun magit-discard-apply (section apply)
-  (if (eq (magit-diff-type section) 'unstaged)
-      (funcall apply section "--reverse")
-    (if (magit-anything-unstaged-p
-         nil (if (magit-file-section-p section)
-                 (oref section value)
-               (magit-section-parent-value section)))
-        (progn (let ((inhibit-magit-refresh t))
-                 (funcall apply section "--reverse" "--cached")
-                 (funcall apply section "--reverse" "--reject"))
-               (magit-refresh))
-      (funcall apply section "--reverse" "--index"))))
-
-(defun magit-discard-hunks (sections)
-  (magit-confirm 'discard (format "Discard %s hunks from %s"
-                                  (length sections)
-                                  (magit-section-parent-value (car sections))))
-  (magit-discard-apply-n sections 'magit-apply-hunks))
-
-(defun magit-discard-apply-n (sections apply)
-  (let ((section (car sections)))
-    (if (eq (magit-diff-type section) 'unstaged)
-        (funcall apply sections "--reverse")
-      (if (magit-anything-unstaged-p
-           nil (if (magit-file-section-p section)
-                   (oref section value)
-                 (magit-section-parent-value section)))
-          (progn (let ((inhibit-magit-refresh t))
-                   (funcall apply sections "--reverse" "--cached")
-                   (funcall apply sections "--reverse" "--reject"))
-                 (magit-refresh))
-        (funcall apply sections "--reverse" "--index")))))
-
-(defun magit-discard-file (section)
-  (magit-discard-files (list section)))
-
-(defun magit-discard-files (sections)
-  (let ((auto-revert-verbose nil)
-        (type (magit-diff-type (car sections)))
-        (status (magit-file-status))
-        files delete resurrect rename discard discard-new resolve)
-    (dolist (section sections)
-      (let ((file (oref section value)))
-        (push file files)
-        (pcase (cons (pcase type
-                       (`staged ?X)
-                       (`unstaged ?Y)
-                       (`untracked ?Z))
-                     (cddr (assoc file status)))
-          (`(?Z) (dolist (f (magit-untracked-files nil file))
-                   (push f delete)))
-          ((or `(?Z ?? ??) `(?Z ?! ?!)) (push file delete))
-          ((or `(?Z ?D ? ) `(,_ ?D ?D)) (push file delete))
-          ((or `(,_ ?U ,_) `(,_ ,_ ?U)) (push file resolve))
-          (`(,_ ?A ?A)                  (push file resolve))
-          (`(?X ?M ,(or ?  ?M ?D)) (push section discard))
-          (`(?Y ,_         ?M    ) (push section discard))
-          (`(?X ?A         ?M    ) (push file discard-new))
-          (`(?X ?C         ?M    ) (push file discard-new))
-          (`(?X ?A ,(or ?     ?D)) (push file delete))
-          (`(?X ?C ,(or ?     ?D)) (push file delete))
-          (`(?X ?D ,(or ?  ?M   )) (push file resurrect))
-          (`(?Y ,_            ?D ) (push file resurrect))
-          (`(?X ?R ,(or ?  ?M ?D)) (push file rename)))))
-    (unwind-protect
-        (let ((inhibit-magit-refresh t))
-          (magit-wip-commit-before-change files " before discard")
-          (when resolve
-            (magit-discard-files--resolve (nreverse resolve)))
-          (when resurrect
-            (magit-discard-files--resurrect (nreverse resurrect)))
-          (when delete
-            (magit-discard-files--delete (nreverse delete) status))
-          (when rename
-            (magit-discard-files--rename (nreverse rename) status))
-          (when (or discard discard-new)
-            (magit-discard-files--discard (nreverse discard)
-                                          (nreverse discard-new)))
-          (magit-wip-commit-after-apply files " after discard"))
-      (magit-refresh))))
-
-(defun magit-discard-files--resolve (files)
-  (if-let ((arg (and (cdr files)
-                     (magit-read-char-case
-                         (format "For these %i files\n%s\ncheckout:\n"
-                                 (length files)
-                                 (mapconcat (lambda (file)
-                                              (concat "  " file))
-                                            files "\n"))
-                         t
-                       (?o "[o]ur stage"   "--ours")
-                       (?t "[t]heir stage" "--theirs")
-                       (?c "[c]onflict"    "--merge")
-                       (?i "decide [i]ndividually" nil)))))
-      (dolist (file files)
-        (magit-checkout-stage file arg))
-    (dolist (file files)
-      (magit-checkout-stage file (magit-checkout-read-stage file)))))
-
-(defun magit-discard-files--resurrect (files)
-  (magit-confirm-files 'resurrect files)
-  (if (eq (magit-diff-type) 'staged)
-      (magit-call-git "reset"  "--" files)
-    (magit-call-git "checkout" "--" files)))
-
-(defun magit-discard-files--delete (files status)
-  (magit-confirm-files (if magit-delete-by-moving-to-trash 'trash 'delete)
-                       files)
-  (let ((delete-by-moving-to-trash magit-delete-by-moving-to-trash))
-    (dolist (file files)
-      (if (memq (magit-diff-type) '(unstaged untracked))
-          (progn (dired-delete-file file dired-recursive-deletes
-                                    magit-delete-by-moving-to-trash)
-                 (dired-clean-up-after-deletion file))
-        (pcase (nth 3 (assoc file status))
-          (?  (delete-file file t)
-              (magit-call-git "rm" "--cached" "--" file))
-          (?M (let ((temp (magit-git-string "checkout-index" "--temp" file)))
-                (string-match
-                 (format "\\(.+?\\)\t%s" (regexp-quote file)) temp)
-                (rename-file (match-string 1 temp)
-                             (setq temp (concat file ".~{index}~")))
-                (delete-file temp t))
-              (magit-call-git "rm" "--cached" "--force" "--" file))
-          (?D (magit-call-git "checkout" "--" file)
-              (delete-file file t)
-              (magit-call-git "rm" "--cached" "--force" "--" file)))))))
-
-(defun magit-discard-files--rename (files status)
-  (magit-confirm 'rename "Undo rename %s" "Undo %i renames" nil
-    (mapcar (lambda (file)
-              (setq file (assoc file status))
-              (format "%s -> %s" (cadr file) (car file)))
-            files))
-  (dolist (file files)
-    (let ((orig (cadr (assoc file status))))
-      (if (file-exists-p file)
-          (progn
-            (--when-let (file-name-directory orig)
-              (make-directory it t))
-            (magit-call-git "mv" file orig))
-        (magit-call-git "rm" "--cached" "--" file)
-        (magit-call-git "reset" "--" orig)))))
-
-(defun magit-discard-files--discard (sections new-files)
-  (let ((files (--map (oref it value) sections)))
-    (magit-confirm-files 'discard (append files new-files)
-                         (format "Discard %s changes in" (magit-diff-type)))
-    (if (eq (magit-diff-type (car sections)) 'unstaged)
-        (magit-call-git "checkout" "--" files)
-      (when new-files
-        (magit-call-git "add"   "--" new-files)
-        (magit-call-git "reset" "--" new-files))
-      (let ((binaries (magit-staged-binary-files)))
-        (when binaries
-          (setq sections
-                (--remove (member (oref it value) binaries)
-                          sections)))
-        (cond ((= (length sections) 1)
-               (magit-discard-apply (car sections) 'magit-apply-diff))
-              (sections
-               (magit-discard-apply-n sections 'magit-apply-diffs)))
-        (when binaries
-          (let ((modified (magit-unstaged-files t)))
-            (setq binaries (--separate (member it modified) binaries)))
-          (when (cadr binaries)
-            (magit-call-git "reset" "--" (cadr binaries)))
-          (when (car binaries)
-            (user-error
-             (concat
-              "Cannot discard staged changes to binary files, "
-              "which also have unstaged changes.  Unstage instead."))))))))
-
-;;;; Reverse
-
-(defun magit-reverse (&rest args)
-  "Reverse the change at point in the working tree.
-With a prefix argument fallback to a 3-way merge.  Doing
-so causes the change to be applied to the index as well."
-  (interactive (and current-prefix-arg (list "--3way")))
-  (--when-let (magit-apply--get-selection)
-    (pcase (list (magit-diff-type) (magit-diff-scope))
-      (`(untracked ,_) (user-error "Cannot reverse untracked changes"))
-      (`(unstaged  ,_) (user-error "Cannot reverse unstaged changes"))
-      (`(,_    region) (magit-reverse-region it args))
-      (`(,_      hunk) (magit-reverse-hunk   it args))
-      (`(,_     hunks) (magit-reverse-hunks  it args))
-      (`(,_      file) (magit-reverse-file   it args))
-      (`(,_     files) (magit-reverse-files  it args))
-      (`(,_      list) (magit-reverse-files  it args)))))
-
-(defun magit-reverse-region (section args)
-  (magit-confirm 'reverse "Reverse region")
-  (magit-reverse-apply section 'magit-apply-region args))
-
-(defun magit-reverse-hunk (section args)
-  (magit-confirm 'reverse "Reverse hunk")
-  (magit-reverse-apply section 'magit-apply-hunk args))
-
-(defun magit-reverse-hunks (sections args)
-  (magit-confirm 'reverse
-    (format "Reverse %s hunks from %s"
-            (length sections)
-            (magit-section-parent-value (car sections))))
-  (magit-reverse-apply sections 'magit-apply-hunks args))
-
-(defun magit-reverse-file (section args)
-  (magit-reverse-files (list section) args))
-
-(defun magit-reverse-files (sections args)
-  (pcase-let ((`(,binaries ,sections)
-               (let ((bs (magit-staged-binary-files)))
-                 (--separate (member (oref it value) bs)
-                             sections))))
-    (magit-confirm-files 'reverse (--map (oref it value) sections))
-    (if (= (length sections) 1)
-        (magit-reverse-apply (car sections) 'magit-apply-diff args)
-      (magit-reverse-apply sections 'magit-apply-diffs args))
-    (when binaries
-      (user-error "Cannot reverse binary files"))))
-
-(defun magit-reverse-apply (section:s apply args)
-  (funcall apply section:s "--reverse" args
-           (and (not magit-reverse-atomically)
-                (not (member "--3way" args))
-                "--reject")))
-
-(defun magit-reverse-in-index (&rest args)
-  "Reverse the change at point in the index but not the working tree.
-
-Use this command to extract a change from `HEAD', while leaving
-it in the working tree, so that it can later be committed using
-a separate commit.  A typical workflow would be:
-
-0. Optionally make sure that there are no uncommitted changes.
-1. Visit the `HEAD' commit and navigate to the change that should
-   not have been included in that commit.
-2. Type \"u\" (`magit-unstage') to reverse it in the index.
-   This assumes that `magit-unstage-committed-changes' is non-nil.
-3. Type \"c e\" to extend `HEAD' with the staged changes,
-   including those that were already staged before.
-4. Optionally stage the remaining changes using \"s\" or \"S\"
-   and then type \"c c\" to create a new commit."
-  (interactive)
-  (magit-reverse (cons "--cached" args)))
-
-(provide 'magit-apply)
-;;; magit-apply.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.elc
deleted file mode 100644
index 0f9f469b29c3..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-apply.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autoloads.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autoloads.el
deleted file mode 100644
index 4a10d1f21c0e..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autoloads.el
+++ /dev/null
@@ -1,2494 +0,0 @@
-;;; magit-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
-
-;;;### (autoloads nil "git-rebase" "git-rebase.el" (23450 31827 553314
-;;;;;;  560000))
-;;; Generated autoloads from git-rebase.el
-
-(autoload 'git-rebase-mode "git-rebase" "\
-Major mode for editing of a Git rebase file.
-
-Rebase files are generated when you run 'git rebase -i' or run
-`magit-interactive-rebase'.  They describe how Git should perform
-the rebase.  See the documentation for git-rebase (e.g., by
-running 'man git-rebase' at the command line) for details.
-
-\(fn)" t nil)
-
-(defconst git-rebase-filename-regexp "/git-rebase-todo\\'")
-
-(add-to-list 'auto-mode-alist (cons git-rebase-filename-regexp 'git-rebase-mode))
-
-;;;***
-
-;;;### (autoloads nil "magit" "magit.el" (23450 31827 571828 614000))
-;;; Generated autoloads from magit.el
- (autoload 'magit-dispatch-popup "magit" nil t)
- (autoload 'magit-run-popup "magit" nil t)
-
-(autoload 'magit-git-command "magit" "\
-Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer. \"git \" is
-used as initial input, but can be deleted to run another command.
-
-With a prefix argument COMMAND is run in the top-level directory
-of the current working tree, otherwise in `default-directory'.
-
-\(fn COMMAND)" t nil)
-
-(autoload 'magit-git-command-topdir "magit" "\
-Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer. \"git \" is
-used as initial input, but can be deleted to run another command.
-
-COMMAND is run in the top-level directory of the current
-working tree.
-
-\(fn COMMAND)" t nil)
-
-(autoload 'magit-shell-command "magit" "\
-Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer.  With a
-prefix argument COMMAND is run in the top-level directory of
-the current working tree, otherwise in `default-directory'.
-
-\(fn COMMAND)" t nil)
-
-(autoload 'magit-shell-command-topdir "magit" "\
-Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer.  COMMAND
-is run in the top-level directory of the current working tree.
-
-\(fn COMMAND)" t nil)
-
-(autoload 'magit-version "magit" "\
-Return the version of Magit currently in use.
-If optional argument PRINT-DEST is non-nil, output
-stream (interactively, the echo area, or the current buffer with
-a prefix argument), also print the used versions of Magit, Git,
-and Emacs to it.
-
-\(fn &optional PRINT-DEST)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-apply" "magit-apply.el" (23450 31827
-;;;;;;  548503 285000))
-;;; Generated autoloads from magit-apply.el
-
-(autoload 'magit-stage-file "magit-apply" "\
-Stage all changes to FILE.
-With a prefix argument or when there is no file at point ask for
-the file to be staged.  Otherwise stage the file at point without
-requiring confirmation.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-stage-modified "magit-apply" "\
-Stage all changes to files modified in the worktree.
-Stage all new content of tracked files and remove tracked files
-that no longer exist in the working tree from the index also.
-With a prefix argument also stage previously untracked (but not
-ignored) files.
-
-\(fn &optional ALL)" t nil)
-
-(autoload 'magit-unstage-file "magit-apply" "\
-Unstage all changes to FILE.
-With a prefix argument or when there is no file at point ask for
-the file to be unstaged.  Otherwise unstage the file at point
-without requiring confirmation.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-unstage-all "magit-apply" "\
-Remove all changes from the staging area.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-autorevert" "magit-autorevert.el" (23450
-;;;;;;  31827 542570 942000))
-;;; Generated autoloads from magit-autorevert.el
-
-(defvar magit-auto-revert-mode (and (not global-auto-revert-mode) (not noninteractive)) "\
-Non-nil if Magit-Auto-Revert mode is enabled.
-See the `magit-auto-revert-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `magit-auto-revert-mode'.")
-
-(custom-autoload 'magit-auto-revert-mode "magit-autorevert" nil)
-
-(autoload 'magit-auto-revert-mode "magit-autorevert" "\
-Toggle Auto-Revert mode in all buffers.
-With prefix ARG, enable Magit-Auto-Revert mode if ARG is positive;
-otherwise, disable it.  If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Auto-Revert mode is enabled in all buffers where
-`magit-turn-on-auto-revert-mode-if-desired' would do it.
-See `auto-revert-mode' for more information on Auto-Revert mode.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-bisect" "magit-bisect.el" (23450 31827
-;;;;;;  544079 889000))
-;;; Generated autoloads from magit-bisect.el
- (autoload 'magit-bisect-popup "magit-bisect" nil t)
-
-(autoload 'magit-bisect-start "magit-bisect" "\
-Start a bisect session.
-
-Bisecting a bug means to find the commit that introduced it.
-This command starts such a bisect session by asking for a know
-good and a bad commit.  To move the session forward use the
-other actions from the bisect popup (\\<magit-status-mode-map>\\[magit-bisect-popup]).
-
-\(fn BAD GOOD)" t nil)
-
-(autoload 'magit-bisect-reset "magit-bisect" "\
-After bisecting, cleanup bisection state and return to original `HEAD'.
-
-\(fn)" t nil)
-
-(autoload 'magit-bisect-good "magit-bisect" "\
-While bisecting, mark the current commit as good.
-Use this after you have asserted that the commit does not contain
-the bug in question.
-
-\(fn)" t nil)
-
-(autoload 'magit-bisect-bad "magit-bisect" "\
-While bisecting, mark the current commit as bad.
-Use this after you have asserted that the commit does contain the
-bug in question.
-
-\(fn)" t nil)
-
-(autoload 'magit-bisect-skip "magit-bisect" "\
-While bisecting, skip the current commit.
-Use this if for some reason the current commit is not a good one
-to test.  This command lets Git choose a different one.
-
-\(fn)" t nil)
-
-(autoload 'magit-bisect-run "magit-bisect" "\
-Bisect automatically by running commands after each step.
-
-Unlike `git bisect run' this can be used before bisecting has
-begun.  In that case it behaves like `git bisect start; git
-bisect run'.
-
-\(fn CMDLINE &optional BAD GOOD)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-blame" "magit-blame.el" (23450 31827
-;;;;;;  540813 371000))
-;;; Generated autoloads from magit-blame.el
-
-(autoload 'magit-blame-echo "magit-blame" "\
-For each line show the revision in which it was added.
-Show the information about the chunk at point in the echo area
-when moving between chunks.  Unlike other blaming commands, do
-not turn on `read-only-mode'.
-
-\(fn)" t nil)
-
-(autoload 'magit-blame "magit-blame" "\
-For each line show the revision in which it was added.
-
-\(fn)" t nil)
-
-(autoload 'magit-blame-removal "magit-blame" "\
-For each line show the revision in which it was removed.
-
-\(fn)" t nil)
-
-(autoload 'magit-blame-reverse "magit-blame" "\
-For each line show the last revision in which it still exists.
-
-\(fn)" t nil)
- (autoload 'magit-blame-popup "magit-blame" nil t)
-
-;;;***
-
-;;;### (autoloads nil "magit-bookmark" "magit-bookmark.el" (23450
-;;;;;;  31827 551507 38000))
-;;; Generated autoloads from magit-bookmark.el
-
-(autoload 'magit-bookmark--status-jump "magit-bookmark" "\
-Handle a Magit status BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--status-make-record "magit-bookmark" "\
-Create a Magit status bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--refs-jump "magit-bookmark" "\
-Handle a Magit refs BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--refs-make-record "magit-bookmark" "\
-Create a Magit refs bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--log-jump "magit-bookmark" "\
-Handle a Magit log BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--log-make-record "magit-bookmark" "\
-Create a Magit log bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--reflog-jump "magit-bookmark" "\
-Handle a Magit reflog BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--reflog-make-record "magit-bookmark" "\
-Create a Magit reflog bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--stashes-jump "magit-bookmark" "\
-Handle a Magit stash list BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--stashes-make-record "magit-bookmark" "\
-Create a Magit stash list bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--cherry-jump "magit-bookmark" "\
-Handle a Magit cherry BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--cherry-make-record "magit-bookmark" "\
-Create a Magit cherry bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--diff-jump "magit-bookmark" "\
-Handle a Magit diff BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--diff-make-record "magit-bookmark" "\
-Create a Magit diff bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--revision-jump "magit-bookmark" "\
-Handle a Magit revision BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--revision-make-record "magit-bookmark" "\
-Create a Magit revision bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--stash-jump "magit-bookmark" "\
-Handle a Magit stash BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--stash-make-record "magit-bookmark" "\
-Create a Magit stash bookmark.
-
-\(fn)" nil nil)
-
-(autoload 'magit-bookmark--submodules-jump "magit-bookmark" "\
-Handle a Magit submodule list BOOKMARK.
-
-\(fn BOOKMARK)" nil nil)
-
-(autoload 'magit-bookmark--submodules-make-record "magit-bookmark" "\
-Create a Magit submodule list bookmark.
-
-\(fn)" nil nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-branch" "magit-branch.el" (23450 31827
-;;;;;;  518076 979000))
-;;; Generated autoloads from magit-branch.el
- (autoload 'magit-branch-popup "magit" nil t)
-
-(autoload 'magit-checkout "magit-branch" "\
-Checkout REVISION, updating the index and the working tree.
-If REVISION is a local branch, then that becomes the current
-branch.  If it is something else, then `HEAD' becomes detached.
-Checkout fails if the working tree or the staging area contain
-changes.
-
-\(git checkout REVISION).
-
-\(fn REVISION)" t nil)
-
-(autoload 'magit-branch "magit-branch" "\
-Create BRANCH at branch or revision START-POINT.
-
-\(git branch [ARGS] BRANCH START-POINT).
-
-\(fn BRANCH START-POINT &optional ARGS)" t nil)
-
-(autoload 'magit-branch-and-checkout "magit-branch" "\
-Create and checkout BRANCH at branch or revision START-POINT.
-
-\(git checkout [ARGS] -b BRANCH START-POINT).
-
-\(fn BRANCH START-POINT &optional ARGS)" t nil)
-
-(autoload 'magit-branch-or-checkout "magit-branch" "\
-Hybrid between `magit-checkout' and `magit-branch-and-checkout'.
-
-Ask the user for an existing branch or revision.  If the user
-input actually can be resolved as a branch or revision, then
-check that out, just like `magit-checkout' would.
-
-Otherwise create and checkout a new branch using the input as
-its name.  Before doing so read the starting-point for the new
-branch.  This is similar to what `magit-branch-and-checkout'
-does.
-
-\(fn ARG &optional START-POINT)" t nil)
-
-(autoload 'magit-branch-checkout "magit-branch" "\
-Checkout an existing or new local branch.
-
-Read a branch name from the user offering all local branches and
-a subset of remote branches as candidates.  Omit remote branches
-for which a local branch by the same name exists from the list
-of candidates.  The user can also enter a completely new branch
-name.
-
-- If the user selects an existing local branch, then check that
-  out.
-
-- If the user selects a remote branch, then create and checkout
-  a new local branch with the same name.  Configure the selected
-  remote branch as push target.
-
-- If the user enters a new branch name, then create and check
-  that out, after also reading the starting-point from the user.
-
-In the latter two cases the upstream is also set.  Whether it is
-set to the chosen START-POINT or something else depends on the
-value of `magit-branch-adjust-remote-upstream-alist', just like
-when using `magit-branch-and-checkout'.
-
-\(fn BRANCH &optional START-POINT)" t nil)
-
-(autoload 'magit-branch-orphan "magit-branch" "\
-Create and checkout an orphan BRANCH with contents from revision START-POINT.
-
-\(git checkout --orphan [ARGS] BRANCH START-POINT).
-
-\(fn BRANCH START-POINT &optional ARGS)" t nil)
-
-(autoload 'magit-branch-pull-request "magit-branch" "\
-Create and configure a new branch from a pull-request.
-Please see the manual for more information.
-
-\(fn PR)" t nil)
-
-(autoload 'magit-branch-spinoff "magit-branch" "\
-Create new branch from the unpushed commits.
-
-Create and checkout a new branch starting at and tracking the
-current branch.  That branch in turn is reset to the last commit
-it shares with its upstream.  If the current branch has no
-upstream or no unpushed commits, then the new branch is created
-anyway and the previously current branch is not touched.
-
-This is useful to create a feature branch after work has already
-began on the old branch (likely but not necessarily \"master\").
-
-If the current branch is a member of the value of option
-`magit-branch-prefer-remote-upstream' (which see), then the
-current branch will be used as the starting point as usual, but
-the upstream of the starting-point may be used as the upstream
-of the new branch, instead of the starting-point itself.
-
-If optional FROM is non-nil, then the source branch is reset
-to `FROM~', instead of to the last commit it shares with its
-upstream.  Interactively, FROM is only ever non-nil, if the
-region selects some commits, and among those commits, FROM is
-the commit that is the fewest commits ahead of the source
-branch.
-
-The commit at the other end of the selection actually does not
-matter, all commits between FROM and `HEAD' are moved to the new
-branch.  If FROM is not reachable from `HEAD' or is reachable
-from the source branch's upstream, then an error is raised.
-
-\(fn BRANCH &optional FROM &rest ARGS)" t nil)
-
-(autoload 'magit-branch-reset "magit-branch" "\
-Reset a branch to the tip of another branch or any other commit.
-
-When the branch being reset is the current branch, then do a
-hard reset.  If there are any uncommitted changes, then the user
-has to confirm the reset because those changes would be lost.
-
-This is useful when you have started work on a feature branch but
-realize it's all crap and want to start over.
-
-When resetting to another branch and a prefix argument is used,
-then also set the target branch as the upstream of the branch
-that is being reset.
-
-\(fn BRANCH TO &optional ARGS SET-UPSTREAM)" t nil)
-
-(autoload 'magit-branch-delete "magit-branch" "\
-Delete one or multiple branches.
-If the region marks multiple branches, then offer to delete
-those, otherwise prompt for a single branch to be deleted,
-defaulting to the branch at point.
-
-\(fn BRANCHES &optional FORCE)" t nil)
-
-(autoload 'magit-branch-rename "magit-branch" "\
-Rename the branch named OLD to NEW.
-
-With a prefix argument FORCE, rename even if a branch named NEW
-already exists.
-
-If `branch.OLD.pushRemote' is set, then unset it.  Depending on
-the value of `magit-branch-rename-push-target' (which see) maybe
-set `branch.NEW.pushRemote' and maybe rename the push-target on
-the remote.
-
-\(fn OLD NEW &optional FORCE)" t nil)
-
-(autoload 'magit-branch-shelve "magit-branch" "\
-Shelve a BRANCH.
-Rename \"refs/heads/BRANCH\" to \"refs/shelved/BRANCH\",
-and also rename the respective reflog file.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-branch-unshelve "magit-branch" "\
-Unshelve a BRANCH
-Rename \"refs/shelved/BRANCH\" to \"refs/heads/BRANCH\",
-and also rename the respective reflog file.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-branch-config-popup "magit-branch" "\
-Popup console for setting branch variables.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-edit-branch*description "magit-branch" "\
-Edit the description of the current branch.
-With a prefix argument edit the description of another branch.
-
-The description for the branch named NAME is stored in the Git
-variable `branch.<name>.description'.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-set-branch*merge/remote "magit-branch" "\
-Set or unset the upstream of the current branch.
-With a prefix argument do so for another branch.
-
-When the branch in question already has an upstream then simply
-unsets it.  Invoke this command again to set another upstream.
-
-Together the Git variables `branch.<name>.remote' and
-`branch.<name>.merge' define the upstream branch of the local
-branch named NAME.  The value of `branch.<name>.remote' is the
-name of the upstream remote.  The value of `branch.<name>.merge'
-is the full reference of the upstream branch, on the remote.
-
-Non-interactively, when UPSTREAM is non-nil, then always set it
-as the new upstream, regardless of whether another upstream was
-already set.  When nil, then always unset.
-
-\(fn BRANCH UPSTREAM)" t nil)
-
-(autoload 'magit-cycle-branch*rebase "magit-branch" "\
-Cycle the value of `branch.<name>.rebase' for the current branch.
-With a prefix argument cycle the value for another branch.
-
-The Git variables `branch.<name>.rebase' controls whether pulling
-into the branch named NAME is done by rebasing that branch onto
-the fetched branch or by merging that branch.
-
-When `true' then pulling is done by rebasing.
-When `false' then pulling is done by merging.
-
-When that variable is undefined then the value of `pull.rebase'
-is used instead.  It defaults to `false'.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-cycle-branch*pushRemote "magit-branch" "\
-Cycle the value of `branch.<name>.pushRemote' for the current branch.
-With a prefix argument cycle the value for another branch.
-
-The Git variable `branch.<name>.pushRemote' specifies the remote
-that the branch named NAME is usually pushed to.  The value has
-to be the name of an existing remote.
-
-If that variable is undefined, then the value of the Git variable
-`remote.pushDefault' is used instead, provided that it is defined,
-which by default it is not.
-
-\(fn BRANCH)" t nil)
-
-(autoload 'magit-cycle-pull\.rebase "magit-branch" "\
-Cycle the repository-local value of `pull.rebase'.
-
-The Git variable `pull.rebase' specifies whether pulling is done
-by rebasing or by merging.  It can be overwritten using the Git
-variable `branch.<name>.rebase'.
-
-When `true' then pulling is done by rebasing.
-When `false' (the default) then pulling is done by merging.
-
-\(fn)" t nil)
-
-(autoload 'magit-cycle-remote\.pushDefault "magit-branch" "\
-Cycle the repository-local value of `remote.pushDefault'.
-
-The Git variable `remote.pushDefault' specifies the remote that
-local branches are usually pushed to.  It can be overwritten
-using the Git variable `branch.<name>.pushRemote'.
-
-\(fn)" t nil)
-
-(autoload 'magit-cycle-branch*autoSetupMerge "magit-branch" "\
-Cycle the repository-local value of `branch.autoSetupMerge'.
-
-The Git variable `branch.autoSetupMerge' under what circumstances
-creating a branch (named NAME) should result in the variables
-`branch.<name>.merge' and `branch.<name>.remote' being set
-according to the starting point used to create the branch.  If
-the starting point isn't a branch, then these variables are never
-set.
-
-When `always' then the variables are set regardless of whether
-the starting point is a local or a remote branch.
-
-When `true' (the default) then the variable are set when the
-starting point is a remote branch, but not when it is a local
-branch.
-
-When `false' then the variables are never set.
-
-\(fn)" t nil)
-
-(autoload 'magit-cycle-branch*autoSetupRebase "magit-branch" "\
-Cycle the repository-local value of `branch.autoSetupRebase'.
-
-The Git variable `branch.autoSetupRebase' specifies whether
-creating a branch (named NAME) should result in the variable
-`branch.<name>.rebase' being set to `true'.
-
-When `always' then the variable is set regardless of whether the
-starting point is a local or a remote branch.
-
-When `local' then the variable are set when the starting point
-is a local branch, but not when it is a remote branch.
-
-When `remote' then the variable are set when the starting point
-is a remote branch, but not when it is a local branch.
-
-When `never' (the default) then the variable is never set.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-collab" "magit-collab.el" (23450 31827
-;;;;;;  522905 912000))
-;;; Generated autoloads from magit-collab.el
-
-(autoload 'magit-browse-pull-request "magit-collab" "\
-Visit pull-request PR using `browse-url'.
-
-Currently this only supports Github, but that restriction will
-be lifted eventually to support other Git forges.
-
-\(fn PR)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-commit" "magit-commit.el" (23450 31827
-;;;;;;  577079 29000))
-;;; Generated autoloads from magit-commit.el
-
-(autoload 'magit-commit "magit-commit" "\
-Create a new commit on `HEAD'.
-With a prefix argument, amend to the commit at `HEAD' instead.
-
-\(git commit [--amend] ARGS)
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'magit-commit-amend "magit-commit" "\
-Amend the last commit.
-
-\(git commit --amend ARGS)
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'magit-commit-extend "magit-commit" "\
-Amend the last commit, without editing the message.
-
-With a prefix argument keep the committer date, otherwise change
-it.  The option `magit-commit-extend-override-date' can be used
-to inverse the meaning of the prefix argument.
-\(git commit
---amend --no-edit)
-
-\(fn &optional ARGS OVERRIDE-DATE)" t nil)
-
-(autoload 'magit-commit-reword "magit-commit" "\
-Reword the last commit, ignoring staged changes.
-
-With a prefix argument keep the committer date, otherwise change
-it.  The option `magit-commit-reword-override-date' can be used
-to inverse the meaning of the prefix argument.
-
-Non-interactively respect the optional OVERRIDE-DATE argument
-and ignore the option.
-
-\(git commit --amend --only)
-
-\(fn &optional ARGS OVERRIDE-DATE)" t nil)
-
-(autoload 'magit-commit-fixup "magit-commit" "\
-Create a fixup commit.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'.
-
-\(fn &optional COMMIT ARGS)" t nil)
-
-(autoload 'magit-commit-squash "magit-commit" "\
-Create a squash commit, without editing the squash message.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'.
-
-\(fn &optional COMMIT ARGS)" t nil)
-
-(autoload 'magit-commit-augment "magit-commit" "\
-Create a squash commit, editing the squash message.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'.
-
-\(fn &optional COMMIT ARGS)" t nil)
-
-(autoload 'magit-commit-instant-fixup "magit-commit" "\
-Create a fixup commit targeting COMMIT and instantly rebase.
-
-\(fn &optional COMMIT ARGS)" t nil)
-
-(autoload 'magit-commit-instant-squash "magit-commit" "\
-Create a squash commit targeting COMMIT and instantly rebase.
-
-\(fn &optional COMMIT ARGS)" t nil)
-
-(autoload 'magit-commit-reshelve "magit-commit" "\
-Change the committer date and possibly the author date of `HEAD'.
-
-If you are the author of `HEAD', then both dates are changed,
-otherwise only the committer date.  The current time is used
-as the initial minibuffer input and the original author (if
-that is you) or committer date is available as the previous
-history element.
-
-\(fn DATE)" t nil)
- (autoload 'magit-commit-absorb-popup "magit-commit" nil t)
-
-;;;***
-
-;;;### (autoloads nil "magit-diff" "magit-diff.el" (23450 31827 574404
-;;;;;;  623000))
-;;; Generated autoloads from magit-diff.el
-
-(autoload 'magit-diff-popup "magit-diff" "\
-Popup console for diff commands.
-
-\(fn ARG)" t nil)
-
-(autoload 'magit-diff-buffer-file-popup "magit-diff" "\
-Popup console for diff commands.
-
-This is a variant of `magit-diff-popup' which shows the same popup
-but which limits the diff to the file being visited in the current
-buffer.
-
-\(fn)" t nil)
-
-(autoload 'magit-diff-dwim "magit-diff" "\
-Show changes for the thing at point.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-diff "magit-diff" "\
-Show differences between two commits.
-
-REV-OR-RANGE should be a range or a single revision.  If it is a
-revision, then show changes in the working tree relative to that
-revision.  If it is a range, but one side is omitted, then show
-changes relative to `HEAD'.
-
-If the region is active, use the revisions on the first and last
-line of the region as the two sides of the range.  With a prefix
-argument, instead of diffing the revisions, choose a revision to
-view changes along, starting at the common ancestor of both
-revisions (i.e., use a \"...\" range).
-
-\(fn REV-OR-RANGE &optional ARGS FILES)" t nil)
-
-(autoload 'magit-diff-working-tree "magit-diff" "\
-Show changes between the current working tree and the `HEAD' commit.
-With a prefix argument show changes between the working tree and
-a commit read from the minibuffer.
-
-\(fn &optional REV ARGS FILES)" t nil)
-
-(autoload 'magit-diff-staged "magit-diff" "\
-Show changes between the index and the `HEAD' commit.
-With a prefix argument show changes between the index and
-a commit read from the minibuffer.
-
-\(fn &optional REV ARGS FILES)" t nil)
-
-(autoload 'magit-diff-unstaged "magit-diff" "\
-Show changes between the working tree and the index.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-diff-unmerged "magit-diff" "\
-Show changes that are being merged.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-diff-while-committing "magit-diff" "\
-While committing, show the changes that are about to be committed.
-While amending, invoking the command again toggles between
-showing just the new changes or all the changes that will
-be committed.
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'magit-diff-buffer-file "magit-diff" "\
-Show diff for the blob or file visited in the current buffer.
-
-\(fn)" t nil)
-
-(autoload 'magit-diff-paths "magit-diff" "\
-Show changes between any two files on disk.
-
-\(fn A B)" t nil)
-
-(autoload 'magit-show-commit "magit-diff" "\
-Visit the revision at point in another buffer.
-If there is no revision at point or with a prefix argument prompt
-for a revision.
-
-\(fn REV &optional ARGS FILES MODULE)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-ediff" "magit-ediff.el" (23450 31827
-;;;;;;  532093 848000))
-;;; Generated autoloads from magit-ediff.el
- (autoload 'magit-ediff-popup "magit-ediff" nil t)
-
-(autoload 'magit-ediff-resolve "magit-ediff" "\
-Resolve outstanding conflicts in FILE using Ediff.
-FILE has to be relative to the top directory of the repository.
-
-In the rare event that you want to manually resolve all
-conflicts, including those already resolved by Git, use
-`ediff-merge-revisions-with-ancestor'.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-ediff-stage "magit-ediff" "\
-Stage and unstage changes to FILE using Ediff.
-FILE has to be relative to the top directory of the repository.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-ediff-compare "magit-ediff" "\
-Compare REVA:FILEA with REVB:FILEB using Ediff.
-
-FILEA and FILEB have to be relative to the top directory of the
-repository.  If REVA or REVB is nil, then this stands for the
-working tree state.
-
-If the region is active, use the revisions on the first and last
-line of the region.  With a prefix argument, instead of diffing
-the revisions, choose a revision to view changes along, starting
-at the common ancestor of both revisions (i.e., use a \"...\"
-range).
-
-\(fn REVA REVB FILEA FILEB)" t nil)
-
-(autoload 'magit-ediff-dwim "magit-ediff" "\
-Compare, stage, or resolve using Ediff.
-This command tries to guess what file, and what commit or range
-the user wants to compare, stage, or resolve using Ediff.  It
-might only be able to guess either the file, or range or commit,
-in which case the user is asked about the other.  It might not
-always guess right, in which case the appropriate `magit-ediff-*'
-command has to be used explicitly.  If it cannot read the user's
-mind at all, then it asks the user for a command to run.
-
-\(fn)" t nil)
-
-(autoload 'magit-ediff-show-staged "magit-ediff" "\
-Show staged changes using Ediff.
-
-This only allows looking at the changes; to stage, unstage,
-and discard changes using Ediff, use `magit-ediff-stage'.
-
-FILE must be relative to the top directory of the repository.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-ediff-show-unstaged "magit-ediff" "\
-Show unstaged changes using Ediff.
-
-This only allows looking at the changes; to stage, unstage,
-and discard changes using Ediff, use `magit-ediff-stage'.
-
-FILE must be relative to the top directory of the repository.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-ediff-show-working-tree "magit-ediff" "\
-Show changes between `HEAD' and working tree using Ediff.
-FILE must be relative to the top directory of the repository.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-ediff-show-commit "magit-ediff" "\
-Show changes introduced by COMMIT using Ediff.
-
-\(fn COMMIT)" t nil)
-
-(autoload 'magit-ediff-show-stash "magit-ediff" "\
-Show changes introduced by STASH using Ediff.
-`magit-ediff-show-stash-with-index' controls whether a
-three-buffer Ediff is used in order to distinguish changes in the
-stash that were staged.
-
-\(fn STASH)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-extras" "magit-extras.el" (23450 31827
-;;;;;;  511711 53000))
-;;; Generated autoloads from magit-extras.el
-
-(autoload 'magit-run-git-gui "magit-extras" "\
-Run `git gui' for the current git repository.
-
-\(fn)" t nil)
-
-(autoload 'magit-run-git-gui-blame "magit-extras" "\
-Run `git gui blame' on the given FILENAME and COMMIT.
-Interactively run it for the current file and the `HEAD', with a
-prefix or when the current file cannot be determined let the user
-choose.  When the current buffer is visiting FILENAME instruct
-blame to center around the line point is on.
-
-\(fn COMMIT FILENAME &optional LINENUM)" t nil)
-
-(autoload 'magit-run-gitk "magit-extras" "\
-Run `gitk' in the current repository.
-
-\(fn)" t nil)
-
-(autoload 'magit-run-gitk-branches "magit-extras" "\
-Run `gitk --branches' in the current repository.
-
-\(fn)" t nil)
-
-(autoload 'magit-run-gitk-all "magit-extras" "\
-Run `gitk --all' in the current repository.
-
-\(fn)" t nil)
-
-(autoload 'ido-enter-magit-status "magit-extras" "\
-Drop into `magit-status' from file switching.
-
-To make this command available use something like:
-
-  (add-hook \\='ido-setup-hook
-            (lambda ()
-              (define-key ido-completion-map
-                (kbd \"C-x g\") \\='ido-enter-magit-status)))
-
-Starting with Emacs 25.1 the Ido keymaps are defined just once
-instead of every time Ido is invoked, so now you can modify it
-like pretty much every other keymap:
-
-  (define-key ido-common-completion-map
-    (kbd \"C-x g\") \\='ido-enter-magit-status)
-
-\(fn)" t nil)
-
-(autoload 'magit-dired-jump "magit-extras" "\
-Visit file at point using Dired.
-With a prefix argument, visit in another window.  If there
-is no file at point, then instead visit `default-directory'.
-
-\(fn &optional OTHER-WINDOW)" t nil)
-
-(autoload 'magit-dired-log "magit-extras" "\
-Show log for all marked files, or the current file.
-
-\(fn &optional FOLLOW)" t nil)
-
-(autoload 'magit-do-async-shell-command "magit-extras" "\
-Open FILE with `dired-do-async-shell-command'.
-Interactively, open the file at point.
-
-\(fn FILE)" t nil)
-
-(autoload 'magit-previous-line "magit-extras" "\
-Like `previous-line' but with Magit-specific shift-selection.
-
-Magit's selection mechanism is based on the region but selects an
-area that is larger than the region.  This causes `previous-line'
-when invoked while holding the shift key to move up one line and
-thereby select two lines.  When invoked inside a hunk body this
-command does not move point on the first invocation and thereby
-it only selects a single line.  Which inconsistency you prefer
-is a matter of preference.
-
-\(fn &optional ARG TRY-VSCROLL)" t nil)
-
-(function-put 'magit-previous-line 'interactive-only '"use `forward-line' with negative argument instead.")
-
-(autoload 'magit-next-line "magit-extras" "\
-Like `next-line' but with Magit-specific shift-selection.
-
-Magit's selection mechanism is based on the region but selects
-an area that is larger than the region.  This causes `next-line'
-when invoked while holding the shift key to move down one line
-and thereby select two lines.  When invoked inside a hunk body
-this command does not move point on the first invocation and
-thereby it only selects a single line.  Which inconsistency you
-prefer is a matter of preference.
-
-\(fn &optional ARG TRY-VSCROLL)" t nil)
-
-(function-put 'magit-next-line 'interactive-only 'forward-line)
-
-(autoload 'magit-clean "magit-extras" "\
-Remove untracked files from the working tree.
-With a prefix argument also remove ignored files,
-with two prefix arguments remove ignored files only.
-
-\(git clean -f -d [-x|-X])
-
-\(fn &optional ARG)" t nil)
- (autoload 'magit-gitignore-popup "magit-extras" nil t)
-
-(autoload 'magit-gitignore "magit-extras" "\
-Instruct Git to ignore FILE-OR-PATTERN.
-With a prefix argument only ignore locally.
-
-\(fn FILE-OR-PATTERN &optional LOCAL)" t nil)
-
-(autoload 'magit-gitignore-locally "magit-extras" "\
-Instruct Git to locally ignore FILE-OR-PATTERN.
-
-\(fn FILE-OR-PATTERN)" t nil)
-
-(autoload 'magit-add-change-log-entry "magit-extras" "\
-Find change log file and add date entry and item for current change.
-This differs from `add-change-log-entry' (which see) in that
-it acts on the current hunk in a Magit buffer instead of on
-a position in a file-visiting buffer.
-
-\(fn &optional WHOAMI FILE-NAME OTHER-WINDOW)" t nil)
-
-(autoload 'magit-add-change-log-entry-other-window "magit-extras" "\
-Find change log file in other window and add entry and item.
-This differs from `add-change-log-entry-other-window' (which see)
-in that it acts on the current hunk in a Magit buffer instead of
-on a position in a file-visiting buffer.
-
-\(fn &optional WHOAMI FILE-NAME)" t nil)
-
-(autoload 'magit-edit-line-commit "magit-extras" "\
-Edit the commit that added the current line.
-
-With a prefix argument edit the commit that removes the line,
-if any.  The commit is determined using `git blame' and made
-editable using `git rebase --interactive' if it is reachable
-from `HEAD', or by checking out the commit (or a branch that
-points at it) otherwise.
-
-\(fn &optional TYPE)" t nil)
-
-(autoload 'magit-reshelve-since "magit-extras" "\
-Change the author and committer dates of the commits since REV.
-
-Ask the user for the first reachable commit whose dates should
-be changed.  The read the new date for that commit.  The initial
-minibuffer input and the previous history element offer good
-values.  The next commit will be created one minute later and so
-on.
-
-This command is only intended for interactive use and should only
-be used on highly rearranged and unpublished history.
-
-\(fn REV)" t nil)
-
-(autoload 'magit-copy-section-value "magit-extras" "\
-Save the value of the current section for later use.
-
-Save the section value to the `kill-ring', and, provided that
-the current section is a commit, branch, or tag section, push
-the (referenced) revision to the `magit-revision-stack' for use
-with `magit-pop-revision-stack'.
-
-When the current section is a branch or a tag, and a prefix
-argument is used, then save the revision at its tip to the
-`kill-ring' instead of the reference name.
-
-When the region is active, then save that to the `kill-ring',
-like `kill-ring-save' would, instead of behaving as described
-above.
-
-\(fn)" t nil)
-
-(autoload 'magit-copy-buffer-revision "magit-extras" "\
-Save the revision of the current buffer for later use.
-
-Save the revision shown in the current buffer to the `kill-ring'
-and push it to the `magit-revision-stack'.
-
-This command is mainly intended for use in `magit-revision-mode'
-buffers, the only buffers where it is always unambiguous exactly
-which revision should be saved.
-
-Most other Magit buffers usually show more than one revision, in
-some way or another, so this command has to select one of them,
-and that choice might not always be the one you think would have
-been the best pick.
-
-In such buffers it is often more useful to save the value of
-the current section instead, using `magit-copy-section-value'.
-
-When the region is active, then save that to the `kill-ring',
-like `kill-ring-save' would, instead of behaving as described
-above.
-
-\(fn)" t nil)
-
-(autoload 'magit-abort-dwim "magit-extras" "\
-Abort current operation.
-Depending on the context, this will abort a merge, a rebase, a
-patch application, a cherry-pick, a revert, or a bisect.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-files" "magit-files.el" (23450 31827
-;;;;;;  525780 781000))
-;;; Generated autoloads from magit-files.el
-
-(autoload 'magit-find-file "magit-files" "\
-View FILE from REV.
-Switch to a buffer visiting blob REV:FILE,
-creating one if none already exists.
-
-\(fn REV FILE)" t nil)
-
-(autoload 'magit-find-file-other-window "magit-files" "\
-View FILE from REV, in another window.
-Like `magit-find-file', but create a new window or reuse an
-existing one.
-
-\(fn REV FILE)" t nil)
- (autoload 'magit-file-popup "magit" nil t)
-
-(defvar global-magit-file-mode t "\
-Non-nil if Global Magit-File mode is enabled.
-See the `global-magit-file-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `global-magit-file-mode'.")
-
-(custom-autoload 'global-magit-file-mode "magit-files" nil)
-
-(autoload 'global-magit-file-mode "magit-files" "\
-Toggle Magit-File mode in all buffers.
-With prefix ARG, enable Global Magit-File mode if ARG is positive;
-otherwise, disable it.  If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Magit-File mode is enabled in all buffers where
-`magit-file-mode-turn-on' would do it.
-See `magit-file-mode' for more information on Magit-File mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'magit-file-checkout "magit-files" "\
-Checkout FILE from REV.
-
-\(fn REV FILE)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-imenu" "magit-imenu.el" (23450 31827
-;;;;;;  529022 331000))
-;;; Generated autoloads from magit-imenu.el
-
-(autoload 'magit-imenu--log-prev-index-position-function "magit-imenu" "\
-Move point to previous line in current buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--log-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--diff-prev-index-position-function "magit-imenu" "\
-Move point to previous file line in current buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--diff-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--status-create-index-function "magit-imenu" "\
-Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--refs-create-index-function "magit-imenu" "\
-Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--cherry-create-index-function "magit-imenu" "\
-Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--submodule-prev-index-position-function "magit-imenu" "\
-Move point to previous line in magit-submodule-list buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--submodule-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--repolist-prev-index-position-function "magit-imenu" "\
-Move point to previous line in magit-repolist buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--repolist-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--process-prev-index-position-function "magit-imenu" "\
-Move point to previous process in magit-process buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--process-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--rebase-prev-index-position-function "magit-imenu" "\
-Move point to previous commit in git-rebase buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'.
-
-\(fn)" nil nil)
-
-(autoload 'magit-imenu--rebase-extract-index-name-function "magit-imenu" "\
-Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line.
-
-\(fn)" nil nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-log" "magit-log.el" (23450 31827 539095
-;;;;;;  3000))
-;;; Generated autoloads from magit-log.el
-
-(autoload 'magit-log-buffer-file-popup "magit-log" "\
-Popup console for log commands.
-
-This is a variant of `magit-log-popup' which shows the same popup
-but which limits the log to the file being visited in the current
-buffer.
-
-\(fn)" t nil)
-
-(autoload 'magit-log-current "magit-log" "\
-Show log for the current branch.
-When `HEAD' is detached or with a prefix argument show log for
-one or more revs read from the minibuffer.
-
-\(fn REVS &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log "magit-log" "\
-Show log for one or more revs read from the minibuffer.
-The user can input any revision or revisions separated by a
-space, or even ranges, but only branches and tags, and a
-representation of the commit at point, are available as
-completion candidates.
-
-\(fn REVS &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log-head "magit-log" "\
-Show log for `HEAD'.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log-branches "magit-log" "\
-Show log for all local branches and `HEAD'.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log-all-branches "magit-log" "\
-Show log for all local and remote branches and `HEAD'.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log-all "magit-log" "\
-Show log for all references and `HEAD'.
-
-\(fn &optional ARGS FILES)" t nil)
-
-(autoload 'magit-log-buffer-file "magit-log" "\
-Show log for the blob or file visited in the current buffer.
-With a prefix argument or when `--follow' is part of
-`magit-log-arguments', then follow renames.  When the region is
-active, restrict the log to the lines that the region touches.
-
-\(fn &optional FOLLOW BEG END)" t nil)
-
-(autoload 'magit-log-trace-definition "magit-log" "\
-Show log for the definition at point.
-
-\(fn FILE FN REV)" t nil)
-
-(autoload 'magit-reflog-current "magit-log" "\
-Display the reflog of the current branch.
-
-\(fn)" t nil)
-
-(autoload 'magit-reflog "magit-log" "\
-Display the reflog of a branch.
-
-\(fn REF)" t nil)
-
-(autoload 'magit-reflog-head "magit-log" "\
-Display the `HEAD' reflog.
-
-\(fn)" t nil)
-
-(autoload 'magit-log-move-to-parent "magit-log" "\
-Move to the Nth parent of the current commit.
-
-\(fn &optional N)" t nil)
-
-(autoload 'magit-cherry "magit-log" "\
-Show commits in a branch that are not merged in the upstream branch.
-
-\(fn HEAD UPSTREAM)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-merge" "magit-merge.el" (23450 31827
-;;;;;;  513369 524000))
-;;; Generated autoloads from magit-merge.el
- (autoload 'magit-merge-popup "magit" nil t)
-
-(autoload 'magit-merge "magit-merge" "\
-Merge commit REV into the current branch; using default message.
-
-Unless there are conflicts or a prefix argument is used create a
-merge commit using a generic commit message and without letting
-the user inspect the result.  With a prefix argument pretend the
-merge failed to give the user the opportunity to inspect the
-merge.
-
-\(git merge --no-edit|--no-commit [ARGS] REV)
-
-\(fn REV &optional ARGS NOCOMMIT)" t nil)
-
-(autoload 'magit-merge-editmsg "magit-merge" "\
-Merge commit REV into the current branch; and edit message.
-Perform the merge and prepare a commit message but let the user
-edit it.
-
-\(git merge --edit --no-ff [ARGS] REV)
-
-\(fn REV &optional ARGS)" t nil)
-
-(autoload 'magit-merge-nocommit "magit-merge" "\
-Merge commit REV into the current branch; pretending it failed.
-Pretend the merge failed to give the user the opportunity to
-inspect the merge and change the commit message.
-
-\(git merge --no-commit --no-ff [ARGS] REV)
-
-\(fn REV &optional ARGS)" t nil)
-
-(autoload 'magit-merge-into "magit-merge" "\
-Merge the current branch into BRANCH and remove the former.
-
-Before merging, force push the source branch to its push-remote,
-provided the respective remote branch already exists, ensuring
-that the respective pull-request (if any) won't get stuck on some
-obsolete version of the commits that are being merged.  Finally
-if `magit-branch-pull-request' was used to create the merged
-branch, then also remove the respective remote branch.
-
-\(fn BRANCH &optional ARGS)" t nil)
-
-(autoload 'magit-merge-absorb "magit-merge" "\
-Merge BRANCH into the current branch and remove the former.
-
-Before merging, force push the source branch to its push-remote,
-provided the respective remote branch already exists, ensuring
-that the respective pull-request (if any) won't get stuck on some
-obsolete version of the commits that are being merged.  Finally
-if `magit-branch-pull-request' was used to create the merged
-branch, then also remove the respective remote branch.
-
-\(fn BRANCH &optional ARGS)" t nil)
-
-(autoload 'magit-merge-squash "magit-merge" "\
-Squash commit REV into the current branch; don't create a commit.
-
-\(git merge --squash REV)
-
-\(fn REV)" t nil)
-
-(autoload 'magit-merge-preview "magit-merge" "\
-Preview result of merging REV into the current branch.
-
-\(fn REV)" t nil)
-
-(autoload 'magit-merge-abort "magit-merge" "\
-Abort the current merge operation.
-
-\(git merge --abort)
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-notes" "magit-notes.el" (23450 31827
-;;;;;;  565036 277000))
-;;; Generated autoloads from magit-notes.el
- (autoload 'magit-notes-popup "magit" nil t)
-
-;;;***
-
-;;;### (autoloads nil "magit-refs" "magit-refs.el" (23450 31827 519757
-;;;;;;  720000))
-;;; Generated autoloads from magit-refs.el
-
-(autoload 'magit-show-refs-popup "magit-refs" "\
-Popup console for `magit-show-refs'.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'magit-show-refs-head "magit-refs" "\
-List and compare references in a dedicated buffer.
-Refs are compared with `HEAD'.
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'magit-show-refs-current "magit-refs" "\
-List and compare references in a dedicated buffer.
-Refs are compared with the current branch or `HEAD' if
-it is detached.
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'magit-show-refs "magit-refs" "\
-List and compare references in a dedicated buffer.
-Refs are compared with a branch read from the user.
-
-\(fn &optional REF ARGS)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-remote" "magit-remote.el" (23450 31827
-;;;;;;  524309 220000))
-;;; Generated autoloads from magit-remote.el
-
-(autoload 'magit-clone "magit-remote" "\
-Clone the REPOSITORY to DIRECTORY.
-Then show the status buffer for the new repository.
-
-\(fn REPOSITORY DIRECTORY)" t nil)
- (autoload 'magit-remote-popup "magit-remote" nil t)
-
-(autoload 'magit-remote-add "magit-remote" "\
-Add a remote named REMOTE and fetch it.
-
-\(fn REMOTE URL &optional ARGS)" t nil)
-
-(autoload 'magit-remote-rename "magit-remote" "\
-Rename the remote named OLD to NEW.
-
-\(fn OLD NEW)" t nil)
-
-(autoload 'magit-remote-remove "magit-remote" "\
-Delete the remote named REMOTE.
-
-\(fn REMOTE)" t nil)
-
-(autoload 'magit-remote-prune "magit-remote" "\
-Remove stale remote-tracking branches for REMOTE.
-
-\(fn REMOTE)" t nil)
-
-(autoload 'magit-remote-prune-refspecs "magit-remote" "\
-Remove stale refspecs for REMOTE.
-
-A refspec is stale if there no longer exists at least one branch
-on the remote that would be fetched due to that refspec.  A stale
-refspec is problematic because its existence causes Git to refuse
-to fetch according to the remaining non-stale refspecs.
-
-If only stale refspecs remain, then offer to either delete the
-remote or to replace the stale refspecs with the default refspec.
-
-Also remove the remote-tracking branches that were created due to
-the now stale refspecs.  Other stale branches are not removed.
-
-\(fn REMOTE)" t nil)
-
-(autoload 'magit-remote-set-head "magit-remote" "\
-Set the local representation of REMOTE's default branch.
-Query REMOTE and set the symbolic-ref refs/remotes/<remote>/HEAD
-accordingly.  With a prefix argument query for the branch to be
-used, which allows you to select an incorrect value if you fancy
-doing that.
-
-\(fn REMOTE &optional BRANCH)" t nil)
-
-(autoload 'magit-remote-unset-head "magit-remote" "\
-Unset the local representation of REMOTE's default branch.
-Delete the symbolic-ref \"refs/remotes/<remote>/HEAD\".
-
-\(fn REMOTE)" t nil)
-
-(autoload 'magit-remote-config-popup "magit-remote" "\
-Popup console for setting remote variables.
-
-\(fn REMOTE)" t nil)
- (autoload 'magit-fetch-popup "magit-remote" nil t)
-
-(autoload 'magit-fetch-from-pushremote "magit-remote" "\
-Fetch from the push-remote of the current branch.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-fetch-from-upstream "magit-remote" "\
-Fetch from the upstream repository of the current branch.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-fetch "magit-remote" "\
-Fetch from another repository.
-
-\(fn REMOTE ARGS)" t nil)
-
-(autoload 'magit-fetch-branch "magit-remote" "\
-Fetch a BRANCH from a REMOTE.
-
-\(fn REMOTE BRANCH ARGS)" t nil)
-
-(autoload 'magit-fetch-refspec "magit-remote" "\
-Fetch a REFSPEC from a REMOTE.
-
-\(fn REMOTE REFSPEC ARGS)" t nil)
-
-(autoload 'magit-fetch-all "magit-remote" "\
-Fetch from all remotes.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-fetch-all-prune "magit-remote" "\
-Fetch from all remotes, and prune.
-Prune remote tracking branches for branches that have been
-removed on the respective remote.
-
-\(fn)" t nil)
-
-(autoload 'magit-fetch-all-no-prune "magit-remote" "\
-Fetch from all remotes.
-
-\(fn)" t nil)
-
-(autoload 'magit-fetch-modules "magit-remote" "\
-Fetch all submodules.
-
-Option `magit-fetch-modules-jobs' controls how many submodules
-are being fetched in parallel.  Also fetch the super-repository,
-because `git-fetch' does not support not doing that.  With a
-prefix argument fetch all remotes.
-
-\(fn &optional ALL)" t nil)
- (autoload 'magit-pull-popup "magit-remote" nil t)
- (autoload 'magit-pull-and-fetch-popup "magit-remote" nil t)
-
-(autoload 'magit-pull-from-pushremote "magit-remote" "\
-Pull from the push-remote of the current branch.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-pull-from-upstream "magit-remote" "\
-Pull from the upstream of the current branch.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-pull "magit-remote" "\
-Pull from a branch read in the minibuffer.
-
-\(fn SOURCE ARGS)" t nil)
- (autoload 'magit-push-popup "magit-remote" nil t)
-
-(autoload 'magit-push-current-to-pushremote "magit-remote" "\
-Push the current branch to `branch.<name>.pushRemote'.
-If that variable is unset, then push to `remote.pushDefault'.
-
-When `magit-push-current-set-remote-if-missing' is non-nil and
-the push-remote is not configured, then read the push-remote from
-the user, set it, and then push to it.  With a prefix argument
-the push-remote can be changed before pushed to it.
-
-\(fn ARGS &optional PUSH-REMOTE)" t nil)
-
-(autoload 'magit-push-current-to-upstream "magit-remote" "\
-Push the current branch to its upstream branch.
-
-When `magit-push-current-set-remote-if-missing' is non-nil and
-the upstream is not configured, then read the upstream from the
-user, set it, and then push to it.  With a prefix argument the
-upstream can be changed before pushed to it.
-
-\(fn ARGS &optional UPSTREAM)" t nil)
-
-(autoload 'magit-push-current "magit-remote" "\
-Push the current branch to a branch read in the minibuffer.
-
-\(fn TARGET ARGS)" t nil)
-
-(autoload 'magit-push "magit-remote" "\
-Push an arbitrary branch or commit somewhere.
-Both the source and the target are read in the minibuffer.
-
-\(fn SOURCE TARGET ARGS)" t nil)
-
-(autoload 'magit-push-refspecs "magit-remote" "\
-Push one or multiple REFSPECS to a REMOTE.
-Both the REMOTE and the REFSPECS are read in the minibuffer.  To
-use multiple REFSPECS, separate them with commas.  Completion is
-only available for the part before the colon, or when no colon
-is used.
-
-\(fn REMOTE REFSPECS ARGS)" t nil)
-
-(autoload 'magit-push-matching "magit-remote" "\
-Push all matching branches to another repository.
-If multiple remotes exist, then read one from the user.
-If just one exists, use that without requiring confirmation.
-
-\(fn REMOTE &optional ARGS)" t nil)
-
-(autoload 'magit-push-tags "magit-remote" "\
-Push all tags to another repository.
-If only one remote exists, then push to that.  Otherwise prompt
-for a remote, offering the remote configured for the current
-branch as default.
-
-\(fn REMOTE &optional ARGS)" t nil)
-
-(autoload 'magit-push-tag "magit-remote" "\
-Push a tag to another repository.
-
-\(fn TAG REMOTE &optional ARGS)" t nil)
-
-(autoload 'magit-push-implicitly "magit-remote" "\
-Push somewhere without using an explicit refspec.
-
-This command simply runs \"git push -v [ARGS]\".  ARGS are the
-arguments specified in the popup buffer.  No explicit refspec
-arguments are used.  Instead the behavior depends on at least
-these Git variables: `push.default', `remote.pushDefault',
-`branch.<branch>.pushRemote', `branch.<branch>.remote',
-`branch.<branch>.merge', and `remote.<remote>.push'.
-
-To add this command to the push popup add this to your init file:
-
-  (with-eval-after-load \\='magit-remote
-    (magit-define-popup-action \\='magit-push-popup ?P
-      \\='magit-push-implicitly--desc
-      \\='magit-push-implicitly ?p t))
-
-The function `magit-push-implicitly--desc' attempts to predict
-what this command will do.  The value it returns is displayed in
-the popup buffer.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-push-to-remote "magit-remote" "\
-Push to REMOTE without using an explicit refspec.
-The REMOTE is read in the minibuffer.
-
-This command simply runs \"git push -v [ARGS] REMOTE\".  ARGS
-are the arguments specified in the popup buffer.  No refspec
-arguments are used.  Instead the behavior depends on at least
-these Git variables: `push.default', `remote.pushDefault',
-`branch.<branch>.pushRemote', `branch.<branch>.remote',
-`branch.<branch>.merge', and `remote.<remote>.push'.
-
-To add this command to the push popup add this to your init file:
-
-  (with-eval-after-load \\='magit-remote
-    (magit-define-popup-action \\='magit-push-popup ?r
-      \\='magit-push-to-remote--desc
-      \\='magit-push-to-remote ?p t))
-
-\(fn REMOTE ARGS)" t nil)
- (autoload 'magit-patch-popup "magit-remote" nil t)
-
-(autoload 'magit-format-patch "magit-remote" "\
-Create patches for the commits in RANGE.
-When a single commit is given for RANGE, create a patch for the
-changes introduced by that commit (unlike 'git format-patch'
-which creates patches for all commits that are reachable from
-`HEAD' but not from the specified commit).
-
-\(fn RANGE ARGS)" t nil)
-
-(autoload 'magit-request-pull "magit-remote" "\
-Request upstream to pull from you public repository.
-
-URL is the url of your publically accessible repository.
-START is a commit that already is in the upstream repository.
-END is the last commit, usually a branch name, which upstream
-is asked to pull.  START has to be reachable from that commit.
-
-\(fn URL START END)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-repos" "magit-repos.el" (23450 31827
-;;;;;;  535657 634000))
-;;; Generated autoloads from magit-repos.el
-
-(autoload 'magit-list-repositories "magit-repos" "\
-Display a list of repositories.
-
-Use the options `magit-repository-directories' to control which
-repositories are displayed.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-reset" "magit-reset.el" (23450 31827
-;;;;;;  570595 161000))
-;;; Generated autoloads from magit-reset.el
- (autoload 'magit-reset-popup "magit" nil t)
-
-(autoload 'magit-reset "magit-reset" "\
-Reset the `HEAD' and index to COMMIT, but not the working tree.
-With a prefix argument also reset the working tree.
-
-\(git reset --mixed|--hard COMMIT)
-
-\(fn COMMIT &optional HARD)" t nil)
-
-(autoload 'magit-reset-head "magit-reset" "\
-Reset the `HEAD' and index to COMMIT, but not the working tree.
-
-\(git reset --mixed COMMIT)
-
-\(fn COMMIT)" t nil)
-
-(autoload 'magit-reset-soft "magit-reset" "\
-Reset the `HEAD' to COMMIT, but not the index and working tree.
-
-\(git reset --soft REVISION)
-
-\(fn COMMIT)" t nil)
-
-(autoload 'magit-reset-hard "magit-reset" "\
-Reset the `HEAD', index, and working tree to COMMIT.
-
-\(git reset --hard REVISION)
-
-\(fn COMMIT)" t nil)
-
-(autoload 'magit-reset-index "magit-reset" "\
-Reset the index to COMMIT.
-Keep the `HEAD' and working tree as-is, so if COMMIT refers to the
-head this effectively unstages all changes.
-
-\(git reset COMMIT .)
-
-\(fn COMMIT)" t nil)
-
-(autoload 'magit-reset-worktree "magit-reset" "\
-Reset the worktree to COMMIT.
-Keep the `HEAD' and index as-is.
-
-\(fn COMMIT)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-sequence" "magit-sequence.el" (23450
-;;;;;;  31827 516270 756000))
-;;; Generated autoloads from magit-sequence.el
-
-(autoload 'magit-sequencer-continue "magit-sequence" "\
-Resume the current cherry-pick or revert sequence.
-
-\(fn)" t nil)
-
-(autoload 'magit-sequencer-skip "magit-sequence" "\
-Skip the stopped at commit during a cherry-pick or revert sequence.
-
-\(fn)" t nil)
-
-(autoload 'magit-sequencer-abort "magit-sequence" "\
-Abort the current cherry-pick or revert sequence.
-This discards all changes made since the sequence started.
-
-\(fn)" t nil)
- (autoload 'magit-cherry-pick-popup "magit-sequence" nil t)
-
-(autoload 'magit-cherry-pick "magit-sequence" "\
-Copy COMMITS from another branch onto the current branch.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then pick all of them,
-without prompting.
-
-\(fn COMMITS &optional ARGS)" t nil)
-
-(autoload 'magit-cherry-apply "magit-sequence" "\
-Apply the changes in COMMITS but do not commit them.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then apply all of them,
-without prompting.
-
-\(fn COMMITS &optional ARGS)" t nil)
-
-(autoload 'magit-cherry-harvest "magit-sequence" "\
-Move COMMITS from another BRANCH onto the current branch.
-Remove the COMMITS from BRANCH and stay on the current branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually.
-
-\(fn COMMITS BRANCH &optional ARGS)" t nil)
-
-(autoload 'magit-cherry-donate "magit-sequence" "\
-Move COMMITS from the current branch onto another existing BRANCH.
-Remove COMMITS from the current branch and stay on that branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually.
-
-\(fn COMMITS BRANCH &optional ARGS)" t nil)
-
-(autoload 'magit-cherry-spinout "magit-sequence" "\
-Move COMMITS from the current branch onto a new BRANCH.
-Remove COMMITS from the current branch and stay on that branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually.
-
-\(fn COMMITS BRANCH START-POINT &optional ARGS)" t nil)
-
-(autoload 'magit-cherry-spinoff "magit-sequence" "\
-Move COMMITS from the current branch onto a new BRANCH.
-Remove COMMITS from the current branch and checkout BRANCH.
-If a conflict occurs, then you have to fix that and finish
-the process manually.
-
-\(fn COMMITS BRANCH START-POINT &optional ARGS)" t nil)
- (autoload 'magit-revert-popup "magit-sequence" nil t)
-
-(autoload 'magit-revert "magit-sequence" "\
-Revert COMMIT by creating a new commit.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then revert all of them,
-without prompting.
-
-\(fn COMMIT &optional ARGS)" t nil)
-
-(autoload 'magit-revert-no-commit "magit-sequence" "\
-Revert COMMIT by applying it in reverse to the worktree.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then revert all of them,
-without prompting.
-
-\(fn COMMIT &optional ARGS)" t nil)
- (autoload 'magit-am-popup "magit-sequence" nil t)
-
-(autoload 'magit-am-apply-patches "magit-sequence" "\
-Apply the patches FILES.
-
-\(fn &optional FILES ARGS)" t nil)
-
-(autoload 'magit-am-apply-maildir "magit-sequence" "\
-Apply the patches from MAILDIR.
-
-\(fn &optional MAILDIR ARGS)" t nil)
-
-(autoload 'magit-am-continue "magit-sequence" "\
-Resume the current patch applying sequence.
-
-\(fn)" t nil)
-
-(autoload 'magit-am-skip "magit-sequence" "\
-Skip the stopped at patch during a patch applying sequence.
-
-\(fn)" t nil)
-
-(autoload 'magit-am-abort "magit-sequence" "\
-Abort the current patch applying sequence.
-This discards all changes made since the sequence started.
-
-\(fn)" t nil)
- (autoload 'magit-rebase-popup "magit-sequence" nil t)
-
-(autoload 'magit-rebase-onto-pushremote "magit-sequence" "\
-Rebase the current branch onto `branch.<name>.pushRemote'.
-If that variable is unset, then rebase onto `remote.pushDefault'.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-rebase-onto-upstream "magit-sequence" "\
-Rebase the current branch onto its upstream branch.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-rebase "magit-sequence" "\
-Rebase the current branch onto a branch read in the minibuffer.
-All commits that are reachable from `HEAD' but not from the
-selected branch TARGET are being rebased.
-
-\(fn TARGET ARGS)" t nil)
-
-(autoload 'magit-rebase-subset "magit-sequence" "\
-Rebase a subset of the current branch's history onto a new base.
-Rebase commits from START to `HEAD' onto NEWBASE.
-START has to be selected from a list of recent commits.
-
-\(fn NEWBASE START ARGS)" t nil)
-
-(autoload 'magit-rebase-interactive "magit-sequence" "\
-Start an interactive rebase sequence.
-
-\(fn COMMIT ARGS)" t nil)
-
-(autoload 'magit-rebase-autosquash "magit-sequence" "\
-Combine squash and fixup commits with their intended targets.
-
-\(fn ARGS)" t nil)
-
-(autoload 'magit-rebase-edit-commit "magit-sequence" "\
-Edit a single older commit using rebase.
-
-\(fn COMMIT ARGS)" t nil)
-
-(autoload 'magit-rebase-reword-commit "magit-sequence" "\
-Reword a single older commit using rebase.
-
-\(fn COMMIT ARGS)" t nil)
-
-(autoload 'magit-rebase-remove-commit "magit-sequence" "\
-Remove a single older commit using rebase.
-
-\(fn COMMIT ARGS)" t nil)
-
-(autoload 'magit-rebase-continue "magit-sequence" "\
-Restart the current rebasing operation.
-In some cases this pops up a commit message buffer for you do
-edit.  With a prefix argument the old message is reused as-is.
-
-\(fn &optional NOEDIT)" t nil)
-
-(autoload 'magit-rebase-skip "magit-sequence" "\
-Skip the current commit and restart the current rebase operation.
-
-\(fn)" t nil)
-
-(autoload 'magit-rebase-edit "magit-sequence" "\
-Edit the todo list of the current rebase operation.
-
-\(fn)" t nil)
-
-(autoload 'magit-rebase-abort "magit-sequence" "\
-Abort the current rebase operation, restoring the original branch.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-stash" "magit-stash.el" (23450 31827
-;;;;;;  546993 843000))
-;;; Generated autoloads from magit-stash.el
- (autoload 'magit-stash-popup "magit-stash" nil t)
-
-(autoload 'magit-stash "magit-stash" "\
-Create a stash of the index and working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'.
-
-\(fn MESSAGE &optional INCLUDE-UNTRACKED)" t nil)
-
-(autoload 'magit-stash-index "magit-stash" "\
-Create a stash of the index only.
-Unstaged and untracked changes are not stashed.  The stashed
-changes are applied in reverse to both the index and the
-worktree.  This command can fail when the worktree is not clean.
-Applying the resulting stash has the inverse effect.
-
-\(fn MESSAGE)" t nil)
-
-(autoload 'magit-stash-worktree "magit-stash" "\
-Create a stash of unstaged changes in the working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'.
-
-\(fn MESSAGE &optional INCLUDE-UNTRACKED)" t nil)
-
-(autoload 'magit-stash-keep-index "magit-stash" "\
-Create a stash of the index and working tree, keeping index intact.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'.
-
-\(fn MESSAGE &optional INCLUDE-UNTRACKED)" t nil)
-
-(autoload 'magit-snapshot "magit-stash" "\
-Create a snapshot of the index and working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'.
-
-\(fn &optional INCLUDE-UNTRACKED)" t nil)
-
-(autoload 'magit-snapshot-index "magit-stash" "\
-Create a snapshot of the index only.
-Unstaged and untracked changes are not stashed.
-
-\(fn)" t nil)
-
-(autoload 'magit-snapshot-worktree "magit-stash" "\
-Create a snapshot of unstaged changes in the working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'.
-
-\(fn &optional INCLUDE-UNTRACKED)" t nil)
-
-(autoload 'magit-stash-apply "magit-stash" "\
-Apply a stash to the working tree.
-Try to preserve the stash index.  If that fails because there
-are staged changes, apply without preserving the stash index.
-
-\(fn STASH)" t nil)
-
-(autoload 'magit-stash-drop "magit-stash" "\
-Remove a stash from the stash list.
-When the region is active offer to drop all contained stashes.
-
-\(fn STASH)" t nil)
-
-(autoload 'magit-stash-clear "magit-stash" "\
-Remove all stashes saved in REF's reflog by deleting REF.
-
-\(fn REF)" t nil)
-
-(autoload 'magit-stash-branch "magit-stash" "\
-Create and checkout a new BRANCH from STASH.
-
-\(fn STASH BRANCH)" t nil)
-
-(autoload 'magit-stash-branch-here "magit-stash" "\
-Create and checkout a new BRANCH and apply STASH.
-The branch is created using `magit-branch', using the current
-branch or `HEAD' as the string-point.
-
-\(fn STASH BRANCH)" t nil)
-
-(autoload 'magit-stash-format-patch "magit-stash" "\
-Create a patch from STASH
-
-\(fn STASH)" t nil)
-
-(autoload 'magit-stash-list "magit-stash" "\
-List all stashes in a buffer.
-
-\(fn)" t nil)
-
-(autoload 'magit-stash-show "magit-stash" "\
-Show all diffs of a stash in a buffer.
-
-\(fn STASH &optional ARGS FILES)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-status" "magit-status.el" (23450 31827
-;;;;;;  575787 931000))
-;;; Generated autoloads from magit-status.el
-
-(autoload 'magit-init "magit-status" "\
-Initialize a Git repository, then show its status.
-
-If the directory is below an existing repository, then the user
-has to confirm that a new one should be created inside.  If the
-directory is the root of the existing repository, then the user
-has to confirm that it should be reinitialized.
-
-Non-interactively DIRECTORY is (re-)initialized unconditionally.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'magit-status "magit-status" "\
-Show the status of the current Git repository in a buffer.
-With a prefix argument prompt for a repository to be shown.
-With two prefix arguments prompt for an arbitrary directory.
-If that directory isn't the root of an existing repository,
-then offer to initialize it as a new repository.
-
-\(fn &optional DIRECTORY CACHE)" t nil)
-
-(autoload 'magit-status-internal "magit-status" "\
-
-
-\(fn DIRECTORY)" nil nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-submodule" "magit-submodule.el" (23450
-;;;;;;  31827 508371 47000))
-;;; Generated autoloads from magit-submodule.el
- (autoload 'magit-submodule-popup "magit-submodule" nil t)
-
-(autoload 'magit-submodule-add "magit-submodule" "\
-Add the repository at URL as a module.
-
-Optional PATH is the path to the module relative to the root of
-the superproject.  If it is nil, then the path is determined
-based on the URL.  Optional NAME is the name of the module.  If
-it is nil, then PATH also becomes the name.
-
-\(fn URL &optional PATH NAME ARGS)" t nil)
-
-(autoload 'magit-submodule-read-name-for-path "magit-submodule" "\
-
-
-\(fn PATH &optional PREFER-SHORT)" nil nil)
-
-(autoload 'magit-submodule-register "magit-submodule" "\
-Register MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user.
-
-\(fn MODULES)" t nil)
-
-(autoload 'magit-submodule-populate "magit-submodule" "\
-Create MODULES working directories, checking out the recorded commits.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user.
-
-\(fn MODULES)" t nil)
-
-(autoload 'magit-submodule-update "magit-submodule" "\
-Update MODULES by checking out the recorded commits.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user.
-
-\(fn MODULES ARGS)" t nil)
-
-(autoload 'magit-submodule-synchronize "magit-submodule" "\
-Synchronize url configuration of MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user.
-
-\(fn MODULES ARGS)" t nil)
-
-(autoload 'magit-submodule-unpopulate "magit-submodule" "\
-Remove working directories of MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user.
-
-\(fn MODULES ARGS)" t nil)
-
-(autoload 'magit-insert-modules "magit-submodule" "\
-Insert submodule sections.
-Hook `magit-module-sections-hook' controls which module sections
-are inserted, and option `magit-module-sections-nested' controls
-whether they are wrapped in an additional section.
-
-\(fn)" nil nil)
-
-(autoload 'magit-insert-modules-overview "magit-submodule" "\
-Insert sections for all modules.
-For each section insert the path and the output of `git describe --tags',
-or, failing that, the abbreviated HEAD commit hash.
-
-\(fn)" nil nil)
-
-(autoload 'magit-insert-modules-unpulled-from-upstream "magit-submodule" "\
-Insert sections for modules that haven't been pulled from the upstream.
-These sections can be expanded to show the respective commits.
-
-\(fn)" nil nil)
-
-(autoload 'magit-insert-modules-unpulled-from-pushremote "magit-submodule" "\
-Insert sections for modules that haven't been pulled from the push-remote.
-These sections can be expanded to show the respective commits.
-
-\(fn)" nil nil)
-
-(autoload 'magit-insert-modules-unpushed-to-upstream "magit-submodule" "\
-Insert sections for modules that haven't been pushed to the upstream.
-These sections can be expanded to show the respective commits.
-
-\(fn)" nil nil)
-
-(autoload 'magit-insert-modules-unpushed-to-pushremote "magit-submodule" "\
-Insert sections for modules that haven't been pushed to the push-remote.
-These sections can be expanded to show the respective commits.
-
-\(fn)" nil nil)
-
-(autoload 'magit-list-submodules "magit-submodule" "\
-Display a list of the current repository's submodules.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-subtree" "magit-subtree.el" (23450 31827
-;;;;;;  567777 764000))
-;;; Generated autoloads from magit-subtree.el
- (autoload 'magit-subtree-popup "magit-subtree" nil t)
-
-(autoload 'magit-subtree-add "magit-subtree" "\
-Add REF from REPOSITORY as a new subtree at PREFIX.
-
-\(fn PREFIX REPOSITORY REF ARGS)" t nil)
-
-(autoload 'magit-subtree-add-commit "magit-subtree" "\
-Add COMMIT as a new subtree at PREFIX.
-
-\(fn PREFIX COMMIT ARGS)" t nil)
-
-(autoload 'magit-subtree-merge "magit-subtree" "\
-Merge COMMIT into the PREFIX subtree.
-
-\(fn PREFIX COMMIT ARGS)" t nil)
-
-(autoload 'magit-subtree-pull "magit-subtree" "\
-Pull REF from REPOSITORY into the PREFIX subtree.
-
-\(fn PREFIX REPOSITORY REF ARGS)" t nil)
-
-(autoload 'magit-subtree-push "magit-subtree" "\
-Extract the history of the subtree PREFIX and push it to REF on REPOSITORY.
-
-\(fn PREFIX REPOSITORY REF ARGS)" t nil)
-
-(autoload 'magit-subtree-split "magit-subtree" "\
-Extract the history of the subtree PREFIX.
-
-\(fn PREFIX COMMIT ARGS)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-tag" "magit-tag.el" (23450 31827 569265
-;;;;;;  896000))
-;;; Generated autoloads from magit-tag.el
- (autoload 'magit-tag-popup "magit" nil t)
-
-(autoload 'magit-tag "magit-tag" "\
-Create a new tag with the given NAME at REV.
-With a prefix argument annotate the tag.
-
-\(git tag [--annotate] NAME REV)
-
-\(fn NAME REV &optional ARGS)" t nil)
-
-(autoload 'magit-tag-delete "magit-tag" "\
-Delete one or more tags.
-If the region marks multiple tags (and nothing else), then offer
-to delete those, otherwise prompt for a single tag to be deleted,
-defaulting to the tag at point.
-
-\(git tag -d TAGS)
-
-\(fn TAGS)" t nil)
-
-(autoload 'magit-tag-prune "magit-tag" "\
-Offer to delete tags missing locally from REMOTE, and vice versa.
-
-\(fn TAGS REMOTE-TAGS REMOTE)" t nil)
-
-(autoload 'magit-tag-release "magit-tag" "\
-Create an opinionated release tag.
-
-Assume version tags that match \"\\\\`v?[0-9]\\\\(\\\\.[0-9]\\\\)*\\\\'\".
-Prompt for the name of the new tag using the highest existing tag
-as initial input and call \"git tag --annotate --sign -m MSG\" TAG,
-regardless of whether these arguments are enabled in the popup.
-Given a TAG \"v1.2.3\" and a repository \"/path/to/foo-bar\", the
-MESSAGE would be \"Foo-Bar 1.2.3\".
-
-Because it is so opinionated, this command is not available from
-the tag popup by default.
-
-\(fn TAG)" t nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-utils" "magit-utils.el" (23450 31827
-;;;;;;  527310 950000))
-;;; Generated autoloads from magit-utils.el
-
-(autoload 'magit-emacs-Q-command "magit-utils" "\
-Show a shell command that runs an uncustomized Emacs with only Magit loaded.
-See info node `(magit)Debugging Tools' for more information.
-
-\(fn)" t nil)
-
-(autoload 'Info-follow-nearest-node--magit-gitman "magit-utils" "\
-
-
-\(fn FN &optional FORK)" nil nil)
-
-(advice-add 'Info-follow-nearest-node :around 'Info-follow-nearest-node--magit-gitman)
-
-(autoload 'org-man-export--magit-gitman "magit-utils" "\
-
-
-\(fn FN LINK DESCRIPTION FORMAT)" nil nil)
-
-(advice-add 'org-man-export :around 'org-man-export--magit-gitman)
-
-;;;***
-
-;;;### (autoloads nil "magit-wip" "magit-wip.el" (23450 31827 562059
-;;;;;;  416000))
-;;; Generated autoloads from magit-wip.el
-
-(defvar magit-wip-after-save-mode nil "\
-Non-nil if Magit-Wip-After-Save mode is enabled.
-See the `magit-wip-after-save-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `magit-wip-after-save-mode'.")
-
-(custom-autoload 'magit-wip-after-save-mode "magit-wip" nil)
-
-(autoload 'magit-wip-after-save-mode "magit-wip" "\
-Toggle Magit-Wip-After-Save-Local mode in all buffers.
-With prefix ARG, enable Magit-Wip-After-Save mode if ARG is positive;
-otherwise, disable it.  If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Magit-Wip-After-Save-Local mode is enabled in all buffers where
-`magit-wip-after-save-local-mode-turn-on' would do it.
-See `magit-wip-after-save-local-mode' for more information on Magit-Wip-After-Save-Local mode.
-
-\(fn &optional ARG)" t nil)
-
-(defvar magit-wip-after-apply-mode nil "\
-Non-nil if Magit-Wip-After-Apply mode is enabled.
-See the `magit-wip-after-apply-mode' command
-for a description of this minor mode.")
-
-(custom-autoload 'magit-wip-after-apply-mode "magit-wip" nil)
-
-(autoload 'magit-wip-after-apply-mode "magit-wip" "\
-Commit to work-in-progress refs.
-
-After applying a change using any \"apply variant\"
-command (apply, stage, unstage, discard, and reverse) commit the
-affected files to the current wip refs.  For each branch there
-may be two wip refs; one contains snapshots of the files as found
-in the worktree and the other contains snapshots of the entries
-in the index.
-
-\(fn &optional ARG)" t nil)
-
-(defvar magit-wip-before-change-mode nil "\
-Non-nil if Magit-Wip-Before-Change mode is enabled.
-See the `magit-wip-before-change-mode' command
-for a description of this minor mode.")
-
-(custom-autoload 'magit-wip-before-change-mode "magit-wip" nil)
-
-(autoload 'magit-wip-before-change-mode "magit-wip" "\
-Commit to work-in-progress refs before certain destructive changes.
-
-Before invoking a revert command or an \"apply variant\"
-command (apply, stage, unstage, discard, and reverse) commit the
-affected tracked files to the current wip refs.  For each branch
-there may be two wip refs; one contains snapshots of the files
-as found in the worktree and the other contains snapshots of the
-entries in the index.
-
-Only changes to files which could potentially be affected by the
-command which is about to be called are committed.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'magit-wip-commit-initial-backup "magit-wip" "\
-Before saving, commit current file to a worktree wip ref.
-
-The user has to add this function to `before-save-hook'.
-
-Commit the current state of the visited file before saving the
-current buffer to that file.  This backs up the same version of
-the file as `backup-buffer' would, but stores the backup in the
-worktree wip ref, which is also used by the various Magit Wip
-modes, instead of in a backup file as `backup-buffer' would.
-
-This function ignores the variables that affect `backup-buffer'
-and can be used along-side that function, which is recommended
-because this function only backs up files that are tracked in
-a Git repository.
-
-\(fn)" nil nil)
-
-;;;***
-
-;;;### (autoloads nil "magit-worktree" "magit-worktree.el" (23450
-;;;;;;  31827 563545 470000))
-;;; Generated autoloads from magit-worktree.el
- (autoload 'magit-worktree-popup "magit-worktree" nil t)
-
-(autoload 'magit-worktree-checkout "magit-worktree" "\
-Checkout BRANCH in a new worktree at PATH.
-
-\(fn PATH BRANCH)" t nil)
-
-(autoload 'magit-worktree-branch "magit-worktree" "\
-Create a new BRANCH and check it out in a new worktree at PATH.
-
-\(fn PATH BRANCH START-POINT &optional FORCE)" t nil)
-
-;;;***
-
-;;;### (autoloads nil nil ("magit-core.el" "magit-git.el" "magit-margin.el"
-;;;;;;  "magit-mode.el" "magit-obsolete.el" "magit-pkg.el" "magit-process.el"
-;;;;;;  "magit-section.el") (23450 31827 566381 854000))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; magit-autoloads.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.el
deleted file mode 100644
index 4a5fd619c461..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.el
+++ /dev/null
@@ -1,260 +0,0 @@
-;;; magit-autorevert.el --- revert buffers when files in repository change  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-
-(require 'magit-git)
-
-(require 'autorevert)
-
-;;; Options
-
-(defgroup magit-auto-revert nil
-  "Revert buffers when files in repository change."
-  :link '(custom-group-link auto-revert)
-  :link '(info-link "(magit)Automatic Reverting of File-Visiting Buffers")
-  :group 'auto-revert
-  :group 'magit-essentials
-  :group 'magit-modes)
-
-(defcustom auto-revert-buffer-list-filter nil
-  "Filter that determines which buffers `auto-revert-buffers' reverts.
-
-This option is provided by `magit', which also redefines
-`auto-revert-buffers' to respect it.  Magit users who do not turn
-on the local mode `auto-revert-mode' themselves, are best served
-by setting the value to `magit-auto-revert-repository-buffers-p'.
-
-However the default is nil, to not disturb users who do use the
-local mode directly.  If you experience delays when running Magit
-commands, then you should consider using one of the predicates
-provided by Magit - especially if you also use Tramp.
-
-Users who do turn on `auto-revert-mode' in buffers in which Magit
-doesn't do that for them, should likely not use any filter.
-Users who turn on `global-auto-revert-mode', do not have to worry
-about this option, because it is disregarded if the global mode
-is enabled."
-  :package-version '(magit . "2.4.2")
-  :group 'auto-revert
-  :group 'magit-auto-revert
-  :group 'magit-related
-  :type '(radio (const :tag "no filter" nil)
-                (function-item magit-auto-revert-buffer-p)
-                (function-item magit-auto-revert-repository-buffer-p)
-                function))
-
-(defcustom magit-auto-revert-tracked-only t
-  "Whether `magit-auto-revert-mode' only reverts tracked files."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-auto-revert
-  :type 'boolean
-  :set (lambda (var val)
-         (set var val)
-         (when (and (bound-and-true-p magit-auto-revert-mode)
-                    (featurep 'magit-autorevert))
-           (magit-auto-revert-mode -1)
-           (magit-auto-revert-mode))))
-
-(defcustom magit-auto-revert-immediately t
-  "Whether Magit reverts buffers immediately.
-
-If this is non-nil and either `global-auto-revert-mode' or
-`magit-auto-revert-mode' is enabled, then Magit immediately
-reverts buffers by explicitly calling `auto-revert-buffers'
-after running git for side-effects.
-
-If `auto-revert-use-notify' is non-nil (and file notifications
-are actually supported), then `magit-auto-revert-immediately'
-does not have to be non-nil, because the reverts happen
-immediately anyway.
-
-If `magit-auto-revert-immediately' and `auto-revert-use-notify'
-are both nil, then reverts happen after `auto-revert-interval'
-seconds of user inactivity.  That is not desirable."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-auto-revert
-  :type 'boolean)
-
-;;; Mode
-
-(defun magit-turn-on-auto-revert-mode-if-desired (&optional file)
-  (if file
-      (--when-let (find-buffer-visiting file)
-        (with-current-buffer it
-          (magit-turn-on-auto-revert-mode-if-desired)))
-    (when (and buffer-file-name
-               (file-readable-p buffer-file-name)
-               (magit-toplevel)
-               (or (not magit-auto-revert-tracked-only)
-                   (magit-file-tracked-p buffer-file-name))
-               (not auto-revert-mode)         ; see #3014
-               (not global-auto-revert-mode)) ; see #3460
-      (auto-revert-mode 1))))
-
-;;;###autoload
-(define-globalized-minor-mode magit-auto-revert-mode auto-revert-mode
-  magit-turn-on-auto-revert-mode-if-desired
-  :package-version '(magit . "2.4.0")
-  :link '(info-link "(magit)Automatic Reverting of File-Visiting Buffers")
-  :group 'magit-auto-revert
-  :group 'magit-essentials
-  ;; - When `global-auto-revert-mode' is enabled, then this mode is
-  ;;   redundant.
-  ;; - In all other cases enable the mode because if buffers are not
-  ;;   automatically reverted that would make many very common tasks
-  ;;   much more cumbersome.
-  ;; - When `magit-revert-buffers' is nil, then the user has opted out
-  ;;   of the automatic reverts while a very old implementation was
-  ;;   still in use.  We continued to respect that setting for another
-  ;;   two and a half years, but no longer do so now.
-  :init-value (and (not global-auto-revert-mode)
-                   (not noninteractive)))
-;; - Unfortunately `:init-value t' only sets the value of the mode
-;;   variable but does not cause the mode function to be called.
-;; - I don't think it works like this on purpose, but since one usually
-;;   should not enable global modes by default, it is understandable.
-;; - If the user has set the variable `magit-auto-revert-mode' to nil
-;;   after loading magit (instead of doing so before loading magit or
-;;   by using the function), then we should still respect that setting.
-;; - If the user has set the obsolete variable `magit-revert-buffers'
-;;   to nil before or after loading magit, then we should still respect
-;;   that setting.
-;; - If the user sets one of these variables after loading magit and
-;;   after `after-init-hook' has run, then that won't have an effect
-;;   and there is nothing we can do about it.
-(defun magit-auto-revert-mode--init-kludge ()
-  "This is an internal kludge to be used on `after-init-hook'.
-Do not use this function elsewhere, and don't remove it from
-the `after-init-hook'.  For more information see the comments
-and code surrounding the definition of this function."
-  (if magit-auto-revert-mode
-      (let ((start (current-time)))
-        (magit-message "Turning on magit-auto-revert-mode...")
-        (magit-auto-revert-mode 1)
-        (magit-message
-         "Turning on magit-auto-revert-mode...done%s"
-         (let ((elapsed (float-time (time-subtract (current-time) start))))
-           (if (> elapsed 0.2)
-               (format " (%.3fs, %s buffers checked)" elapsed
-                       (length (buffer-list)))
-             ""))))
-    (magit-auto-revert-mode -1)))
-(if after-init-time
-    ;; Since `after-init-hook' has already been
-    ;; run, turn the mode on or off right now.
-    (magit-auto-revert-mode--init-kludge)
-  ;; By the time the init file has been fully loaded the
-  ;; values of the relevant variables might have changed.
-  (add-hook 'after-init-hook #'magit-auto-revert-mode--init-kludge t))
-
-(put 'magit-auto-revert-mode 'function-documentation
-     "Toggle Magit Auto Revert mode.
-With a prefix argument ARG, enable Magit Auto Revert mode if ARG
-is positive, and disable it otherwise.  If called from Lisp,
-enable the mode if ARG is omitted or nil.
-
-Magit Auto Revert mode is a global minor mode that reverts
-buffers associated with a file that is located inside a Git
-repository when the file changes on disk.  Use `auto-revert-mode'
-to revert a particular buffer.  Or use `global-auto-revert-mode'
-to revert all file-visiting buffers, not just those that visit
-a file located inside a Git repository.
-
-This global mode works by turning on the buffer-local mode
-`auto-revert-mode' at the time a buffer is first created.  The
-local mode is turned on if the visited file is being tracked in
-a Git repository at the time when the buffer is created.
-
-If `magit-auto-revert-tracked-only' is non-nil (the default),
-then only tracked files are reverted.  But if you stage a
-previously untracked file using `magit-stage', then this mode
-notices that.
-
-Unlike `global-auto-revert-mode', this mode never reverts any
-buffers that are not visiting files.
-
-The behavior of this mode can be customized using the options
-in the `autorevert' and `magit-autorevert' groups.
-
-This function calls the hook `magit-auto-revert-mode-hook'.")
-
-(defun magit-auto-revert-buffers ()
-  (when (and magit-auto-revert-immediately
-             (or global-auto-revert-mode
-                 (and magit-auto-revert-mode auto-revert-buffer-list)))
-    (let ((auto-revert-buffer-list-filter
-           (or auto-revert-buffer-list-filter
-               'magit-auto-revert-repository-buffer-p)))
-      (auto-revert-buffers))))
-
-(defvar magit-auto-revert-toplevel nil)
-
-(when (< emacs-major-version 25)
-  (defvar auto-revert-buffers-counter 1
-    "Incremented each time `auto-revert-buffers' is called"))
-
-(defun magit-auto-revert-buffer-p (buffer)
-  "Return t if BUFFER visits a file inside the current repository.
-The current repository is the one in which `default-directory' is
-located.  If there is no current repository, then return t for
-any BUFFER."
-  (magit-auto-revert-repository-buffer-p buffer t))
-
-(defun magit-auto-revert-repository-buffer-p (buffer &optional fallback)
-  "Return t if BUFFER visits a file inside the current repository.
-The current repository is the one in which `default-directory' is
-located.  If there is no current repository, then return FALLBACK
-\(which defaults to nil) for any BUFFER."
-  ;; Call `magit-toplevel' just once per cycle.
-  (unless (and magit-auto-revert-toplevel
-               (= (cdr magit-auto-revert-toplevel)
-                  auto-revert-buffers-counter))
-    (setq magit-auto-revert-toplevel
-          (cons (or (magit-toplevel) 'no-repo)
-                auto-revert-buffers-counter)))
-  (let ((top (car magit-auto-revert-toplevel)))
-    (if (eq top 'no-repo)
-        fallback
-      (let ((dir (with-current-buffer buffer default-directory)))
-        (and (equal (file-remote-p dir)
-                    (file-remote-p top))
-             ;; ^ `tramp-handle-file-in-directory-p' lacks this optimization.
-             (file-in-directory-p dir top))))))
-
-(defun auto-revert-buffers--buffer-list-filter ()
-  (when (< emacs-major-version 25)
-    (cl-incf auto-revert-buffers-counter))
-  (when auto-revert-buffer-list-filter
-    (setq auto-revert-buffer-list
-          (--filter auto-revert-buffer-list-filter
-                    auto-revert-buffer-list))))
-
-(advice-add 'auto-revert-buffers :before
-            'auto-revert-buffers--buffer-list-filter)
-
-(provide 'magit-autorevert)
-;;; magit-autorevert.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.elc
deleted file mode 100644
index 37ad6449816f..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-autorevert.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.el
deleted file mode 100644
index c6280712df86..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.el
+++ /dev/null
@@ -1,210 +0,0 @@
-;;; magit-bisect.el --- bisect support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Use a binary search to find the commit that introduced a bug.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Options
-
-(defcustom magit-bisect-show-graph t
-  "Whether to use `--graph' in the log showing commits yet to be bisected."
-  :package-version '(magit . "2.8.0")
-  :group 'magit-status
-  :type 'boolean)
-
-(defface magit-bisect-good
-  '((t :foreground "DarkOliveGreen"))
-  "Face for good bisect revisions."
-  :group 'magit-faces)
-
-(defface magit-bisect-skip
-  '((t :foreground "DarkGoldenrod"))
-  "Face for skipped bisect revisions."
-  :group 'magit-faces)
-
-(defface magit-bisect-bad
-  '((t :foreground "IndianRed4"))
-  "Face for bad bisect revisions."
-  :group 'magit-faces)
-
-;;; Commands
-
-;;;###autoload (autoload 'magit-bisect-popup "magit-bisect" nil t)
-(magit-define-popup magit-bisect-popup
-  "Popup console for bisect commands."
-  :man-page "git-bisect"
-  :actions            '((?B "Start"        magit-bisect-start)
-                        (?s "Start script" magit-bisect-run))
-  :sequence-actions   '((?b "Bad"          magit-bisect-bad)
-                        (?g "Good"         magit-bisect-good)
-                        (?k "Skip"         magit-bisect-skip)
-                        (?r "Reset"        magit-bisect-reset)
-                        (?s "Run script"   magit-bisect-run))
-  :sequence-predicate 'magit-bisect-in-progress-p)
-
-;;;###autoload
-(defun magit-bisect-start (bad good)
-  "Start a bisect session.
-
-Bisecting a bug means to find the commit that introduced it.
-This command starts such a bisect session by asking for a know
-good and a bad commit.  To move the session forward use the
-other actions from the bisect popup (\
-\\<magit-status-mode-map>\\[magit-bisect-popup])."
-  (interactive (if (magit-bisect-in-progress-p)
-                   (user-error "Already bisecting")
-                 (magit-bisect-start-read-args)))
-  (magit-git-bisect "start" (list bad good) t))
-
-(defun magit-bisect-start-read-args ()
-  (let  ((b (magit-read-branch-or-commit "Start bisect with bad revision")))
-    (list b (magit-read-other-branch-or-commit "Good revision" b))))
-
-;;;###autoload
-(defun magit-bisect-reset ()
-  "After bisecting, cleanup bisection state and return to original `HEAD'."
-  (interactive)
-  (magit-confirm 'reset-bisect)
-  (magit-run-git "bisect" "reset")
-  (ignore-errors (delete-file (magit-git-dir "BISECT_CMD_OUTPUT"))))
-
-;;;###autoload
-(defun magit-bisect-good ()
-  "While bisecting, mark the current commit as good.
-Use this after you have asserted that the commit does not contain
-the bug in question."
-  (interactive)
-  (magit-git-bisect "good"))
-
-;;;###autoload
-(defun magit-bisect-bad ()
-  "While bisecting, mark the current commit as bad.
-Use this after you have asserted that the commit does contain the
-bug in question."
-  (interactive)
-  (magit-git-bisect "bad"))
-
-;;;###autoload
-(defun magit-bisect-skip ()
-  "While bisecting, skip the current commit.
-Use this if for some reason the current commit is not a good one
-to test.  This command lets Git choose a different one."
-  (interactive)
-  (magit-git-bisect "skip"))
-
-;;;###autoload
-(defun magit-bisect-run (cmdline &optional bad good)
-  "Bisect automatically by running commands after each step.
-
-Unlike `git bisect run' this can be used before bisecting has
-begun.  In that case it behaves like `git bisect start; git
-bisect run'."
-  (interactive (let ((args (and (not (magit-bisect-in-progress-p))
-                                (magit-bisect-start-read-args))))
-                 (cons (read-shell-command "Bisect shell command: ") args)))
-  (when (and bad good)
-    (magit-bisect-start bad good))
-  (magit-git-bisect "run" (list shell-file-name shell-command-switch cmdline)))
-
-(defun magit-git-bisect (subcommand &optional args no-assert)
-  (unless (or no-assert (magit-bisect-in-progress-p))
-    (user-error "Not bisecting"))
-  (magit-with-toplevel
-    (magit-run-git-with-logfile
-     (magit-git-dir "BISECT_CMD_OUTPUT") "bisect" subcommand args)))
-
-;;; Sections
-
-(defun magit-bisect-in-progress-p ()
-  (file-exists-p (magit-git-dir "BISECT_LOG")))
-
-(defun magit-insert-bisect-output ()
-  "While bisecting, insert section with output from `git bisect'."
-  (when (magit-bisect-in-progress-p)
-    (let* ((lines
-            (or (magit-file-lines (magit-git-dir "BISECT_CMD_OUTPUT"))
-                (list "Bisecting: (no saved bisect output)"
-                      "It appears you have invoked `git bisect' from a shell."
-                      "There is nothing wrong with that, we just cannot display"
-                      "anything useful here.  Consult the shell output instead.")))
-           (done-re "^\\([a-z0-9]\\{40\\}\\) is the first bad commit$")
-           (bad-line (or (and (string-match done-re (car lines))
-                              (pop lines))
-                         (--first (string-match done-re it) lines))))
-      (magit-insert-section ((eval (if bad-line 'commit 'bisect-output))
-                             (and bad-line (match-string 1 bad-line)))
-        (magit-insert-heading
-          (propertize (or bad-line (pop lines))
-                      'face 'magit-section-heading))
-        (dolist (line lines)
-          (insert line "\n"))))
-    (insert "\n")))
-
-(defun magit-insert-bisect-rest ()
-  "While bisecting, insert section visualizing the bisect state."
-  (when (magit-bisect-in-progress-p)
-    (magit-insert-section (bisect-view)
-      (magit-insert-heading "Bisect Rest:")
-      (magit-git-wash (apply-partially 'magit-log-wash-log 'bisect-vis)
-        "bisect" "visualize" "git" "log"
-        "--format=%h%d%x00%s" "--decorate=full"
-        (and magit-bisect-show-graph "--graph")))))
-
-(defun magit-insert-bisect-log ()
-  "While bisecting, insert section logging bisect progress."
-  (when (magit-bisect-in-progress-p)
-    (magit-insert-section (bisect-log)
-      (magit-insert-heading "Bisect Log:")
-      (magit-git-wash #'magit-wash-bisect-log "bisect" "log")
-      (insert ?\n))))
-
-(defun magit-wash-bisect-log (_args)
-  (let (beg)
-    (while (progn (setq beg (point-marker))
-                  (re-search-forward "^\\(git bisect [^\n]+\n\\)" nil t))
-      (magit-bind-match-strings (heading) nil
-        (magit-delete-match)
-        (save-restriction
-          (narrow-to-region beg (point))
-          (goto-char (point-min))
-          (magit-insert-section (bisect-item heading t)
-            (insert (propertize heading 'face 'magit-section-secondary-heading))
-            (magit-insert-heading)
-            (magit-wash-sequence
-             (apply-partially 'magit-log-wash-rev 'bisect-log
-                              (magit-abbrev-length)))
-            (insert ?\n)))))
-    (when (re-search-forward
-           "# first bad commit: \\[\\([a-z0-9]\\{40\\}\\)\\] [^\n]+\n" nil t)
-      (magit-bind-match-strings (hash) nil
-        (magit-delete-match)
-        (magit-insert-section (bisect-item)
-          (insert hash " is the first bad commit\n"))))))
-
-(provide 'magit-bisect)
-;;; magit-bisect.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.elc
deleted file mode 100644
index d6cc50dce1cd..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bisect.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.el
deleted file mode 100644
index 223a171b5b32..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.el
+++ /dev/null
@@ -1,926 +0,0 @@
-;;; magit-blame.el --- blame support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2012-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Annotates each line in file-visiting buffer with information from
-;; the revision which last modified the line.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Options
-
-(defgroup magit-blame nil
-  "Blame support for Magit."
-  :link '(info-link "(magit)Blaming")
-  :group 'magit-modes)
-
-(defcustom magit-blame-styles
-  '((headings
-     (heading-format   . "%-20a %C %s\n"))
-    (margin
-     (margin-format    . (" %s%f" " %C %a" " %H"))
-     (margin-width     . 42)
-     (margin-face      . magit-blame-margin)
-     (margin-body-face . (magit-blame-dimmed)))
-    (highlight
-     (highlight-face   . magit-blame-highlight))
-    (lines
-     (show-lines       . t)))
-  "List of styles used to visualize blame information.
-
-Each entry has the form (IDENT (KEY . VALUE)...).  IDENT has
-to be a symbol uniquely identifing the style.  The following
-KEYs are recognized:
-
- `show-lines'
-    Whether to prefix each chunk of lines with a thin line.
-    This has no effect if `heading-format' is non-nil.
- `highlight-face'
-    Face used to highlight the first line of each chunk.
-    If this is nil, then those lines are not highlighted.
- `heading-format'
-    String specifing the information to be shown above each
-    chunk of lines.  It must end with a newline character.
- `margin-format'
-    String specifing the information to be shown in the left
-    buffer margin.  It must NOT end with a newline character.
-    This can also be a list of formats used for the lines at
-    the same positions within the chunk.  If the chunk has
-    more lines than formats are specified, then the last is
-    repeated.
- `margin-width'
-    Width of the margin, provided `margin-format' is non-nil.
- `margin-face'
-    Face used in the margin, provided `margin-format' is
-    non-nil.  This face is used in combination with the faces
-    that are specific to the used %-specs.  If this is nil,
-    then `magit-blame-margin' is used.
- `margin-body-face'
-    Face used in the margin for all but first line of a chunk.
-    This face is used in combination with the faces that are
-    specific to the used %-specs.  This can also be a list of
-    faces (usually one face), in which case only these faces
-    are used and the %-spec faces are ignored.  A good value
-    might be `(magit-blame-dimmed)'.  If this is nil, then
-    the same face as for the first line is used.
-
-The following %-specs can be used in `heading-format' and
-`margin-format':
-
-  %H    hash              using face `magit-blame-hash'
-  %s    summary           using face `magit-blame-summary'
-  %a    author            using face `magit-blame-name'
-  %A    author time       using face `magit-blame-date'
-  %c    committer         using face `magit-blame-name'
-  %C    committer time    using face `magit-blame-date'
-
-Additionally if `margin-format' ends with %f, then the string
-that is displayed in the margin is made at least `margin-width'
-characters wide, which may be desirable if the used face sets
-the background color.
-
-The style used in the current buffer can be cycled from the blame
-popup.  Blame commands (except `magit-blame-echo') use the first
-style as the initial style when beginning to blame in a buffer."
-  :package-version '(magit . "2.13.0")
-  :group 'magit-blame
-  :type 'string)
-
-(defcustom magit-blame-echo-style 'lines
-  "The blame visualization style used by `magit-blame-echo'.
-A symbol that has to be used as the identifier for one of the
-styles defined in `magit-blame-styles'."
-  :package-version '(magit . "2.13.0")
-  :group 'magit-blame
-  :type 'symbol)
-
-(defcustom magit-blame-time-format "%F %H:%M"
-  "Format for time strings in blame headings."
-  :group 'magit-blame
-  :type 'string)
-
-(defcustom magit-blame-read-only t
-  "Whether to initially make the blamed buffer read-only."
-  :package-version '(magit . "2.13.0")
-  :group 'magit-blame
-  :type 'boolean)
-
-(defcustom magit-blame-disable-modes '(fci-mode yascroll-bar-mode)
-  "List of modes not compatible with Magit-Blame mode.
-This modes are turned off when Magit-Blame mode is turned on,
-and then turned on again when turning off the latter."
-  :group 'magit-blame
-  :type '(repeat (symbol :tag "Mode")))
-
-(defcustom magit-blame-mode-lighter " Blame"
-  "The mode-line lighter of the Magit-Blame mode."
-  :group 'magit-blame
-  :type '(choice (const :tag "No lighter" "") string))
-
-(defcustom magit-blame-goto-chunk-hook
-  '(magit-blame-maybe-update-revision-buffer
-    magit-blame-maybe-show-message)
-  "Hook run after point entered another chunk."
-  :package-version '(magit . "2.13.0")
-  :group 'magit-blame
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(magit-blame-maybe-update-revision-buffer
-             magit-blame-maybe-show-message))
-
-;;; Faces
-
-(defface magit-blame-highlight
-  '((((class color) (background light))
-     :background "grey80"
-     :foreground "black")
-    (((class color) (background dark))
-     :background "grey25"
-     :foreground "white"))
-  "Face used for highlighting when blaming.
-Also see option `magit-blame-styles'."
-  :group 'magit-faces)
-
-(defface magit-blame-margin
-  '((t :inherit magit-blame-highlight
-       :weight normal
-       :slant normal))
-  "Face used for the blame margin by default when blaming.
-Also see option `magit-blame-styles'."
-  :group 'magit-faces)
-
-(defface magit-blame-dimmed
-  '((t :inherit magit-dimmed
-       :weight normal
-       :slant normal))
-  "Face used for the blame margin in some cases when blaming.
-Also see option `magit-blame-styles'."
-  :group 'magit-faces)
-
-(defface magit-blame-heading
-  '((t :inherit magit-blame-highlight
-       :weight normal
-       :slant normal))
-  "Face used for blame headings by default when blaming.
-Also see option `magit-blame-styles'."
-  :group 'magit-faces)
-
-(defface magit-blame-summary nil
-  "Face used for commit summaries when blaming."
-  :group 'magit-faces)
-
-(defface magit-blame-hash nil
-  "Face used for commit hashes when blaming."
-  :group 'magit-faces)
-
-(defface magit-blame-name nil
-  "Face used for author and committer names when blaming."
-  :group 'magit-faces)
-
-(defface magit-blame-date nil
-  "Face used for dates when blaming."
-  :group 'magit-faces)
-
-;;; Chunks
-
-(defclass magit-blame-chunk ()
-  (;; <orig-rev> <orig-line> <final-line> <num-lines>
-   (orig-rev   :initarg :orig-rev)
-   (orig-line  :initarg :orig-line)
-   (final-line :initarg :final-line)
-   (num-lines  :initarg :num-lines)
-   ;; previous <prev-rev> <prev-file>
-   (prev-rev   :initform nil)
-   (prev-file  :initform nil)
-   ;; filename <orig-file>
-   (orig-file)))
-
-(defun magit-current-blame-chunk (&optional type)
-  (or (and (not (and type (not (eq type magit-blame-type))))
-           (magit-blame-chunk-at (point)))
-      (and type
-           (let ((rev  (or magit-buffer-refname magit-buffer-revision))
-                 (file (magit-file-relative-name nil (not magit-buffer-file-name)))
-                 (line (format "%i,+1" (line-number-at-pos))))
-             (unless file
-               (error "Buffer does not visit a tracked file"))
-             (with-temp-buffer
-               (magit-with-toplevel
-                 (magit-git-insert
-                  "blame" "--porcelain"
-                  (if (memq magit-blame-type '(final removal))
-                      (cons "--reverse" (magit-blame-arguments))
-                    (magit-blame-arguments))
-                  "-L" line rev "--" file)
-                 (goto-char (point-min))
-                 (car (magit-blame--parse-chunk type))))))))
-
-(defun magit-blame-chunk-at (pos)
-  (--some (overlay-get it 'magit-blame-chunk)
-          (overlays-at pos)))
-
-(defun magit-blame--overlay-at (&optional pos key)
-  (unless pos
-    (setq pos (point)))
-  (--first (overlay-get it (or key 'magit-blame-chunk))
-           (nconc (overlays-at pos)
-                  (overlays-in pos pos))))
-
-;;; Keymaps
-
-(defvar magit-blame-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c C-q") 'magit-blame-quit)
-    map)
-  "Keymap for `magit-blame-mode'.
-Note that most blaming key bindings are defined
-in `magit-blame-read-only-mode-map' instead.")
-
-(defvar magit-blame-read-only-mode-map
-  (let ((map (make-sparse-keymap)))
-    (cond ((featurep 'jkl)
-           (define-key map [return]    'magit-show-commit)
-           (define-key map (kbd   "i") 'magit-blame-previous-chunk)
-           (define-key map (kbd   "I") 'magit-blame-previous-chunk-same-commit)
-           (define-key map (kbd   "k") 'magit-blame-next-chunk)
-           (define-key map (kbd   "K") 'magit-blame-next-chunk-same-commit)
-           (define-key map (kbd   "j") 'magit-blame)
-           (define-key map (kbd   "l") 'magit-blame-removal)
-           (define-key map (kbd   "f") 'magit-blame-reverse)
-           (define-key map (kbd   "b") 'magit-blame-popup))
-          (t
-           (define-key map (kbd "C-m") 'magit-show-commit)
-           (define-key map (kbd   "p") 'magit-blame-previous-chunk)
-           (define-key map (kbd   "P") 'magit-blame-previous-chunk-same-commit)
-           (define-key map (kbd   "n") 'magit-blame-next-chunk)
-           (define-key map (kbd   "N") 'magit-blame-next-chunk-same-commit)
-           (define-key map (kbd   "b") 'magit-blame)
-           (define-key map (kbd   "r") 'magit-blame-removal)
-           (define-key map (kbd   "f") 'magit-blame-reverse)
-           (define-key map (kbd   "B") 'magit-blame-popup)))
-    (define-key map (kbd   "c") 'magit-blame-cycle-style)
-    (define-key map (kbd   "q") 'magit-blame-quit)
-    (define-key map (kbd "M-w") 'magit-blame-copy-hash)
-    (define-key map (kbd "SPC") 'magit-diff-show-or-scroll-up)
-    (define-key map (kbd "DEL") 'magit-diff-show-or-scroll-down)
-    map)
-  "Keymap for `magit-blame-read-only-mode'.")
-
-;;; Modes
-;;;; Variables
-
-(defvar-local magit-blame-buffer-read-only nil)
-(defvar-local magit-blame-cache nil)
-(defvar-local magit-blame-disabled-modes nil)
-(defvar-local magit-blame-process nil)
-(defvar-local magit-blame-recursive-p nil)
-(defvar-local magit-blame-type nil)
-(defvar-local magit-blame-separator nil)
-(defvar-local magit-blame-previous-chunk nil)
-
-(defvar-local magit-blame--style nil)
-
-(defsubst magit-blame--style-get (key)
-  (cdr (assoc key (cdr magit-blame--style))))
-
-;;;; Base Mode
-
-(define-minor-mode magit-blame-mode
-  "Display blame information inline."
-  :lighter magit-blame-mode-lighter
-  (cond (magit-blame-mode
-         (when (called-interactively-p 'any)
-           (setq magit-blame-mode nil)
-           (user-error
-            (concat "Don't call `magit-blame-mode' directly; "
-                    "instead use `magit-blame' or `magit-blame-popup'")))
-         (add-hook 'after-save-hook     'magit-blame--run t t)
-         (add-hook 'post-command-hook   'magit-blame-goto-chunk-hook t t)
-         (add-hook 'before-revert-hook  'magit-blame--remove-overlays t t)
-         (add-hook 'after-revert-hook   'magit-blame--run t t)
-         (add-hook 'read-only-mode-hook 'magit-blame-toggle-read-only t t)
-         (setq magit-blame-buffer-read-only buffer-read-only)
-         (when (or magit-blame-read-only magit-buffer-file-name)
-           (read-only-mode 1))
-         (dolist (mode magit-blame-disable-modes)
-           (when (and (boundp mode) (symbol-value mode))
-             (funcall mode -1)
-             (push mode magit-blame-disabled-modes)))
-         (setq magit-blame-separator (magit-blame--format-separator))
-         (unless magit-blame--style
-           (setq magit-blame--style (car magit-blame-styles)))
-         (magit-blame--update-margin))
-        (t
-         (when (process-live-p magit-blame-process)
-           (kill-process magit-blame-process)
-           (while magit-blame-process
-             (sit-for 0.01))) ; avoid racing the sentinal
-         (remove-hook 'after-save-hook     'magit-blame--run t)
-         (remove-hook 'post-command-hook   'magit-blame-goto-chunk-hook t)
-         (remove-hook 'before-revert-hook  'magit-blame--remove-overlays t)
-         (remove-hook 'after-revert-hook   'magit-blame--run t)
-         (remove-hook 'read-only-mode-hook 'magit-blame-toggle-read-only t)
-         (unless magit-blame-buffer-read-only
-           (read-only-mode -1))
-         (magit-blame-read-only-mode -1)
-         (dolist (mode magit-blame-disabled-modes)
-           (funcall mode 1))
-         (kill-local-variable 'magit-blame-disabled-modes)
-         (kill-local-variable 'magit-blame-type)
-         (kill-local-variable 'magit-blame--style)
-         (magit-blame--update-margin)
-         (magit-blame--remove-overlays))))
-
-(defun magit-blame-goto-chunk-hook ()
-  (let ((chunk (magit-blame-chunk-at (point))))
-    (when (cl-typep chunk 'magit-blame-chunk)
-      (unless (eq chunk magit-blame-previous-chunk)
-        (run-hooks 'magit-blame-goto-chunk-hook))
-      (setq magit-blame-previous-chunk chunk))))
-
-(defun magit-blame-toggle-read-only ()
-  (magit-blame-read-only-mode (if buffer-read-only 1 -1)))
-
-;;;; Read-Only Mode
-
-(define-minor-mode magit-blame-read-only-mode
-  "Provide keybindings for Magit-Blame mode.
-
-This minor-mode provides the key bindings for Magit-Blame mode,
-but only when Read-Only mode is also enabled because these key
-bindings would otherwise conflict badly with regular bindings.
-
-When both Magit-Blame mode and Read-Only mode are enabled, then
-this mode gets automatically enabled too and when one of these
-modes is toggled, then this mode also gets toggled automatically.
-
-\\{magit-blame-read-only-mode-map}")
-
-;;;; Kludges
-
-(defun magit-blame-put-keymap-before-view-mode ()
-  "Put `magit-blame-read-only-mode' ahead of `view-mode' in `minor-mode-map-alist'."
-  (--when-let (assq 'magit-blame-read-only-mode
-                    (cl-member 'view-mode minor-mode-map-alist :key #'car))
-    (setq minor-mode-map-alist
-          (cons it (delq it minor-mode-map-alist))))
-  (remove-hook 'view-mode-hook #'magit-blame-put-keymap-before-view-mode))
-
-(add-hook 'view-mode-hook #'magit-blame-put-keymap-before-view-mode)
-
-;;; Process
-
-(defun magit-blame--run ()
-  (magit-with-toplevel
-    (unless magit-blame-mode
-      (magit-blame-mode 1))
-    (message "Blaming...")
-    (magit-blame-run-process
-     (or magit-buffer-refname magit-buffer-revision)
-     (magit-file-relative-name nil (not magit-buffer-file-name))
-     (if (memq magit-blame-type '(final removal))
-         (cons "--reverse" (magit-blame-arguments))
-       (magit-blame-arguments))
-     (list (line-number-at-pos (window-start))
-           (line-number-at-pos (1- (window-end nil t)))))
-    (set-process-sentinel magit-this-process
-                          'magit-blame-process-quickstart-sentinel)))
-
-(defun magit-blame-run-process (revision file args &optional lines)
-  (let ((process (magit-parse-git-async
-                  "blame" "--incremental" args
-                  (and lines (list "-L" (apply #'format "%s,%s" lines)))
-                  revision "--" file)))
-    (set-process-filter   process 'magit-blame-process-filter)
-    (set-process-sentinel process 'magit-blame-process-sentinel)
-    (process-put process 'arguments (list revision file args))
-    (setq magit-blame-cache (make-hash-table :test 'equal))
-    (setq magit-blame-process process)))
-
-(defun magit-blame-process-quickstart-sentinel (process event)
-  (when (memq (process-status process) '(exit signal))
-    (magit-blame-process-sentinel process event t)
-    (magit-blame-assert-buffer process)
-    (with-current-buffer (process-get process 'command-buf)
-      (when magit-blame-mode
-        (let ((default-directory (magit-toplevel)))
-          (apply #'magit-blame-run-process
-                 (process-get process 'arguments)))))))
-
-(defun magit-blame-process-sentinel (process _event &optional quiet)
-  (let ((status (process-status process)))
-    (when (memq status '(exit signal))
-      (kill-buffer (process-buffer process))
-      (if (and (eq status 'exit)
-               (zerop (process-exit-status process)))
-          (unless quiet
-            (message "Blaming...done"))
-        (magit-blame-assert-buffer process)
-        (with-current-buffer (process-get process 'command-buf)
-          (if magit-blame-mode
-              (progn (magit-blame-mode -1)
-                     (message "Blaming...failed"))
-            (message "Blaming...aborted"))))
-      (kill-local-variable 'magit-blame-process))))
-
-(defun magit-blame-process-filter (process string)
-  (internal-default-process-filter process string)
-  (let ((buf  (process-get process 'command-buf))
-        (pos  (process-get process 'parsed))
-        (mark (process-mark process))
-        type cache)
-    (with-current-buffer buf
-      (setq type  magit-blame-type)
-      (setq cache magit-blame-cache))
-    (with-current-buffer (process-buffer process)
-      (goto-char pos)
-      (while (and (< (point) mark)
-                  (save-excursion (re-search-forward "^filename .+\n" nil t)))
-        (pcase-let* ((`(,chunk ,revinfo)
-                      (magit-blame--parse-chunk type))
-                     (rev (oref chunk orig-rev)))
-          (if revinfo
-              (puthash rev revinfo cache)
-            (setq revinfo
-                  (or (gethash rev cache)
-                      (puthash rev (magit-blame--commit-alist rev) cache))))
-          (magit-blame--make-overlays buf chunk revinfo))
-        (process-put process 'parsed (point))))))
-
-(defun magit-blame--parse-chunk (type)
-  (let (chunk revinfo)
-    (looking-at "^\\(.\\{40\\}\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\)")
-    (with-slots (orig-rev orig-file prev-rev prev-file)
-        (setq chunk (magit-blame-chunk
-                     :orig-rev                     (match-string 1)
-                     :orig-line  (string-to-number (match-string 2))
-                     :final-line (string-to-number (match-string 3))
-                     :num-lines  (string-to-number (match-string 4))))
-      (forward-line)
-      (let (done)
-        (while (not done)
-          (cond ((looking-at "^filename \\(.+\\)")
-                 (setq done t)
-                 (setf orig-file (match-string 1)))
-                ((looking-at "^previous \\(.\\{40\\}\\) \\(.+\\)")
-                 (setf prev-rev  (match-string 1))
-                 (setf prev-file (match-string 2)))
-                ((looking-at "^\\([^ ]+\\) \\(.+\\)")
-                 (push (cons (match-string 1)
-                             (match-string 2)) revinfo)))
-          (forward-line)))
-      (when (and (eq type 'removal) prev-rev)
-        (cl-rotatef orig-rev  prev-rev)
-        (cl-rotatef orig-file prev-file)
-        (setq revinfo nil)))
-    (list chunk revinfo)))
-
-(defun magit-blame--commit-alist (rev)
-  (cl-mapcar 'cons
-             '("summary"
-               "author" "author-time" "author-tz"
-               "committer" "committer-time" "committer-tz")
-             (split-string (magit-rev-format "%s\v%an\v%ad\v%cn\v%cd" rev
-                                             "--date=format:%s\v%z")
-                           "\v")))
-
-(defun magit-blame-assert-buffer (process)
-  (unless (buffer-live-p (process-get process 'command-buf))
-    (kill-process process)
-    (user-error "Buffer being blamed has been killed")))
-
-;;; Display
-
-(defun magit-blame--make-overlays (buf chunk revinfo)
-  (with-current-buffer buf
-    (save-excursion
-      (save-restriction
-        (widen)
-        (goto-char (point-min))
-        (forward-line (1- (oref chunk final-line)))
-        (let ((beg (point))
-              (end (save-excursion
-                     (forward-line (oref chunk num-lines))
-                     (point))))
-          (magit-blame--remove-overlays beg end)
-          (magit-blame--make-margin-overlays chunk revinfo beg end)
-          (magit-blame--make-heading-overlay chunk revinfo beg end)
-          (magit-blame--make-highlight-overlay   chunk beg))))))
-
-(defun magit-blame--make-margin-overlays (chunk revinfo _beg end)
-  (save-excursion
-    (let ((line 0))
-      (while (< (point) end)
-        (magit-blame--make-margin-overlay chunk revinfo line)
-        (forward-line)
-        (cl-incf line)))))
-
-(defun magit-blame--make-margin-overlay (chunk revinfo line)
-  (let* ((end (line-end-position))
-         ;; If possible avoid putting this on the first character
-         ;; of the line to avoid a conflict with the line overlay.
-         (beg (min (1+ (line-beginning-position)) end))
-         (ov  (make-overlay beg end)))
-    (overlay-put ov 'magit-blame-chunk chunk)
-    (overlay-put ov 'magit-blame-revinfo revinfo)
-    (overlay-put ov 'magit-blame-margin line)
-    (magit-blame--update-margin-overlay ov)))
-
-(defun magit-blame--make-heading-overlay (chunk revinfo beg end)
-  (let ((ov (make-overlay beg end)))
-    (overlay-put ov 'magit-blame-chunk chunk)
-    (overlay-put ov 'magit-blame-revinfo revinfo)
-    (overlay-put ov 'magit-blame-heading t)
-    (magit-blame--update-heading-overlay ov)))
-
-(defun magit-blame--make-highlight-overlay (chunk beg)
-  (let ((ov (make-overlay beg (1+ (line-end-position)))))
-    (overlay-put ov 'magit-blame-chunk chunk)
-    (overlay-put ov 'magit-blame-highlight t)
-    (magit-blame--update-highlight-overlay ov)))
-
-(defun magit-blame--update-margin ()
-  (setq left-margin-width (or (magit-blame--style-get 'margin-width) 0))
-  (set-window-buffer (selected-window) (current-buffer)))
-
-(defun magit-blame--update-overlays ()
-  (save-restriction
-    (widen)
-    (dolist (ov (overlays-in (point-min) (point-max)))
-      (cond ((overlay-get ov 'magit-blame-heading)
-             (magit-blame--update-heading-overlay ov))
-            ((overlay-get ov 'magit-blame-margin)
-             (magit-blame--update-margin-overlay ov))
-            ((overlay-get ov 'magit-blame-highlight)
-             (magit-blame--update-highlight-overlay ov))))))
-
-(defun magit-blame--update-margin-overlay (ov)
-  (overlay-put
-   ov 'before-string
-   (and (magit-blame--style-get 'margin-width)
-        (propertize
-         "o" 'display
-         (list (list 'margin 'left-margin)
-               (let ((line   (overlay-get ov 'magit-blame-margin))
-                     (format (magit-blame--style-get 'margin-format))
-                     (face   (magit-blame--style-get 'margin-face)))
-                 (magit-blame--format-string
-                  ov
-                  (or (and (atom format)
-                           format)
-                      (nth line format)
-                      (car (last format)))
-                  (or (and (not (zerop line))
-                           (magit-blame--style-get 'margin-body-face))
-                      face
-                      'magit-blame-margin))))))))
-
-(defun magit-blame--update-heading-overlay (ov)
-  (overlay-put
-   ov 'before-string
-   (--if-let (magit-blame--style-get 'heading-format)
-       (magit-blame--format-string ov it 'magit-blame-heading)
-     (and (magit-blame--style-get 'show-lines)
-          (or (not (magit-blame--style-get 'margin-format))
-              (save-excursion
-                (goto-char (overlay-start ov))
-                ;; Special case of the special case described in
-                ;; `magit-blame--make-margin-overlay'.  For empty
-                ;; lines it is not possible to show both overlays
-                ;; without the line being to high.
-                (not (= (point) (line-end-position)))))
-          magit-blame-separator))))
-
-(defun magit-blame--update-highlight-overlay (ov)
-  (overlay-put ov 'face (magit-blame--style-get 'highlight-face)))
-
-(defun magit-blame--format-string (ov format face)
-  (let* ((chunk   (overlay-get ov 'magit-blame-chunk))
-         (revinfo (overlay-get ov 'magit-blame-revinfo))
-         (key     (list format face))
-         (string  (cdr (assoc key revinfo))))
-    (unless string
-      (setq string
-            (and format
-                 (magit-blame--format-string-1 (oref chunk orig-rev)
-                                               revinfo format face)))
-      (nconc revinfo (list (cons key string))))
-    string))
-
-(defun magit-blame--format-string-1 (rev revinfo format face)
-  (let ((str
-         (if (equal rev "0000000000000000000000000000000000000000")
-             (propertize (concat (if (string-prefix-p "\s" format) "\s" "")
-                                 "Not Yet Committed"
-                                 (if (string-suffix-p "\n" format) "\n" ""))
-                         'face face)
-           (magit--format-spec
-            (propertize format 'face face)
-            (cl-flet* ((p0 (s f)
-                           (propertize s 'face (if face
-                                                   (if (listp face)
-                                                       face
-                                                     (list f face))
-                                                 f)))
-                       (p1 (k f)
-                           (p0 (cdr (assoc k revinfo)) f))
-                       (p2 (k1 k2 f)
-                           (p0 (magit-blame--format-time-string
-                                (cdr (assoc k1 revinfo))
-                                (cdr (assoc k2 revinfo)))
-                               f)))
-              `((?H . ,(p0 rev         'magit-blame-hash))
-                (?s . ,(p1 "summary"   'magit-blame-summary))
-                (?a . ,(p1 "author"    'magit-blame-name))
-                (?c . ,(p1 "committer" 'magit-blame-name))
-                (?A . ,(p2 "author-time"    "author-tz"    'magit-blame-date))
-                (?C . ,(p2 "committer-time" "committer-tz" 'magit-blame-date))
-                (?f . "")))))))
-    (if-let ((width (and (string-suffix-p "%f" format)
-                         (magit-blame--style-get 'margin-width))))
-        (concat str
-                (propertize (make-string (max 0 (- width (length str))) ?\s)
-                            'face face))
-      str)))
-
-(defun magit-blame--format-separator ()
-  (propertize
-   (concat (propertize "\s" 'display '(space :height (2)))
-           (propertize "\n" 'line-height t))
-   'face (list :background
-               (face-attribute 'magit-blame-heading :background nil t))))
-
-(defun magit-blame--format-time-string (time tz)
-  (let* ((time-format (or (magit-blame--style-get 'time-format)
-                          magit-blame-time-format))
-         (tz-in-second (and (not (version< emacs-version "25"))
-                            (string-match "%z" time-format)
-                            (car (last (parse-time-string tz))))))
-    (format-time-string time-format
-                        (seconds-to-time (string-to-number time))
-                        tz-in-second)))
-
-(defun magit-blame--remove-overlays (&optional beg end)
-  (save-restriction
-    (widen)
-    (dolist (ov (overlays-in (or beg (point-min))
-                             (or end (point-max))))
-      (when (overlay-get ov 'magit-blame-chunk)
-        (delete-overlay ov)))))
-
-(defun magit-blame-maybe-show-message ()
-  (when (magit-blame--style-get 'show-message)
-    (let ((message-log-max 0))
-      (if-let ((msg (cdr (assq 'heading
-                               (gethash (oref (magit-current-blame-chunk)
-                                              orig-rev)
-                                        magit-blame-cache)))))
-          (progn (setq msg (substring msg 0 -1))
-                 (set-text-properties 0 (length msg) nil msg)
-                 (message msg))
-        (message "Commit data not available yet.  Still blaming.")))))
-
-;;; Commands
-
-;;;###autoload
-(defun magit-blame-echo ()
-  "For each line show the revision in which it was added.
-Show the information about the chunk at point in the echo area
-when moving between chunks.  Unlike other blaming commands, do
-not turn on `read-only-mode'."
-  (interactive)
-  (when magit-buffer-file-name
-    (user-error "Blob buffers aren't supported"))
-  (setq-local magit-blame--style
-              (assq magit-blame-echo-style magit-blame-styles))
-  (setq-local magit-blame-disable-modes
-              (cons 'eldoc-mode magit-blame-disable-modes))
-  (if (not magit-blame-mode)
-      (let ((magit-blame-read-only nil))
-        (magit-blame))
-    (read-only-mode -1)
-    (magit-blame--update-overlays)))
-
-;;;###autoload
-(defun magit-blame ()
-  "For each line show the revision in which it was added."
-  (interactive)
-  (magit-blame--pre-blame-assert 'addition)
-  (magit-blame--pre-blame-setup  'addition)
-  (magit-blame--run))
-
-;;;###autoload
-(defun magit-blame-removal ()
-  "For each line show the revision in which it was removed."
-  (interactive)
-  (unless magit-buffer-file-name
-    (user-error "Only blob buffers can be blamed in reverse"))
-  (magit-blame--pre-blame-assert 'removal)
-  (magit-blame--pre-blame-setup  'removal)
-  (magit-blame--run))
-
-;;;###autoload
-(defun magit-blame-reverse ()
-  "For each line show the last revision in which it still exists."
-  (interactive)
-  (unless magit-buffer-file-name
-    (user-error "Only blob buffers can be blamed in reverse"))
-  (magit-blame--pre-blame-assert 'final)
-  (magit-blame--pre-blame-setup  'final)
-  (magit-blame--run))
-
-(defun magit-blame--pre-blame-assert (type)
-  (unless (magit-toplevel)
-    (magit--not-inside-repository-error))
-  (if (and magit-blame-mode
-           (eq type magit-blame-type))
-      (if-let ((chunk (magit-current-blame-chunk)))
-          (unless (oref chunk prev-rev)
-            (user-error "Chunk has no further history"))
-        (user-error "Commit data not available yet.  Still blaming."))
-    (unless (magit-file-relative-name nil (not magit-buffer-file-name))
-      (if buffer-file-name
-          (user-error "Buffer isn't visiting a tracked file")
-        (user-error "Buffer isn't visiting a file")))))
-
-(defun magit-blame--pre-blame-setup (type)
-  (when magit-blame-mode
-    (if (eq type magit-blame-type)
-        (let ((style magit-blame--style))
-          (magit-blame-visit-other-file)
-          (setq-local magit-blame--style style)
-          (setq-local magit-blame-recursive-p t)
-          ;; Set window-start for the benefit of quickstart.
-          (redisplay))
-      (magit-blame--remove-overlays)))
-  (setq magit-blame-type type))
-
-(defun magit-blame-visit-other-file ()
-  "Visit another blob related to the current chunk."
-  (interactive)
-  (with-slots (prev-rev prev-file orig-line)
-      (magit-current-blame-chunk)
-    (unless prev-rev
-      (user-error "Chunk has no further history"))
-    (magit-with-toplevel
-      (magit-find-file prev-rev prev-file))
-    ;; TODO Adjust line like magit-diff-visit-file.
-    (goto-char (point-min))
-    (forward-line (1- orig-line))))
-
-(defun magit-blame-visit-file ()
-  "Visit the blob related to the current chunk."
-  (interactive)
-  (with-slots (orig-rev orig-file orig-line)
-      (magit-current-blame-chunk)
-    (magit-with-toplevel
-      (magit-find-file orig-rev orig-file))
-    (goto-char (point-min))
-    (forward-line (1- orig-line))))
-
-(defun magit-blame-quit ()
-  "Turn off Magit-Blame mode.
-If the buffer was created during a recursive blame,
-then also kill the buffer."
-  (interactive)
-  (magit-blame-mode -1)
-  (when magit-blame-recursive-p
-    (kill-buffer)))
-
-(defun magit-blame-next-chunk ()
-  "Move to the next chunk."
-  (interactive)
-  (--if-let (next-single-char-property-change (point) 'magit-blame-chunk)
-      (goto-char it)
-    (user-error "No more chunks")))
-
-(defun magit-blame-previous-chunk ()
-  "Move to the previous chunk."
-  (interactive)
-  (--if-let (previous-single-char-property-change (point) 'magit-blame-chunk)
-      (goto-char it)
-    (user-error "No more chunks")))
-
-(defun magit-blame-next-chunk-same-commit (&optional previous)
-  "Move to the next chunk from the same commit.\n\n(fn)"
-  (interactive)
-  (if-let ((rev (oref (magit-current-blame-chunk) orig-rev)))
-      (let ((pos (point)) ov)
-        (save-excursion
-          (while (and (not ov)
-                      (not (= pos (if previous (point-min) (point-max))))
-                      (setq pos (funcall
-                                 (if previous
-                                     'previous-single-char-property-change
-                                   'next-single-char-property-change)
-                                 pos 'magit-blame-chunk)))
-            (--when-let (magit-blame--overlay-at pos)
-              (when (equal (oref (magit-blame-chunk-at pos) orig-rev) rev)
-                (setq ov it)))))
-        (if ov
-            (goto-char (overlay-start ov))
-          (user-error "No more chunks from same commit")))
-    (user-error "This chunk hasn't been blamed yet")))
-
-(defun magit-blame-previous-chunk-same-commit ()
-  "Move to the previous chunk from the same commit."
-  (interactive)
-  (magit-blame-next-chunk-same-commit 'previous-single-char-property-change))
-
-(defun magit-blame-cycle-style ()
-  "Change how blame information is visualized.
-Cycle through the elements of option `magit-blame-styles'."
-  (interactive)
-  (setq magit-blame--style
-        (or (cadr (cl-member (car magit-blame--style)
-                             magit-blame-styles :key #'car))
-            (car magit-blame-styles)))
-  (magit-blame--update-margin)
-  (magit-blame--update-overlays))
-
-(defun magit-blame-copy-hash ()
-  "Save hash of the current chunk's commit to the kill ring.
-
-When the region is active, then save the region's content
-instead of the hash, like `kill-ring-save' would."
-  (interactive)
-  (if (use-region-p)
-      (copy-region-as-kill nil nil 'region)
-    (kill-new (message "%s" (oref (magit-current-blame-chunk) orig-rev)))))
-
-;;; Popup
-
-;;;###autoload (autoload 'magit-blame-popup "magit-blame" nil t)
-(magit-define-popup magit-blame-popup
-  "Popup console for blame commands."
-  :man-page "git-blame"
-  :switches '((?w "Ignore whitespace" "-w")
-              (?r "Do not treat root commits as boundaries" "--root"))
-  :options  '((?M "Detect lines moved or copied within a file" "-M")
-              (?C "Detect lines moved or copied between files" "-C"))
-  :actions  '("Actions"
-              (?b "Show commits adding lines" magit-blame)
-              (?r (lambda ()
-                    (with-current-buffer magit-pre-popup-buffer
-                      (and (not buffer-file-name)
-                           (propertize "Show commits removing lines"
-                                       'face 'default))))
-                  magit-blame-removal)
-              (?f (lambda ()
-                    (with-current-buffer magit-pre-popup-buffer
-                      (and (not buffer-file-name)
-                           (propertize "Show last commits that still have lines"
-                                       'face 'default))))
-                  magit-blame-reverse)
-              (lambda ()
-                (and (with-current-buffer magit-pre-popup-buffer
-                       magit-blame-mode)
-                     (propertize "Refresh" 'face 'magit-popup-heading)))
-              (?c "Cycle style" magit-blame-cycle-style))
-  :default-arguments '("-w")
-  :max-action-columns 1
-  :default-action 'magit-blame)
-
-;;; Utilities
-
-(defun magit-blame-maybe-update-revision-buffer ()
-  (unless magit--update-revision-buffer
-    (setq magit--update-revision-buffer nil)
-    (when-let ((chunk  (magit-current-blame-chunk))
-               (commit (oref chunk orig-rev))
-               (buffer (magit-mode-get-buffer 'magit-revision-mode nil t)))
-      (setq magit--update-revision-buffer (list commit buffer))
-      (run-with-idle-timer
-       magit-update-other-window-delay nil
-       (lambda ()
-         (pcase-let ((`(,rev ,buf) magit--update-revision-buffer))
-           (setq magit--update-revision-buffer nil)
-           (when (buffer-live-p buf)
-             (let ((magit-display-buffer-noselect t))
-               (apply #'magit-show-commit rev (magit-diff-arguments))))))))))
-
-(provide 'magit-blame)
-;;; magit-blame.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.elc
deleted file mode 100644
index ccb3ce7342ad..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-blame.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.el
deleted file mode 100644
index a2156a41620b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.el
+++ /dev/null
@@ -1,366 +0,0 @@
-;;; magit-bookmark.el --- bookmark support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Yuri Khan <yuri.v.khan@gmail.com>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Support for bookmarks for most Magit buffers.
-
-;;; Code:
-
-(require 'magit)
-(require 'bookmark)
-
-;;; Supporting primitives
-
-(defun magit-bookmark--jump (bookmark fn &rest args)
-  "Handle a Magit BOOKMARK.
-
-This function will:
-
-1. Bind `default-directory' to the repository root directory
-   stored in the `filename' bookmark property.
-2. Invoke the function FN with ARGS as arguments.  This needs to
-   restore the buffer.
-3. Restore the expanded/collapsed status of top level sections
-   and the point position."
-  (declare (indent 2))
-  (let* ((default-directory (bookmark-get-filename bookmark)))
-    (if default-directory
-        (apply fn args)
-      (signal 'bookmark-error-no-filename (list 'stringp default-directory)))
-    (when (derived-mode-p 'magit-mode)
-      (when-let ((hidden-sections (bookmark-prop-get bookmark
-                                                     'magit-hidden-sections)))
-        (dolist (child (oref magit-root-section children))
-          (if (member (cons (oref child type)
-                            (oref child value))
-                      hidden-sections)
-              (magit-section-hide child)
-            (magit-section-show child)))))
-    (--when-let (bookmark-get-position bookmark)
-      (goto-char it))
-    (--when-let (bookmark-get-front-context-string bookmark)
-      (when (search-forward it (point-max) t)
-        (goto-char (match-beginning 0))))
-    (--when-let (bookmark-get-rear-context-string bookmark)
-      (when (search-backward it (point-min) t)
-        (goto-char (match-end 0))))
-    nil))
-
-(defun magit-bookmark--make-record (mode handler &optional make-props)
-  "Create a Magit bookmark.
-
-MODE specifies the expected major mode of current buffer.
-
-HANDLER should be a function that will be used to restore this
-buffer.
-
-MAKE-PROPS should be either nil or a function that will be called
-with `magit-refresh-args' as the argument list, and may return an
-alist whose every element has the form (PROP . VALUE) and
-specifies additional properties to store in the bookmark."
-  (declare (indent 1))
-  (unless (eq major-mode mode)
-    (user-error "Not in a %s buffer" mode))
-  (let ((bookmark (bookmark-make-record-default 'no-file)))
-    (bookmark-prop-set bookmark 'handler handler)
-    (bookmark-set-filename bookmark (magit-toplevel))
-    (when (derived-mode-p 'magit-mode)
-      (bookmark-prop-set
-       bookmark 'magit-hidden-sections
-       (--map (cons (oref it type)
-                    (oref it value))
-              (--filter (oref it hidden)
-                        (oref magit-root-section children)))))
-    (when make-props
-      (pcase-dolist (`(,prop . ,value) (apply make-props magit-refresh-args))
-        (bookmark-prop-set bookmark prop value)))
-    bookmark))
-
-;;; Status
-
-;;;###autoload
-(defun magit-bookmark--status-jump (bookmark)
-  "Handle a Magit status BOOKMARK."
-  (magit-bookmark--jump bookmark
-      (lambda () (magit-status-internal default-directory))))
-
-;;;###autoload
-(defun magit-bookmark--status-make-record ()
-  "Create a Magit status bookmark."
-  (magit-bookmark--make-record 'magit-status-mode
-    #'magit-bookmark--status-jump))
-
-;;; Refs
-
-;;;###autoload
-(defun magit-bookmark--refs-jump (bookmark)
-  "Handle a Magit refs BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-show-refs
-    (bookmark-prop-get bookmark 'magit-refs)
-    (bookmark-prop-get bookmark 'magit-args)))
-
-;;;###autoload
-(defun magit-bookmark--refs-make-record ()
-  "Create a Magit refs bookmark."
-  (magit-bookmark--make-record 'magit-refs-mode
-    #'magit-bookmark--refs-jump
-    (lambda (refs args)
-      `((magit-refs . ,refs)
-        (magit-args . ,args)))))
-
-;;; Log
-
-;;;###autoload
-(defun magit-bookmark--log-jump (bookmark)
-  "Handle a Magit log BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-log
-    (bookmark-prop-get bookmark 'magit-revs)
-    (bookmark-prop-get bookmark 'magit-args)
-    (bookmark-prop-get bookmark 'magit-files)))
-
-(defun magit-bookmark--log-make-name (buffer-name revs _args files)
-  "Generate the default name for a log bookmark."
-  (concat
-   buffer-name " " (mapconcat #'identity revs " ")
-   (and files
-        (concat " touching " (mapconcat #'identity files " ")))))
-
-;;;###autoload
-(defun magit-bookmark--log-make-record ()
-  "Create a Magit log bookmark."
-  (magit-bookmark--make-record 'magit-log-mode
-    #'magit-bookmark--log-jump
-    (lambda (revs args files)
-      `((defaults    . (,(magit-bookmark--log-make-name
-                          (buffer-name) revs args files)))
-        (magit-revs  . ,revs)
-        (magit-args  . ,args)
-        (magit-files . ,files)))))
-
-;;; Reflog
-
-;;;###autoload
-(defun magit-bookmark--reflog-jump (bookmark)
-  "Handle a Magit reflog BOOKMARK."
-  (magit-bookmark--jump bookmark
-      (lambda ()
-        (let ((magit-reflog-arguments (bookmark-prop-get bookmark 'magit-args)))
-          (magit-reflog (bookmark-prop-get bookmark 'magit-ref))))))
-
-(defun magit-bookmark--reflog-make-name (buffer-name ref)
-  "Generate the default name for a reflog bookmark."
-  (concat buffer-name " " ref))
-
-;;;###autoload
-(defun magit-bookmark--reflog-make-record ()
-  "Create a Magit reflog bookmark."
-  (magit-bookmark--make-record 'magit-reflog-mode
-    #'magit-bookmark--reflog-jump
-    (lambda (ref args)
-      `((defaults   . (,(magit-bookmark--reflog-make-name (buffer-name) ref)))
-        (magit-ref  . ,ref)
-        (magit-args . ,args)))))
-
-;;; Stashes
-
-;;;###autoload
-(defun magit-bookmark--stashes-jump (bookmark)
-  "Handle a Magit stash list BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-stash-list))
-
-;;;###autoload
-(defun magit-bookmark--stashes-make-record ()
-  "Create a Magit stash list bookmark."
-  (magit-bookmark--make-record 'magit-stashes-mode
-    #'magit-bookmark--stashes-jump))
-
-;;; Cherry
-
-;;;###autoload
-(defun magit-bookmark--cherry-jump (bookmark)
-  "Handle a Magit cherry BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-cherry
-    (bookmark-prop-get bookmark 'magit-head)
-    (bookmark-prop-get bookmark 'magit-upstream)))
-
-(defun magit-bookmark--cherry-make-name (buffer-name head upstream)
-  "Generate the default name for a cherry bookmark."
-  (concat buffer-name " " head " upstream " upstream))
-
-;;;###autoload
-(defun magit-bookmark--cherry-make-record ()
-  "Create a Magit cherry bookmark."
-  (magit-bookmark--make-record 'magit-cherry-mode
-    #'magit-bookmark--cherry-jump
-    (lambda (upstream head)
-      `((defaults       . (,(magit-bookmark--cherry-make-name
-                             (buffer-name) head upstream)))
-        (magit-head     . ,head)
-        (magit-upstream . ,upstream)))))
-
-;;; Diff
-
-;;;###autoload
-(defun magit-bookmark--diff-jump (bookmark)
-  "Handle a Magit diff BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-diff-setup
-    (bookmark-prop-get bookmark 'magit-rev-or-range)
-    (bookmark-prop-get bookmark 'magit-const)
-    (bookmark-prop-get bookmark 'magit-args)
-    (bookmark-prop-get bookmark 'magit-files)))
-
-(defun magit-bookmark--resolve (rev-or-range)
-  "Return REV-OR-RANGE with ref names resolved to commit hashes."
-  (pcase (magit-git-lines "rev-parse" rev-or-range)
-    (`(,rev)
-     (magit-rev-abbrev rev))
-    ((and `(,rev1 ,rev2)
-          (guard (/= ?^ (aref rev1 0)))
-          (guard (=  ?^ (aref rev2 0))))
-     (concat (magit-rev-abbrev (substring rev2 1))
-             ".."
-             (magit-rev-abbrev rev1)))
-    ((and `(,rev1 ,rev2 ,rev3)
-          (guard (/= ?^ (aref rev1 0)))
-          (guard (/= ?^ (aref rev2 0)))
-          (guard (=  ?^ (aref rev3 0))))
-     (ignore rev3)
-     (concat (magit-rev-abbrev rev1)
-             "..."
-             (magit-rev-abbrev rev2)))
-    (_
-     rev-or-range)))
-
-(defun magit-bookmark--diff-make-name
-    (buffer-name rev-or-range const _args files)
-  "Generate a default name for a diff bookmark."
-  (if (member "--no-index" const)
-      (apply #'format "*magit-diff %s %s" files)
-    (concat buffer-name " "
-            (cond (rev-or-range)
-                  ((member "--cached" const) "staged")
-                  (t                       "unstaged"))
-            (when files
-              (concat " in " (mapconcat #'identity files ", "))))))
-
-;;;###autoload
-(defun magit-bookmark--diff-make-record ()
-  "Create a Magit diff bookmark."
-  (magit-bookmark--make-record 'magit-diff-mode
-    #'magit-bookmark--diff-jump
-    (lambda (rev-or-range const args files)
-      (let ((resolved (magit-bookmark--resolve rev-or-range)))
-        `((defaults           . (,(magit-bookmark--diff-make-name
-                                   (buffer-name) resolved const args files)))
-          (magit-rev-or-range . ,resolved)
-          (magit-const        . ,const)
-          (magit-args         . ,args)
-          (magit-files        . ,files))))))
-
-;;; Revision
-
-;;;###autoload
-(defun magit-bookmark--revision-jump (bookmark)
-  "Handle a Magit revision BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-show-commit
-    (bookmark-prop-get bookmark 'magit-rev)
-    (bookmark-prop-get bookmark 'args)
-    (bookmark-prop-get bookmark 'files)))
-
-(defun magit-bookmark--revision-make-name (buffer-name rev _args files)
-  "Generate a default name for a revision bookmark."
-  (let ((subject (magit-rev-format "%s" rev)))
-    (concat buffer-name " "
-            (magit-rev-abbrev rev)
-            (cond (files   (concat " " (mapconcat #'identity files " ")))
-                  (subject (concat " " subject))))))
-
-;;;###autoload
-(defun magit-bookmark--revision-make-record ()
-  "Create a Magit revision bookmark."
-  ;; magit-refresh-args stores the revision in relative form.
-  ;; For bookmarks, the exact hash is more appropriate.
-  (magit-bookmark--make-record 'magit-revision-mode
-    #'magit-bookmark--revision-jump
-    (lambda (_rev _ args files)
-      `((defaults    . (,(magit-bookmark--revision-make-name
-                          (buffer-name) magit-buffer-revision-hash
-                          args files)))
-        (magit-rev   . ,magit-buffer-revision-hash)
-        (magit-args  . ,args)
-        (magit-files . ,files)))))
-
-;;; Stash
-
-;;;###autoload
-(defun magit-bookmark--stash-jump (bookmark)
-  "Handle a Magit stash BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-stash-show
-    (bookmark-prop-get bookmark 'magit-stash)
-    (bookmark-prop-get bookmark 'magit-args)
-    (bookmark-prop-get bookmark 'magit-files)))
-
-(defun magit-bookmark--stash-make-name (buffer-name stash _args files)
-  "Generate the default name for a stash bookmark."
-  (concat buffer-name " " stash " "
-          (if files
-              (mapconcat #'identity files " ")
-            (magit-rev-format "%s" stash))))
-
-;;;###autoload
-(defun magit-bookmark--stash-make-record ()
-  "Create a Magit stash bookmark."
-  (magit-bookmark--make-record 'magit-stash-mode
-    #'magit-bookmark--stash-jump
-    (lambda (stash _ args files)
-      `((defaults    . (,(magit-bookmark--stash-make-name
-                          (buffer-name)
-                          (magit-rev-abbrev magit-buffer-revision-hash)
-                          args files)))
-        (magit-stash . ,magit-buffer-revision-hash)
-        (magit-args  . ,args)
-        (magit-files . ,files)
-        (magit-hidden-sections
-         . ,(--map `(,(oref it type)
-                     . ,(replace-regexp-in-string (regexp-quote stash)
-                                                  magit-buffer-revision-hash
-                                                  (oref it value)))
-                   (--filter (oref it hidden)
-                             (oref magit-root-section children))))))))
-
-;;; Submodules
-
-;;;###autoload
-(defun magit-bookmark--submodules-jump (bookmark)
-  "Handle a Magit submodule list BOOKMARK."
-  (magit-bookmark--jump bookmark #'magit-list-submodules))
-
-;;;###autoload
-(defun magit-bookmark--submodules-make-record ()
-  "Create a Magit submodule list bookmark."
-  (magit-bookmark--make-record 'magit-submodule-list-mode
-    #'magit-bookmark--submodules-jump))
-
-(provide 'magit-bookmark)
-;;; magit-bookmark.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.elc
deleted file mode 100644
index 68accf2ab1b2..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-bookmark.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.el
deleted file mode 100644
index b346db8f502e..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.el
+++ /dev/null
@@ -1,1090 +0,0 @@
-;;; magit-branch.el --- branch support  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for branches.  It defines popups
-;; and commands for creating, checking out, manipulating, and
-;; configuring branches.  Commands defined here are mainly concerned
-;; with branches as pointers, commands that deal with what a branch
-;; points at, are defined elsewhere.
-
-;;; Code:
-
-(require 'magit)
-(require 'magit-collab)
-(require 'magit-reset)
-
-;;; Options
-
-(defcustom magit-branch-read-upstream-first t
-  "Whether to read upstream before name of new branch when creating a branch.
-
-`nil'      Read the branch name first.
-`t'        Read the upstream first.
-`fallback' Read the upstream first, but if it turns out that the chosen
-           value is not a valid upstream (because it cannot be resolved
-           as an existing revision), then treat it as the name of the
-           new branch and continue by reading the upstream next."
-  :package-version '(magit . "2.2.0")
-  :group 'magit-commands
-  :type '(choice (const :tag "read branch name first" nil)
-                 (const :tag "read upstream first" t)
-                 (const :tag "read upstream first, with fallback" fallback)))
-
-(defcustom magit-branch-prefer-remote-upstream nil
-  "Whether to favor remote upstreams when creating new branches.
-
-When a new branch is created, then the branch, commit, or stash
-at point is suggested as the default starting point of the new
-branch, or if there is no such revision at point the current
-branch.  In either case the user may choose another starting
-point.
-
-If the chosen starting point is a branch, then it may also be set
-as the upstream of the new branch, depending on the value of the
-Git variable `branch.autoSetupMerge'.  By default this is done
-for remote branches, but not for local branches.
-
-You might prefer to always use some remote branch as upstream.
-If the chosen starting point is (1) a local branch, (2) whose
-name matches a member of the value of this option, (3) the
-upstream of that local branch is a remote branch with the same
-name, and (4) that remote branch can be fast-forwarded to the
-local branch, then the chosen branch is used as starting point,
-but its own upstream is used as the upstream of the new branch.
-
-Members of this option's value are treated as branch names that
-have to match exactly unless they contain a character that makes
-them invalid as a branch name.  Recommended characters to use
-to trigger interpretation as a regexp are \"*\" and \"^\".  Some
-other characters which you might expect to be invalid, actually
-are not, e.g. \".+$\" are all perfectly valid.  More precisely,
-if `git check-ref-format --branch STRING' exits with a non-zero
-status, then treat STRING as a regexp.
-
-Assuming the chosen branch matches these conditions you would end
-up with with e.g.:
-
-  feature --upstream--> origin/master
-
-instead of
-
-  feature --upstream--> master --upstream--> origin/master
-
-Which you prefer is a matter of personal preference.  If you do
-prefer the former, then you should add branches such as \"master\",
-\"next\", and \"maint\" to the value of this options."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-commands
-  :type '(repeat string))
-
-(defcustom magit-branch-adjust-remote-upstream-alist nil
-  "Alist of upstreams to be used when branching from remote branches.
-
-When creating a local branch from an ephemeral branch located
-on a remote, e.g. a feature or hotfix branch, then that remote
-branch should usually not be used as the upstream branch, since
-the push-remote already allows accessing it and having both the
-upstream and the push-remote reference the same related branch
-would be wasteful.  Instead a branch like \"maint\" or \"master\"
-should be used as the upstream.
-
-This option allows specifing the branch that should be used as
-the upstream when branching certain remote branches.  The value
-is an alist of the form ((UPSTREAM . RULE)...).  The first
-matching element is used, the following elements are ignored.
-
-UPSTREAM is the branch to be used as the upstream for branches
-specified by RULE.  It can be a local or a remote branch.
-
-RULE can either be a regular expression, matching branches whose
-upstream should be the one specified by UPSTREAM.  Or it can be
-a list of the only branches that should *not* use UPSTREAM; all
-other branches will.  Matching is done after stripping the remote
-part of the name of the branch that is being branched from.
-
-If you use a finite set of non-ephemeral branches across all your
-repositories, then you might use something like:
-
-  ((\"origin/master\" \"master\" \"next\" \"maint\"))
-
-Or if the names of all your ephemeral branches contain a slash,
-at least in some repositories, then a good value could be:
-
-  ((\"origin/master\" . \"/\"))
-
-Of course you can also fine-tune:
-
-  ((\"origin/maint\" . \"\\\\\\=`hotfix/\")
-   (\"origin/master\" . \"\\\\\\=`feature/\"))
-
-If you use remote branches as UPSTREAM, then you might also want
-to set `magit-branch-prefer-remote-upstream' to a non-nil value.
-However, I recommend that you use local branches as UPSTREAM."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-commands
-  :type '(repeat (cons (string :tag "Use upstream")
-                       (choice :tag "for branches"
-                               (regexp :tag "matching")
-                               (repeat :tag "except"
-                                       (string :tag "branch"))))))
-
-(defcustom magit-branch-rename-push-target t
-  "Whether the push-remote setup is preserved when renaming a branch.
-
-The command `magit-branch-rename' renames a branch named OLD to
-NEW.  This option controls how much of the push-remote setup is
-preserved when doing so.
-
-When nil, then preserve nothing and unset `branch.OLD.pushRemote'.
-
-When `local-only', then first set `branch.NEW.pushRemote' to the
-  same value as `branch.OLD.pushRemote', provided the latter is
-  actually set and unless the former already has another value.
-
-When t, then rename the branch named OLD on the remote specified
-  by `branch.OLD.pushRemote' to NEW, provided OLD exists on that
-  remote and unless NEW already exists on the remote.
-
-When `forge-only' and the `forge' package is available, then
-  behave like `t' if the remote points to a repository on a forge
-  (currently Github or Gitlab), otherwise like `local-only'.
-
-Another supported but obsolete value is `github-only'.  It is a
-  misnomer because it now treated as an alias for `forge-only'."
-  :package-version '(magit . "2.90.0")
-  :group 'magit-commands
-  :type '(choice
-          (const :tag "Don't preserve push-remote setup" nil)
-          (const :tag "Preserve push-remote setup" local-only)
-          (const :tag "... and rename corresponding branch on remote" t)
-          (const :tag "... but only if remote is on a forge" forge-only)))
-
-(defcustom magit-branch-popup-show-variables t
-  "Whether the `magit-branch-popup' shows Git variables.
-This defaults to t to avoid changing key bindings.  When set to
-nil, no variables are displayed directly in this popup, instead
-the sub-popup `magit-branch-config-popup' has to be used to view
-and change branch related variables."
-  :package-version '(magit . "2.7.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-published-branches '("origin/master")
-  "List of branches that are considered to be published."
-  :package-version '(magit . "2.13.0")
-  :group 'magit-commands
-  :type '(repeat string))
-
-;;; Branch Popup
-
-(defvar magit-branch-config-variables)
-
-;;;###autoload (autoload 'magit-branch-popup "magit" nil t)
-(magit-define-popup magit-branch-popup
-  "Popup console for branch commands."
-  :man-page "git-branch"
-  :variables (lambda ()
-               (and magit-branch-popup-show-variables
-                    magit-branch-config-variables))
-  :actions `((?b "Checkout"              magit-checkout) nil
-             (?C "Configure..."          magit-branch-config-popup)
-             (?l "Checkout local branch" magit-branch-checkout)
-             (?s "Create new spin-off"   magit-branch-spinoff)
-             (?m "Rename"                magit-branch-rename)
-             (?c "Checkout new branch"   magit-branch-and-checkout)
-             (?n "Create new branch"     magit-branch)
-             (?x "Reset"                 magit-branch-reset)
-             (?w "Checkout new worktree" magit-worktree-checkout)
-             (?W "Create new worktree"   magit-worktree-branch)
-             (?k "Delete"                magit-branch-delete)
-             ,@(and (not (require (quote forge) nil t))
-                    '((?y "Checkout pull-request"    magit-checkout-pull-request)
-                      (?Y "Create from pull-request" magit-branch-pull-request))))
-  :default-action 'magit-checkout
-  :max-action-columns 3
-  :setup-function 'magit-branch-popup-setup)
-
-(defun magit-branch-popup-setup (val def)
-  (magit-popup-default-setup val def)
-  (use-local-map (copy-keymap magit-popup-mode-map))
-  (dolist (ev (-filter #'magit-popup-event-p (magit-popup-get :variables)))
-    (local-set-key (vector (magit-popup-event-key ev))
-                   'magit-invoke-popup-action)))
-
-;;; Branch Commands
-
-;;;###autoload
-(defun magit-checkout (revision)
-  "Checkout REVISION, updating the index and the working tree.
-If REVISION is a local branch, then that becomes the current
-branch.  If it is something else, then `HEAD' becomes detached.
-Checkout fails if the working tree or the staging area contain
-changes.
-\n(git checkout REVISION)."
-  (interactive (list (magit-read-other-branch-or-commit "Checkout")))
-  (when (string-match "\\`heads/\\(.+\\)" revision)
-    (setq revision (match-string 1 revision)))
-  (magit-run-git "checkout" revision))
-
-;;;###autoload
-(defun magit-branch (branch start-point &optional args)
-  "Create BRANCH at branch or revision START-POINT.
-\n(git branch [ARGS] BRANCH START-POINT)."
-  (interactive (magit-branch-read-args "Create branch"))
-  (magit-call-git "branch" args branch start-point)
-  (magit-branch-maybe-adjust-upstream branch start-point)
-  (magit-refresh))
-
-;;;###autoload
-(defun magit-branch-and-checkout (branch start-point &optional args)
-  "Create and checkout BRANCH at branch or revision START-POINT.
-\n(git checkout [ARGS] -b BRANCH START-POINT)."
-  (interactive (magit-branch-read-args "Create and checkout branch"))
-  (if (string-match-p "^stash@{[0-9]+}$" start-point)
-      (magit-run-git "stash" "branch" branch start-point)
-    (magit-call-git "checkout" args "-b" branch start-point)
-    (magit-branch-maybe-adjust-upstream branch start-point)
-    (magit-refresh)))
-
-;;;###autoload
-(defun magit-branch-or-checkout (arg &optional start-point)
-  "Hybrid between `magit-checkout' and `magit-branch-and-checkout'.
-
-Ask the user for an existing branch or revision.  If the user
-input actually can be resolved as a branch or revision, then
-check that out, just like `magit-checkout' would.
-
-Otherwise create and checkout a new branch using the input as
-its name.  Before doing so read the starting-point for the new
-branch.  This is similar to what `magit-branch-and-checkout'
-does."
-  (interactive
-   (let ((arg (magit-read-other-branch-or-commit "Checkout")))
-     (list arg
-           (and (not (magit-rev-verify-commit arg))
-                (magit-read-starting-point "Create and checkout branch" arg)))))
-  (when (string-match "\\`heads/\\(.+\\)" arg)
-    (setq arg (match-string 1 arg)))
-  (if start-point
-      (magit-branch-and-checkout arg start-point (magit-branch-arguments))
-    (magit-checkout arg)))
-
-;;;###autoload
-(defun magit-branch-checkout (branch &optional start-point)
-  "Checkout an existing or new local branch.
-
-Read a branch name from the user offering all local branches and
-a subset of remote branches as candidates.  Omit remote branches
-for which a local branch by the same name exists from the list
-of candidates.  The user can also enter a completely new branch
-name.
-
-- If the user selects an existing local branch, then check that
-  out.
-
-- If the user selects a remote branch, then create and checkout
-  a new local branch with the same name.  Configure the selected
-  remote branch as push target.
-
-- If the user enters a new branch name, then create and check
-  that out, after also reading the starting-point from the user.
-
-In the latter two cases the upstream is also set.  Whether it is
-set to the chosen START-POINT or something else depends on the
-value of `magit-branch-adjust-remote-upstream-alist', just like
-when using `magit-branch-and-checkout'."
-  (interactive
-   (let* ((current (magit-get-current-branch))
-          (local   (magit-list-local-branch-names))
-          (remote  (--filter (and (string-match "[^/]+/" it)
-                                  (not (member (substring it (match-end 0))
-                                               (cons "HEAD" local))))
-                             (magit-list-remote-branch-names)))
-          (choices (nconc (delete current local) remote))
-          (atpoint (magit-branch-at-point))
-          (choice  (magit-completing-read
-                    "Checkout branch" choices
-                    nil nil nil 'magit-revision-history
-                    (or (car (member atpoint choices))
-                        (and atpoint
-                             (car (member (and (string-match "[^/]+/" atpoint)
-                                               (substring atpoint (match-end 0)))
-                                          choices)))))))
-     (cond ((member choice remote)
-            (list (and (string-match "[^/]+/" choice)
-                       (substring choice (match-end 0)))
-                  choice))
-           ((member choice local)
-            (list choice))
-           (t
-            (list choice (magit-read-starting-point "Create" choice))))))
-  (if (not start-point)
-      (magit-checkout branch)
-    (when (magit-anything-modified-p)
-      (user-error "Cannot checkout when there are uncommitted changes"))
-    (magit-branch-and-checkout branch start-point (magit-branch-arguments))
-    (when (magit-remote-branch-p start-point)
-      (pcase-let ((`(,remote . ,remote-branch)
-                   (magit-split-branch-name start-point)))
-        (when (and (equal branch remote-branch)
-                   (not (equal remote (magit-get "remote.pushDefault"))))
-          (magit-set remote "branch" branch "pushRemote"))))))
-
-(defun magit-branch-maybe-adjust-upstream (branch start-point)
-  (--when-let
-      (or (and (magit-get-upstream-branch branch)
-               (magit-get-indirect-upstream-branch start-point))
-          (and (magit-remote-branch-p start-point)
-               (let ((name (cdr (magit-split-branch-name start-point))))
-                 (car (--first (if (listp (cdr it))
-                                   (not (member name (cdr it)))
-                                 (string-match-p (cdr it) name))
-                               magit-branch-adjust-remote-upstream-alist)))))
-    (magit-call-git "branch" (concat "--set-upstream-to=" it) branch)))
-
-;;;###autoload
-(defun magit-branch-orphan (branch start-point &optional args)
-  "Create and checkout an orphan BRANCH with contents from revision START-POINT.
-\n(git checkout --orphan [ARGS] BRANCH START-POINT)."
-  (interactive (magit-branch-read-args "Create and checkout orphan branch"))
-  (magit-run-git "checkout" "--orphan" args branch start-point))
-
-;;;###autoload
-(defun magit-branch-pull-request (pr)
-  "Create and configure a new branch from a pull-request.
-Please see the manual for more information."
-  (interactive (list (magit-read-pull-request "Branch pull request")))
-  (let-alist pr
-    (let* ((upstream (or (--first (magit--github-url-equal
-                                   (magit-get "remote" it "url")
-                                   .base.repo.ssh_url)
-                                  (magit-list-remotes))
-                         (user-error
-                          "Upstream repository %s not available as a remote"
-                          .base.repo.ssh_url)))
-           (upstream-url (magit-get "remote" upstream "url"))
-           (remote .head.repo.owner.login)
-           (branch (magit--pullreq-branch pr t))
-           (pr-branch .head.ref))
-      (if (magit--pullreq-from-upstream-p pr)
-          (let ((tracking (concat upstream "/" pr-branch)))
-            (unless (magit-branch-p tracking)
-              (magit-call-git "fetch" upstream))
-            (let ((inhibit-magit-refresh t))
-              (magit-branch branch tracking))
-            (magit-set upstream "branch" branch "pushRemote")
-            (magit-set upstream "branch" branch "pullRequestRemote"))
-        (if (magit-remote-p remote)
-            (let ((url   (magit-get     "remote" remote "url"))
-                  (fetch (magit-get-all "remote" remote "fetch")))
-              (unless (magit--github-url-equal url .head.repo.ssh_url)
-                (user-error
-                 "Remote `%s' already exists but does not point to %s"
-                 remote url))
-              (unless (member (format "+refs/heads/*:refs/remotes/%s/*" remote)
-                              fetch)
-                (magit-call-git "remote" "set-branches"
-                                "--add" remote pr-branch)
-                (magit-call-git "fetch" remote)))
-          (magit-call-git
-           "remote" "add" "-f" "--no-tags"
-           "-t" pr-branch remote
-           (cond ((or (string-prefix-p "git@" upstream-url)
-                      (string-prefix-p "ssh://git@" upstream-url))
-                  .head.repo.ssh_url)
-                 ((string-prefix-p "https://" upstream-url)
-                  .head.repo.clone_url)
-                 ((string-prefix-p "git://" upstream-url)
-                  .head.repo.git_url)
-                 (t (error "%s has an unexpected format" upstream-url)))))
-        (magit-call-git "branch" branch (concat remote "/" pr-branch))
-        (if (or .locked (not (equal branch pr-branch)))
-            (magit-set upstream "branch" branch "pushRemote")
-          (magit-set remote "branch" branch "pushRemote"))
-        (magit-set remote "branch" branch "pullRequestRemote"))
-      (magit-set "true" "branch" branch "rebase")
-      (magit-call-git "branch" branch
-                      (concat "--set-upstream-to="
-                              (if magit-branch-prefer-remote-upstream
-                                  (concat upstream "/" .base.ref)
-                                .base.ref)))
-      (magit-set (number-to-string .number) "branch" branch "pullRequest")
-      (magit-set .title                     "branch" branch "description")
-      (magit-refresh)
-      branch)))
-
-(defun magit-checkout-pull-request (pr)
-  "Create, configure and checkout a new branch from a pull-request.
-Please see the manual for more information."
-  (interactive (list (magit-read-pull-request "Checkout pull request")))
-  (magit-checkout
-   (let ((inhibit-magit-refresh t))
-     (magit-branch-pull-request pr))))
-
-(defun magit-branch-read-args (prompt)
-  (let ((args (magit-branch-arguments)))
-    (if magit-branch-read-upstream-first
-        (let ((choice (magit-read-starting-point prompt)))
-          (if (magit-rev-verify choice)
-              (list (magit-read-string-ns
-                     (if magit-completing-read--silent-default
-                         (format "%s (starting at `%s')" prompt choice)
-                       "Name for new branch")
-                     (let ((def (mapconcat #'identity
-                                           (cdr (split-string choice "/"))
-                                           "/")))
-                       (and (member choice (magit-list-remote-branch-names))
-                            (not (member def (magit-list-local-branch-names)))
-                            def)))
-                    choice args)
-            (if (eq magit-branch-read-upstream-first 'fallback)
-                (list choice (magit-read-starting-point prompt choice) args)
-              (user-error "Not a valid starting-point: %s" choice))))
-      (let ((branch (magit-read-string-ns (concat prompt " named"))))
-        (list branch
-              (magit-read-starting-point prompt branch)
-              args)))))
-
-;;;###autoload
-(defun magit-branch-spinoff (branch &optional from &rest args)
-  "Create new branch from the unpushed commits.
-
-Create and checkout a new branch starting at and tracking the
-current branch.  That branch in turn is reset to the last commit
-it shares with its upstream.  If the current branch has no
-upstream or no unpushed commits, then the new branch is created
-anyway and the previously current branch is not touched.
-
-This is useful to create a feature branch after work has already
-began on the old branch (likely but not necessarily \"master\").
-
-If the current branch is a member of the value of option
-`magit-branch-prefer-remote-upstream' (which see), then the
-current branch will be used as the starting point as usual, but
-the upstream of the starting-point may be used as the upstream
-of the new branch, instead of the starting-point itself.
-
-If optional FROM is non-nil, then the source branch is reset
-to `FROM~', instead of to the last commit it shares with its
-upstream.  Interactively, FROM is only ever non-nil, if the
-region selects some commits, and among those commits, FROM is
-the commit that is the fewest commits ahead of the source
-branch.
-
-The commit at the other end of the selection actually does not
-matter, all commits between FROM and `HEAD' are moved to the new
-branch.  If FROM is not reachable from `HEAD' or is reachable
-from the source branch's upstream, then an error is raised."
-  (interactive (list (magit-read-string-ns "Spin off branch")
-                     (car (last (magit-region-values 'commit)))
-                     (magit-branch-arguments)))
-  (when (magit-branch-p branch)
-    (user-error "Cannot spin off %s.  It already exists" branch))
-  (if-let ((current (magit-get-current-branch)))
-      (let ((tracked (magit-get-upstream-branch current))
-            base)
-        (when from
-          (unless (magit-rev-ancestor-p from current)
-            (user-error "Cannot spin off %s.  %s is not reachable from %s"
-                        branch from current))
-          (when (and tracked
-                     (magit-rev-ancestor-p from tracked))
-            (user-error "Cannot spin off %s.  %s is ancestor of upstream %s"
-                        branch from tracked)))
-        (let ((magit-process-raise-error t))
-          (magit-call-git "checkout" args "-b" branch current))
-        (--when-let (magit-get-indirect-upstream-branch current)
-          (magit-call-git "branch" "--set-upstream-to" it branch))
-        (when (and tracked
-                   (setq base
-                         (if from
-                             (concat from "^")
-                           (magit-git-string "merge-base" current tracked)))
-                   (not (magit-rev-eq base current)))
-          (magit-call-git "update-ref" "-m"
-                          (format "reset: moving to %s" base)
-                          (concat "refs/heads/" current) base))
-        (magit-refresh))
-    (magit-run-git "checkout" "-b" branch)))
-
-;;;###autoload
-(defun magit-branch-reset (branch to &optional args set-upstream)
-  "Reset a branch to the tip of another branch or any other commit.
-
-When the branch being reset is the current branch, then do a
-hard reset.  If there are any uncommitted changes, then the user
-has to confirm the reset because those changes would be lost.
-
-This is useful when you have started work on a feature branch but
-realize it's all crap and want to start over.
-
-When resetting to another branch and a prefix argument is used,
-then also set the target branch as the upstream of the branch
-that is being reset."
-  (interactive
-   (let* ((atpoint (magit-local-branch-at-point))
-          (branch  (magit-read-local-branch "Reset branch" atpoint)))
-     (list branch
-           (magit-completing-read (format "Reset %s to" branch)
-                                  (delete branch (magit-list-branch-names))
-                                  nil nil nil 'magit-revision-history
-                                  (or (and (not (equal branch atpoint)) atpoint)
-                                      (magit-get-upstream-branch branch)))
-           (magit-branch-arguments)
-           current-prefix-arg)))
-  (unless (member "--force" args)
-    (setq args (cons "--force" args)))
-  (if (equal branch (magit-get-current-branch))
-      (if (and (magit-anything-modified-p)
-               (not (yes-or-no-p "Uncommitted changes will be lost.  Proceed? ")))
-          (user-error "Abort")
-        (magit-reset-hard to)
-        (when (and set-upstream (magit-branch-p to))
-          (magit-set-branch*merge/remote branch to)))
-    (magit-branch branch to args)))
-
-;;;###autoload
-(defun magit-branch-delete (branches &optional force)
-  "Delete one or multiple branches.
-If the region marks multiple branches, then offer to delete
-those, otherwise prompt for a single branch to be deleted,
-defaulting to the branch at point."
-  ;; One would expect this to be a command as simple as, for example,
-  ;; `magit-branch-rename'; but it turns out everyone wants to squeeze
-  ;; a bit of extra functionality into this one, including myself.
-  (interactive
-   (let ((branches (magit-region-values 'branch t))
-         (force current-prefix-arg))
-     (if (> (length branches) 1)
-         (magit-confirm t nil "Delete %i branches" nil branches)
-       (setq branches
-             (list (magit-read-branch-prefer-other
-                    (if force "Force delete branch" "Delete branch")))))
-     (unless force
-       (when-let ((unmerged (-remove #'magit-branch-merged-p branches)))
-         (if (magit-confirm 'delete-unmerged-branch
-               "Delete unmerged branch %s"
-               "Delete %i unmerged branches"
-               'noabort unmerged)
-             (setq force branches)
-           (or (setq branches (-difference branches unmerged))
-               (user-error "Abort")))))
-     (list branches force)))
-  (let* ((refs (mapcar #'magit-ref-fullname branches))
-         (ambiguous (--remove it refs)))
-    (when ambiguous
-      (user-error
-       "%s ambiguous.  Please cleanup using git directly."
-       (let ((len (length ambiguous)))
-         (cond
-          ((= len 1)
-           (format "%s is" (-first #'magit-ref-ambiguous-p branches)))
-          ((= len (length refs))
-           (format "These %s names are" len))
-          (t
-           (format "%s of these names are" len))))))
-    (cond
-     ((string-match "^refs/remotes/\\([^/]+\\)" (car refs))
-      (let* ((remote (match-string 1 (car refs)))
-             (offset (1+ (length remote))))
-        ;; Assume the branches actually still exists on the remote.
-        (magit-run-git-async
-         "push" remote (--map (concat ":" (substring it offset)) branches))
-        ;; If that is not the case, then this deletes the tracking branches.
-        (set-process-sentinel
-         magit-this-process
-         (apply-partially 'magit-delete-remote-branch-sentinel refs))))
-     ((> (length branches) 1)
-      (setq branches (delete (magit-get-current-branch) branches))
-      (mapc 'magit-branch-maybe-delete-pr-remote branches)
-      (mapc 'magit-branch-unset-pushRemote branches)
-      (magit-run-git "branch" (if force "-D" "-d") branches))
-     (t ; And now for something completely different.
-      (let* ((branch (car branches))
-             (prompt (format "Branch %s is checked out.  " branch)))
-        (when (equal branch (magit-get-current-branch))
-          (pcase (if (or (equal branch "master")
-                         (not (magit-rev-verify "master")))
-                     (magit-read-char-case prompt nil
-                       (?d "[d]etach HEAD & delete" 'detach)
-                       (?a "[a]bort"                'abort))
-                   (magit-read-char-case prompt nil
-                     (?d "[d]etach HEAD & delete"     'detach)
-                     (?c "[c]heckout master & delete" 'master)
-                     (?a "[a]bort"                    'abort)))
-            (`detach (unless (or (equal force '(4))
-                                 (member branch force)
-                                 (magit-branch-merged-p branch t))
-                       (magit-confirm 'delete-unmerged-branch
-                         "Delete unmerged branch %s" ""
-                         nil (list branch)))
-                     (magit-call-git "checkout" "--detach"))
-            (`master (unless (or (equal force '(4))
-                                 (member branch force)
-                                 (magit-branch-merged-p branch "master"))
-                       (magit-confirm 'delete-unmerged-branch
-                         "Delete unmerged branch %s" ""
-                         nil (list branch)))
-                     (magit-call-git "checkout" "master"))
-            (`abort  (user-error "Abort")))
-          (setq force t))
-        (magit-branch-maybe-delete-pr-remote branch)
-        (magit-branch-unset-pushRemote branch)
-        (magit-run-git "branch" (if force "-D" "-d") branch))))))
-
-(put 'magit-branch-delete 'interactive-only t)
-
-(defun magit-branch-maybe-delete-pr-remote (branch)
-  (when-let ((remote (magit-get "branch" branch "pullRequestRemote")))
-    (let* ((variable (format "remote.%s.fetch" remote))
-           (refspecs (magit-get-all variable)))
-      (unless (member (format "+refs/heads/*:refs/remotes/%s/*" remote)
-                      refspecs)
-        (let ((refspec
-               (if (equal (magit-get "branch" branch "pushRemote") remote)
-                   (format "+refs/heads/%s:refs/remotes/%s/%s"
-                           branch remote branch)
-                 (let ((merge (magit-get "branch" branch "merge")))
-                   (and merge
-                        (string-prefix-p "refs/heads/" merge)
-                        (setq merge (substring merge 11))
-                        (format "+refs/heads/%s:refs/remotes/%s/%s"
-                                merge remote merge))))))
-          (when (member refspec refspecs)
-            (if (and (= (length refspecs) 1)
-                     (magit-confirm 'delete-pr-remote
-                       (format "Also delete remote %s (%s)" remote
-                               "no pull-request branch remains")))
-                (magit-call-git "remote" "rm" remote)
-              (magit-call-git "config" "--unset" variable
-                              (regexp-quote refspec)))))))))
-
-(defun magit-branch-unset-pushRemote (branch)
-  (magit-set nil "branch" branch "pushRemote"))
-
-(defun magit-delete-remote-branch-sentinel (refs process event)
-  (when (memq (process-status process) '(exit signal))
-    (if (= (process-exit-status process) 0)
-        (magit-process-sentinel process event)
-      (if-let ((rest (-filter #'magit-ref-exists-p refs)))
-          (progn
-            (process-put process 'inhibit-refresh t)
-            (magit-process-sentinel process event)
-            (setq magit-this-error nil)
-            (message "Some remote branches no longer exist.  %s"
-                     "Deleting just the local tracking refs instead...")
-            (dolist (ref rest)
-              (magit-call-git "update-ref" "-d" ref))
-            (magit-refresh)
-            (message "Deleting local remote-tracking refs...done"))
-        (magit-process-sentinel process event)))))
-
-;;;###autoload
-(defun magit-branch-rename (old new &optional force)
-  "Rename the branch named OLD to NEW.
-
-With a prefix argument FORCE, rename even if a branch named NEW
-already exists.
-
-If `branch.OLD.pushRemote' is set, then unset it.  Depending on
-the value of `magit-branch-rename-push-target' (which see) maybe
-set `branch.NEW.pushRemote' and maybe rename the push-target on
-the remote."
-  (interactive
-   (let ((branch (magit-read-local-branch "Rename branch")))
-     (list branch
-           (magit-read-string-ns (format "Rename branch '%s' to" branch)
-                                 nil 'magit-revision-history)
-           current-prefix-arg)))
-  (when (string-match "\\`heads/\\(.+\\)" old)
-    (setq old (match-string 1 old)))
-  (when (equal old new)
-    (user-error "Old and new branch names are the same"))
-  (magit-call-git "branch" (if force "-M" "-m") old new)
-  (when magit-branch-rename-push-target
-    (let ((remote (magit-get-push-remote old))
-          (old-specific (magit-get "branch" old "pushRemote"))
-          (new-specific (magit-get "branch" new "pushRemote")))
-      (when (and old-specific (or force (not new-specific)))
-        ;; Keep the target setting branch specific, even if that is
-        ;; redundant.  But if a branch by the same name existed before
-        ;; and the rename isn't forced, then do not change a leftover
-        ;; setting.  Such a leftover setting may or may not conform to
-        ;; what we expect here...
-        (magit-set old-specific "branch" new "pushRemote"))
-      (when (and (equal (magit-get-push-remote new) remote)
-                 ;; ...and if it does not, then we must abort.
-                 (not (eq magit-branch-rename-push-target 'local-only))
-                 (or (not (memq magit-branch-rename-push-target
-                                '(forge-only github-only)))
-                     (and (require (quote forge) nil t)
-                          (fboundp 'forge--forge-remote-p)
-                          (forge--forge-remote-p remote))))
-        (let ((old-target (magit-get-push-branch old t))
-              (new-target (magit-get-push-branch new t)))
-          (when (and old-target (not new-target))
-            ;; Rename on (i.e. within) the remote, but only if the
-            ;; destination ref doesn't exist yet.  If that ref already
-            ;; exists, then it probably is of some value and we better
-            ;; not touch it.  Ignore what the local ref points at,
-            ;; i.e. if the local and the remote ref didn't point at
-            ;; the same commit before the rename then keep it that way.
-            (magit-call-git "push" "-v"
-                            (magit-get-push-remote new)
-                            (format "%s:refs/heads/%s" old-target new)
-                            (format ":refs/heads/%s" old)))))))
-  (magit-branch-unset-pushRemote old)
-  (magit-refresh))
-
-;;;###autoload
-(defun magit-branch-shelve (branch)
-  "Shelve a BRANCH.
-Rename \"refs/heads/BRANCH\" to \"refs/shelved/BRANCH\",
-and also rename the respective reflog file."
-  (interactive (list (magit-read-other-local-branch "Shelve branch")))
-  (let ((old (concat "refs/heads/"   branch))
-        (new (concat "refs/shelved/" branch)))
-    (magit-git "update-ref" new old "")
-    (magit--rename-reflog-file old new)
-    (magit-branch-unset-pushRemote branch)
-    (magit-run-git "branch" "-D" branch)))
-
-;;;###autoload
-(defun magit-branch-unshelve (branch)
-  "Unshelve a BRANCH
-Rename \"refs/shelved/BRANCH\" to \"refs/heads/BRANCH\",
-and also rename the respective reflog file."
-  (interactive
-   (list (magit-completing-read
-          "Unshelve branch"
-          (--map (substring it 8)
-                 (magit-list-refnames "refs/shelved"))
-          nil t)))
-  (let ((old (concat "refs/shelved/" branch))
-        (new (concat "refs/heads/"   branch)))
-    (magit-git "update-ref" new old "")
-    (magit--rename-reflog-file old new)
-    (magit-run-git "update-ref" "-d" old)))
-
-(defun magit--rename-reflog-file (old new)
-  (let ((old (magit-git-dir (concat "logs/" old)))
-        (new (magit-git-dir (concat "logs/" new))))
-    (when (file-exists-p old)
-      (make-directory (file-name-directory new) t)
-      (rename-file old new t))))
-
-;;; Config Popup
-
-(defvar magit-branch-config-branch nil)
-
-;;;###autoload
-(defun magit-branch-config-popup (branch)
-  "Popup console for setting branch variables."
-  (interactive
-   (list (if (or current-prefix-arg
-                 (and (eq magit-current-popup 'magit-branch-popup)
-                      magit-branch-popup-show-variables))
-             (magit-read-local-branch "Configure branch")
-           (magit-get-current-branch))))
-  (let ((magit-branch-config-branch branch))
-    (magit-invoke-popup 'magit-branch-config-popup nil nil)))
-
-(defvar magit-branch-config-variables
-  '((lambda ()
-      (concat
-       (propertize "Configure " 'face 'magit-popup-heading)
-       (propertize (magit-branch-config-branch) 'face 'magit-branch-local)))
-    (?d "branch.%s.description"
-        magit-edit-branch*description
-        magit-format-branch*description)
-    (?u "branch.%s.merge"
-        magit-set-branch*merge/remote
-        magit-format-branch*merge/remote)
-    (?r "branch.%s.rebase"
-        magit-cycle-branch*rebase
-        magit-format-branch*rebase)
-    (?p "branch.%s.pushRemote"
-        magit-cycle-branch*pushRemote
-        magit-format-branch*pushRemote)
-    "Configure repository defaults"
-    (?\M-r "pull.rebase"
-           magit-cycle-pull.rebase
-           magit-format-pull.rebase)
-    (?\M-p "remote.pushDefault"
-           magit-cycle-remote.pushDefault
-           magit-format-remote.pushDefault)
-    "Configure branch creation"
-    (?U "branch.autoSetupMerge"
-        magit-cycle-branch*autoSetupMerge
-        magit-format-branch*autoSetupMerge)
-    (?R "branch.autoSetupRebase"
-        magit-cycle-branch*autoSetupRebase
-        magit-format-branch*autoSetupRebase)))
-
-(defvar magit-branch-config-popup
-  `(:man-page "git-branch"
-    :variables ,magit-branch-config-variables
-    :setup-function magit-branch-config-popup-setup))
-
-(defun magit-branch-config-popup-setup (val def)
-  (magit-popup-default-setup val def)
-  (setq-local magit-branch-config-branch magit-branch-config-branch)
-  (use-local-map (copy-keymap magit-popup-mode-map))
-  (dolist (ev (-filter #'magit-popup-event-p (magit-popup-get :variables)))
-    (local-set-key (vector (magit-popup-event-key ev))
-                   'magit-invoke-popup-action)))
-
-(defun magit-branch-config-branch (&optional prompt)
-  (if prompt
-      (or (and (not current-prefix-arg)
-               (or magit-branch-config-branch
-                   (magit-get-current-branch)))
-          (magit-read-local-branch prompt))
-    (or magit-branch-config-branch
-        (magit-get-current-branch)
-        "<name>")))
-
-;;; Config Commands and Inserters
-
-;;;###autoload
-(defun magit-edit-branch*description (branch)
-  "Edit the description of the current branch.
-With a prefix argument edit the description of another branch.
-
-The description for the branch named NAME is stored in the Git
-variable `branch.<name>.description'."
-  (interactive (list (magit-branch-config-branch "Edit branch description")))
-  (magit-run-git-with-editor "branch" "--edit-description" branch))
-
-(defun magit-edit-branch*description-check-buffers ()
-  (and buffer-file-name
-       (string-match-p "/\\(BRANCH\\|EDIT\\)_DESCRIPTION\\'" buffer-file-name)
-       (add-hook 'with-editor-post-finish-hook
-                 (lambda ()
-                   (when (derived-mode-p 'magit-popup-mode)
-                     (magit-refresh-popup-buffer)))
-                 nil t)))
-
-(add-hook 'find-file-hook 'magit-edit-branch*description-check-buffers)
-
-(defun magit-format-branch*description ()
-  (let* ((branch (magit-branch-config-branch))
-         (width (+ (length branch) 19))
-         (var (format "branch.%s.description" branch)))
-    (concat var " " (make-string (- width (length var)) ?\s)
-            (if-let ((value (magit-get var)))
-                (propertize (car (split-string value "\n"))
-                            'face 'magit-popup-option-value)
-              (propertize "unset" 'face 'magit-popup-disabled-argument)))))
-
-;;;###autoload
-(defun magit-set-branch*merge/remote (branch upstream)
-  "Set or unset the upstream of the current branch.
-With a prefix argument do so for another branch.
-
-When the branch in question already has an upstream then simply
-unsets it.  Invoke this command again to set another upstream.
-
-Together the Git variables `branch.<name>.remote' and
-`branch.<name>.merge' define the upstream branch of the local
-branch named NAME.  The value of `branch.<name>.remote' is the
-name of the upstream remote.  The value of `branch.<name>.merge'
-is the full reference of the upstream branch, on the remote.
-
-Non-interactively, when UPSTREAM is non-nil, then always set it
-as the new upstream, regardless of whether another upstream was
-already set.  When nil, then always unset."
-  (interactive
-   (let ((branch (magit-branch-config-branch "Change upstream of branch")))
-     (list branch (and (not (magit-get-upstream-branch branch))
-                       (magit-read-upstream-branch branch)))))
-  (if upstream
-      (pcase-let ((`(,remote . ,merge) (magit-split-branch-name upstream)))
-        (setf (magit-get (format "branch.%s.remote" branch)) remote)
-        (setf (magit-get (format "branch.%s.merge"  branch))
-              (concat "refs/heads/" merge)))
-    (magit-call-git "branch" "--unset-upstream" branch))
-  (when (called-interactively-p 'any)
-    (magit-refresh)))
-
-(defun magit-format-branch*merge/remote ()
-  (let* ((branch (magit-branch-config-branch))
-         (width (+ (length branch) 20))
-         (varM (format "branch.%s.merge" branch))
-         (varR (format "branch.%s.remote" branch))
-         (face (if (equal (magit-get varR) ".")
-                   'magit-branch-local
-                 'magit-branch-remote)))
-    (concat varM (make-string (- width (length varM)) ?\s)
-            (if-let ((value (magit-get varM)))
-                (propertize value 'face face)
-              (propertize "unset" 'face 'magit-popup-disabled-argument))
-            "\n   " varR (make-string (- width (length varR)) ?\s)
-            (if-let ((value (magit-get varR)))
-                (propertize value 'face face)
-              (propertize "unset" 'face 'magit-popup-disabled-argument)))))
-
-;;;###autoload
-(defun magit-cycle-branch*rebase (branch)
-  "Cycle the value of `branch.<name>.rebase' for the current branch.
-With a prefix argument cycle the value for another branch.
-
-The Git variables `branch.<name>.rebase' controls whether pulling
-into the branch named NAME is done by rebasing that branch onto
-the fetched branch or by merging that branch.
-
-When `true' then pulling is done by rebasing.
-When `false' then pulling is done by merging.
-
-When that variable is undefined then the value of `pull.rebase'
-is used instead.  It defaults to `false'."
-  (interactive (list (magit-branch-config-branch
-                      "Cycle branch.<name>.rebase for")))
-  (magit--set-popup-variable (format "branch.%s.rebase" branch)
-                             '("true" "false")
-                             "false" "pull.rebase"))
-
-(defun magit-format-branch*rebase ()
-  (let ((branch (magit-branch-config-branch)))
-    (magit--format-popup-variable:choices
-     (format "branch.%s.rebase" branch)
-     '("true" "false")
-     "false" "pull.rebase"
-     (+ (length branch) 20))))
-
-;;;###autoload
-(defun magit-cycle-branch*pushRemote (branch)
-  "Cycle the value of `branch.<name>.pushRemote' for the current branch.
-With a prefix argument cycle the value for another branch.
-
-The Git variable `branch.<name>.pushRemote' specifies the remote
-that the branch named NAME is usually pushed to.  The value has
-to be the name of an existing remote.
-
-If that variable is undefined, then the value of the Git variable
-`remote.pushDefault' is used instead, provided that it is defined,
-which by default it is not."
-  (interactive (list (magit-branch-config-branch
-                      "Cycle branch.<name>.pushRemote for")))
-  (magit--set-popup-variable (format "branch.%s.pushRemote" branch)
-                             (magit-list-remotes)
-                             "remote.pushDefault"))
-
-(defun magit-format-branch*pushRemote ()
-  (let ((branch (magit-branch-config-branch)))
-    (magit--format-popup-variable:choices
-     (format "branch.%s.pushRemote" branch)
-     (magit-list-remotes)
-     nil "remote.pushDefault"
-     (+ (length branch) 20))))
-
-;;;###autoload
-(defun magit-cycle-pull.rebase ()
-  "Cycle the repository-local value of `pull.rebase'.
-
-The Git variable `pull.rebase' specifies whether pulling is done
-by rebasing or by merging.  It can be overwritten using the Git
-variable `branch.<name>.rebase'.
-
-When `true' then pulling is done by rebasing.
-When `false' (the default) then pulling is done by merging."
-  (interactive)
-  (magit--set-popup-variable "pull.rebase" '("true" "false") "false"))
-
-(defun magit-format-pull.rebase ()
-  (magit--format-popup-variable:choices
-   "pull.rebase" '("true" "false") "false" nil 19))
-
-;;;###autoload
-(defun magit-cycle-remote.pushDefault ()
-  "Cycle the repository-local value of `remote.pushDefault'.
-
-The Git variable `remote.pushDefault' specifies the remote that
-local branches are usually pushed to.  It can be overwritten
-using the Git variable `branch.<name>.pushRemote'."
-  (interactive)
-  (magit--set-popup-variable "remote.pushDefault" (magit-list-remotes)))
-
-(defun magit-format-remote.pushDefault ()
-  (magit--format-popup-variable:choices
-   "remote.pushDefault" (magit-list-remotes) nil nil 19))
-
-;;;###autoload
-(defun magit-cycle-branch*autoSetupMerge ()
-  "Cycle the repository-local value of `branch.autoSetupMerge'.
-
-The Git variable `branch.autoSetupMerge' under what circumstances
-creating a branch (named NAME) should result in the variables
-`branch.<name>.merge' and `branch.<name>.remote' being set
-according to the starting point used to create the branch.  If
-the starting point isn't a branch, then these variables are never
-set.
-
-When `always' then the variables are set regardless of whether
-the starting point is a local or a remote branch.
-
-When `true' (the default) then the variable are set when the
-starting point is a remote branch, but not when it is a local
-branch.
-
-When `false' then the variables are never set."
-  (interactive)
-  (magit--set-popup-variable "branch.autoSetupMerge"
-                             '("always" "true" "false") "true"))
-
-(defun magit-format-branch*autoSetupMerge ()
-  (magit--format-popup-variable:choices
-   "branch.autoSetupMerge" '("always" "true" "false") "true" nil 23))
-
-;;;###autoload
-(defun magit-cycle-branch*autoSetupRebase ()
-  "Cycle the repository-local value of `branch.autoSetupRebase'.
-
-The Git variable `branch.autoSetupRebase' specifies whether
-creating a branch (named NAME) should result in the variable
-`branch.<name>.rebase' being set to `true'.
-
-When `always' then the variable is set regardless of whether the
-starting point is a local or a remote branch.
-
-When `local' then the variable are set when the starting point
-is a local branch, but not when it is a remote branch.
-
-When `remote' then the variable are set when the starting point
-is a remote branch, but not when it is a local branch.
-
-When `never' (the default) then the variable is never set."
-  (interactive)
-  (magit--set-popup-variable "branch.autoSetupRebase"
-                             '("always" "local" "remote" "never") "never"))
-
-(defun magit-format-branch*autoSetupRebase ()
-  (magit--format-popup-variable:choices
-   "branch.autoSetupRebase"
-   '("always" "local" "remote" "never")
-   "never" nil 23))
-
-(provide 'magit-branch)
-;;; magit-branch.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.elc
deleted file mode 100644
index ec5989a1fec1..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-branch.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.el
deleted file mode 100644
index 7c4b1a267104..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.el
+++ /dev/null
@@ -1,171 +0,0 @@
-;;; magit-collab.el --- collaboration tools       -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements various collaboration tools.  These tools
-;; are only early incarnation -- implementing collaboration tools is
-;; a top priority for future development.
-
-;; Currently these tools (including `magit-branch-pull-request', which
-;; is defined elsewhere) only support Github, but support for other
-;; Git forges as well as mailing list based collaboration is in
-;; planning.
-
-;;; Code:
-
-(require 'magit)
-(require 'ghub)
-
-;;; Variables
-
-(defvar magit-github-token-scopes '(repo)
-  "The Github API scopes needed by Magit.
-
-`repo' is the only required scope.  Without this scope none of
-Magit's features that use the API work.  Instead of this scope
-you could use `public_repo' if you are only interested in public
-repositories.
-
-`repo' Grants read/write access to code, commit statuses,
-  invitations, collaborators, adding team memberships, and
-  deployment statuses for public and private repositories
-  and organizations.
-
-`public_repo' Grants read/write access to code, commit statuses,
-  collaborators, and deployment statuses for public repositories
-  and organizations. Also required for starring public
-  repositories.")
-
-;;; Commands
-
-;;;###autoload
-(defun magit-browse-pull-request (pr)
-  "Visit pull-request PR using `browse-url'.
-
-Currently this only supports Github, but that restriction will
-be lifted eventually to support other Git forges."
-  (interactive (list (magit-read-pull-request "Visit pull request")))
-  (browse-url (format "https://github.com/%s/pull/%s"
-                      (--> pr
-                           (cdr (assq 'base it))
-                           (cdr (assq 'repo it))
-                           (cdr (assq 'full_name it)))
-                      (cdr (assq 'number pr)))))
-
-;;; Utilities
-
-(defun magit-read-pull-request (prompt)
-  "Read a pull request from the user, prompting with PROMPT.
-Return the Git forge's API response.  Currently this function
-only supports Github, but that will change eventually."
-  (let* ((origin (magit-upstream-repository))
-         (id     (magit--forge-id origin))
-         (fmtfun (lambda (pull-request)
-                   (format "%s  %s"
-                           (cdr (assq 'number pull-request))
-                           (cdr (assq 'title  pull-request)))))
-         (prs    (ghub-get (format "/repos/%s/pulls" id) nil :auth 'magit))
-         (choice (magit-completing-read
-                  prompt (mapcar fmtfun prs) nil nil nil nil
-                  (let ((default (thing-at-point 'github-pull-request)))
-                    (and default (funcall fmtfun default)))))
-         (number (and (string-match "\\([0-9]+\\)" choice)
-                      (string-to-number (match-string 1 choice)))))
-    (and number
-         ;; Don't reuse the pr from the list, it lacks some information
-         ;; that is only returned when requesting a single pr.  #3371
-         (ghub-get (format "/repos/%s/pulls/%s" id number)
-                   nil :auth 'magit))))
-
-(defun magit-upstream-repository ()
-  "Return the remote name of the upstream repository.
-
-If the Git variable `magit.upstream' is set, then return its
-value.  Otherwise return \"origin\".  If the remote does not
-exist, then raise an error."
-  (let ((remote (or (magit-get "magit.upstream") "origin")))
-    (unless (magit-remote-p remote)
-      (error "No remote named `%s' exists (consider setting `magit.upstream')"
-             remote))
-    (unless (magit--github-remote-p remote)
-      (error "Currently only Github is supported"))
-    remote))
-
-(defun magit--forge-id (remote)
-  (let ((url (magit-get "remote" remote "url")))
-    (and (string-match "\\([^:/]+/[^/]+?\\)\\(?:\\.git\\)?\\'" url)
-         (match-string 1 url))))
-
-(defconst magit--github-url-regexp "\
-\\`\\(?:git://\\|git@\\|ssh://git@\\|https://\\)\
-\\(.*?\\)[/:]\
-\\(\\([^:/]+\\)/\\([^/]+?\\)\\)\
-\\(?:\\.git\\)?\\'")
-
-(defun magit--github-url-p (url)
-  (save-match-data
-    (and url
-         (string-match magit--github-url-regexp url)
-         (let ((host (match-string 1 url)))
-           ;; Match values like "github.com-as-someone", which are
-           ;; translated to just "github.com" according to settings
-           ;; in "~/.ssh/config".  Theoretically this could result
-           ;; in false-positives, but that's rather unlikely.  #3392
-           (and (or (string-match-p (regexp-quote "github.com") host)
-                    (string-match-p (regexp-quote (ghub--host)) host))
-                host)))))
-
-(defun magit--github-remote-p (remote)
-  (or (--when-let (magit-git-string "remote" "get-url" "--push" remote)
-        (magit--github-url-p it))
-      (--when-let (magit-git-string "remote" "get-url" "--all" remote)
-        (magit--github-url-p it))))
-
-(defun magit--github-url-equal (r1 r2)
-  (or (equal r1 r2)
-      (save-match-data
-        (let ((n1 (and (string-match magit--github-url-regexp r1)
-                       (match-string 2 r1)))
-              (n2 (and (string-match magit--github-url-regexp r2)
-                       (match-string 2 r2))))
-          (and n1 n2 (equal n1 n2))))))
-
-(defun magit--pullreq-from-upstream-p (pr)
-  (let-alist pr
-    (equal .head.repo.full_name
-           .base.repo.full_name)))
-
-(defun magit--pullreq-branch (pr &optional assert-new)
-  (let-alist pr
-    (let ((branch .head.ref))
-      (when (and (not (magit--pullreq-from-upstream-p pr))
-                 (or (not .maintainer_can_modify)
-                     (magit-branch-p branch)))
-        (setq branch (format "pr-%s" .number)))
-      (when (and assert-new (magit-branch-p branch))
-        (user-error "Branch `%s' already exists" branch))
-      branch)))
-
-(provide 'magit-collab)
-;;; magit-collab.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.elc
deleted file mode 100644
index f4ffdc0348ac..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-collab.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.el
deleted file mode 100644
index 74a363835ab9..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.el
+++ /dev/null
@@ -1,518 +0,0 @@
-;;; magit-commit.el --- create Git commits  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2008-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements commands for creating Git commits.  These
-;; commands just initiate the commit, support for writing the commit
-;; messages is implemented in `git-commit.el'.
-
-;;; Code:
-
-(require 'magit)
-(require 'magit-sequence)
-
-(eval-when-compile (require 'epa)) ; for `epa-protocol'
-(eval-when-compile (require 'epg))
-
-;;; Options
-
-(defcustom magit-commit-arguments nil
-  "The arguments used when committing."
-  :group 'magit-git-arguments
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom magit-commit-ask-to-stage 'verbose
-  "Whether to ask to stage all unstaged changes when committing and nothing is staged."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-commands
-  :type '(choice (const :tag "Ask showing diff" verbose)
-                 (const :tag "Ask" t)
-                 (const :tag "Don't ask" nil)))
-
-(defcustom magit-commit-show-diff t
-  "Whether the relevant diff is automatically shown when committing."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-commit-extend-override-date t
-  "Whether using `magit-commit-extend' changes the committer date."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-commit-reword-override-date t
-  "Whether using `magit-commit-reword' changes the committer date."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-commit-squash-confirm t
-  "Whether the commit targeted by squash and fixup has to be confirmed.
-When non-nil then the commit at point (if any) is used as default
-choice, otherwise it has to be confirmed.  This option only
-affects `magit-commit-squash' and `magit-commit-fixup'.  The
-\"instant\" variants always require confirmation because making
-an error while using those is harder to recover from."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-;;; Popup
-
-(defun magit-commit-popup (&optional arg)
-  "Popup console for commit commands."
-  (interactive "P")
-  (--if-let (magit-commit-message-buffer)
-      (switch-to-buffer it)
-    (magit-invoke-popup 'magit-commit-popup nil arg)))
-
-(defvar magit-commit-popup
-  '(:variable magit-commit-arguments
-    :man-page "git-commit"
-    :switches ((?a "Stage all modified and deleted files"   "--all")
-               (?e "Allow empty commit"                     "--allow-empty")
-               (?v "Show diff of changes to be committed"   "--verbose")
-               (?h "Disable hooks"                          "--no-verify")
-               (?s "Add Signed-off-by line"                 "--signoff")
-               (?R "Claim authorship and reset author date" "--reset-author"))
-    :options  ((?A "Override the author"  "--author=")
-               (?S "Sign using gpg"       "--gpg-sign=" magit-read-gpg-secret-key)
-               (?C "Reuse commit message" "--reuse-message="
-                   magit-read-reuse-message))
-    :actions  ((?c "Commit"         magit-commit)
-               (?e "Extend"         magit-commit-extend)
-               (?f "Fixup"          magit-commit-fixup)
-               (?F "Instant Fixup"  magit-commit-instant-fixup) nil
-               (?w "Reword"         magit-commit-reword)
-               (?s "Squash"         magit-commit-squash)
-               (?S "Instant Squash" magit-commit-instant-squash) nil
-               (?a "Amend"          magit-commit-amend)
-               (?A "Augment"        magit-commit-augment))
-    :max-action-columns 4
-    :default-action magit-commit))
-
-(magit-define-popup-keys-deferred 'magit-commit-popup)
-
-(defun magit-commit-arguments nil
-  (if (eq magit-current-popup 'magit-commit-popup)
-      magit-current-popup-args
-    magit-commit-arguments))
-
-(defvar magit-gpg-secret-key-hist nil)
-
-(defun magit-read-gpg-secret-key (prompt &optional _initial-input)
-  (require 'epa)
-  (let ((keys (--map (concat (epg-sub-key-id (car (epg-key-sub-key-list it)))
-                             " "
-                             (when-let ((id-obj (car (epg-key-user-id-list it))))
-                               (let ((id-str (epg-user-id-string id-obj)))
-                                 (if (stringp id-str)
-                                     id-str
-                                   (epg-decode-dn id-obj)))))
-                     (epg-list-keys (epg-make-context epa-protocol) nil t))))
-    (car (split-string (magit-completing-read
-                        prompt keys nil nil nil 'magit-gpg-secret-key-hist
-                        (car (or magit-gpg-secret-key-hist keys)))
-                       " "))))
-
-(defun magit-read-reuse-message (prompt &optional default)
-  (magit-completing-read prompt (magit-list-refnames)
-                         nil nil nil 'magit-revision-history
-                         (or default
-                             (and (magit-rev-verify "ORIG_HEAD")
-                                  "ORIG_HEAD"))))
-
-;;; Commands
-
-;;;###autoload
-(defun magit-commit (&optional args)
-  "Create a new commit on `HEAD'.
-With a prefix argument, amend to the commit at `HEAD' instead.
-\n(git commit [--amend] ARGS)"
-  (interactive (if current-prefix-arg
-                   (list (cons "--amend" (magit-commit-arguments)))
-                 (list (magit-commit-arguments))))
-  (when (member "--all" args)
-    (setq this-command 'magit-commit-all))
-  (when (setq args (magit-commit-assert args))
-    (let ((default-directory (magit-toplevel)))
-      (magit-run-git-with-editor "commit" args))))
-
-;;;###autoload
-(defun magit-commit-amend (&optional args)
-  "Amend the last commit.
-\n(git commit --amend ARGS)"
-  (interactive (list (magit-commit-arguments)))
-  (magit-commit-amend-assert)
-  (magit-run-git-with-editor "commit" "--amend" args))
-
-;;;###autoload
-(defun magit-commit-extend (&optional args override-date)
-  "Amend the last commit, without editing the message.
-
-With a prefix argument keep the committer date, otherwise change
-it.  The option `magit-commit-extend-override-date' can be used
-to inverse the meaning of the prefix argument.  \n(git commit
---amend --no-edit)"
-  (interactive (list (magit-commit-arguments)
-                     (if current-prefix-arg
-                         (not magit-commit-extend-override-date)
-                       magit-commit-extend-override-date)))
-  (when (setq args (magit-commit-assert args (not override-date)))
-    (magit-commit-amend-assert)
-    (let ((process-environment process-environment))
-      (unless override-date
-        (push (magit-rev-format "GIT_COMMITTER_DATE=%cD") process-environment))
-      (magit-run-git-with-editor "commit" "--amend" "--no-edit" args))))
-
-;;;###autoload
-(defun magit-commit-reword (&optional args override-date)
-  "Reword the last commit, ignoring staged changes.
-
-With a prefix argument keep the committer date, otherwise change
-it.  The option `magit-commit-reword-override-date' can be used
-to inverse the meaning of the prefix argument.
-
-Non-interactively respect the optional OVERRIDE-DATE argument
-and ignore the option.
-\n(git commit --amend --only)"
-  (interactive (list (magit-commit-arguments)
-                     (if current-prefix-arg
-                         (not magit-commit-reword-override-date)
-                       magit-commit-reword-override-date)))
-  (magit-commit-amend-assert)
-  (let ((process-environment process-environment))
-    (unless override-date
-      (push (magit-rev-format "GIT_COMMITTER_DATE=%cD") process-environment))
-    (magit-run-git-with-editor "commit" "--amend" "--only" args)))
-
-;;;###autoload
-(defun magit-commit-fixup (&optional commit args)
-  "Create a fixup commit.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'."
-  (interactive (list (magit-commit-at-point)
-                     (magit-commit-arguments)))
-  (magit-commit-squash-internal "--fixup" commit args))
-
-;;;###autoload
-(defun magit-commit-squash (&optional commit args)
-  "Create a squash commit, without editing the squash message.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'."
-  (interactive (list (magit-commit-at-point)
-                     (magit-commit-arguments)))
-  (magit-commit-squash-internal "--squash" commit args))
-
-;;;###autoload
-(defun magit-commit-augment (&optional commit args)
-  "Create a squash commit, editing the squash message.
-
-With a prefix argument the target COMMIT has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option `magit-commit-squash-confirm'."
-  (interactive (list (magit-commit-at-point)
-                     (magit-commit-arguments)))
-  (magit-commit-squash-internal "--squash" commit args nil t))
-
-;;;###autoload
-(defun magit-commit-instant-fixup (&optional commit args)
-  "Create a fixup commit targeting COMMIT and instantly rebase."
-  (interactive (list (magit-commit-at-point)
-                     (magit-commit-arguments)))
-  (magit-commit-squash-internal "--fixup" commit args t))
-
-;;;###autoload
-(defun magit-commit-instant-squash (&optional commit args)
-  "Create a squash commit targeting COMMIT and instantly rebase."
-  (interactive (list (magit-commit-at-point)
-                     (magit-commit-arguments)))
-  (magit-commit-squash-internal "--squash" commit args t))
-
-(defun magit-commit-squash-internal
-    (option commit &optional args rebase edit confirmed)
-  (when-let ((args (magit-commit-assert args t)))
-    (when commit
-      (when (and rebase (not (magit-rev-ancestor-p commit "HEAD")))
-        (magit-read-char-case
-            (format "%s isn't an ancestor of HEAD.  " commit) nil
-          (?c "[c]reate without rebasing" (setq rebase nil))
-          (?s "[s]elect other"            (setq commit nil))
-          (?a "[a]bort"                   (user-error "Quit")))))
-    (when commit
-      (setq commit (magit-rebase-interactive-assert commit t)))
-    (if (and commit
-             (or confirmed
-                 (not (or rebase
-                          current-prefix-arg
-                          magit-commit-squash-confirm))))
-        (let ((magit-commit-show-diff nil))
-          (push (concat option "=" commit) args)
-          (unless edit
-            (push "--no-edit" args))
-          (if rebase
-              (magit-with-editor
-                (magit-call-git
-                 "commit" "--no-gpg-sign"
-                 (-remove-first
-                  (apply-partially #'string-match-p "\\`--gpg-sign=")
-                  args)))
-            (magit-run-git-with-editor "commit" args))
-          t) ; The commit was created; used by below lambda.
-      (magit-log-select
-        (lambda (commit)
-          (when (and (magit-commit-squash-internal option commit args
-                                                   rebase edit t)
-                     rebase)
-            (magit-commit-amend-assert commit)
-            (magit-rebase-interactive-1 commit
-                (list "--autosquash" "--autostash")
-              "" "true" nil t)))
-        (format "Type %%p on a commit to %s into it,"
-                (substring option 2)))
-      (when magit-commit-show-diff
-        (let ((magit-display-buffer-noselect t))
-          (apply #'magit-diff-staged nil (magit-diff-arguments)))))))
-
-(defun magit-commit-amend-assert (&optional commit)
-  (--when-let (magit-list-publishing-branches commit)
-    (let ((m1 "This commit has already been published to ")
-          (m2 ".\nDo you really want to modify it"))
-      (magit-confirm 'amend-published
-        (concat m1 "%s" m2)
-        (concat m1 "%i public branches" m2)
-        nil it))))
-
-(defun magit-commit-assert (args &optional strict)
-  (cond
-   ((or (magit-anything-staged-p)
-        (and (magit-anything-unstaged-p)
-             ;; ^ Everything of nothing is still nothing.
-             (member "--all" args))
-        (and (not strict)
-             ;; ^ For amend variants that don't make sense otherwise.
-             (or (member "--amend" args)
-                 (member "--allow-empty" args))))
-    (or args (list "--")))
-   ((and (magit-rebase-in-progress-p)
-         (not (magit-anything-unstaged-p))
-         (y-or-n-p "Nothing staged.  Continue in-progress rebase? "))
-    (magit-run-git-sequencer "rebase" "--continue")
-    nil)
-   ((and (file-exists-p (magit-git-dir "MERGE_MSG"))
-         (not (magit-anything-unstaged-p)))
-    (or args (list "--")))
-   ((not (magit-anything-unstaged-p))
-    (user-error "Nothing staged (or unstaged)"))
-   (magit-commit-ask-to-stage
-    (when (eq magit-commit-ask-to-stage 'verbose)
-      (magit-diff-unstaged))
-    (prog1 (when (y-or-n-p "Nothing staged.  Stage and commit all unstaged changes? ")
-             (magit-run-git "add" "-u" ".")
-             (or args (list "--")))
-      (when (and (eq magit-commit-ask-to-stage 'verbose)
-                 (derived-mode-p 'magit-diff-mode))
-        (magit-mode-bury-buffer))))
-   (t
-    (user-error "Nothing staged"))))
-
-(defvar magit--reshelve-history nil)
-
-;;;###autoload
-(defun magit-commit-reshelve (date)
-  "Change the committer date and possibly the author date of `HEAD'.
-
-If you are the author of `HEAD', then both dates are changed,
-otherwise only the committer date.  The current time is used
-as the initial minibuffer input and the original author (if
-that is you) or committer date is available as the previous
-history element."
-  (interactive
-   (let ((author-p (magit-rev-author-p "HEAD")))
-     (push (magit-rev-format (if author-p "%ad" "%cd") "HEAD"
-                             (concat "--date=format:%F %T %z"))
-           magit--reshelve-history)
-     (list (read-string (if author-p
-                            "Change author and committer dates to: "
-                          "Change committer date to: ")
-                        (cons (format-time-string "%F %T %z") 17)
-                        'magit--reshelve-history))))
-  (let ((process-environment process-environment))
-    (push (concat "GIT_COMMITTER_DATE=" date) process-environment)
-    (magit-run-git "commit" "--amend" "--no-edit"
-                   (and (magit-rev-author-p "HEAD")
-                        (concat "--date=" date)))))
-
-;;;###autoload (autoload 'magit-commit-absorb-popup "magit-commit" nil t)
-(magit-define-popup magit-commit-absorb-popup
-  "Spread unstaged changes across recent commits.
-Without a prefix argument just call `magit-commit-absorb'.
-With a prefix argument use a popup buffer to select arguments."
-  :man-page "git-bisect"
-  :options '((?c "Diff context lines" "--context=")
-             (?s "Strictness"         "--strict="))
-  :actions '((?x "Absorb" magit-commit-absorb))
-  :default-action 'magit-commit-absorb
-  :use-prefix 'popup)
-
-(defun magit-commit-absorb (&optional commit args confirmed)
-  "Spread unstaged changes across recent commits.
-This command requires the git-autofixup script, which is
-available from https://github.com/torbiak/git-autofixup."
-  (interactive (list (magit-get-upstream-branch)
-                     (magit-commit-absorb-arguments)))
-  (unless (executable-find "git-autofixup")
-    (user-error "This command requires the git-autofixup script, which %s"
-                "is available from https://github.com/torbiak/git-autofixup"))
-  (when (magit-anything-staged-p)
-    (user-error "Cannot absorb when there are staged changes"))
-  (unless (magit-anything-unstaged-p)
-    (user-error "There are no unstaged changes that could be absorbed"))
-  (when commit
-    (setq commit (magit-rebase-interactive-assert commit t)))
-  (if (and commit confirmed)
-      (progn (magit-run-git-async "autofixup" "-vv" args commit) t)
-    (magit-log-select
-      (lambda (commit)
-        (magit-commit-absorb commit args t))
-      nil nil nil nil commit)))
-
-;;; Pending Diff
-
-(defun magit-commit-diff ()
-  (when (and git-commit-mode magit-commit-show-diff)
-    (when-let ((diff-buffer (magit-mode-get-buffer 'magit-diff-mode)))
-      ;; This window just started displaying the commit message
-      ;; buffer.  Without this that buffer would immediately be
-      ;; replaced with the diff buffer.  See #2632.
-      (unrecord-window-buffer nil diff-buffer))
-    (condition-case nil
-        (let ((args (car (magit-diff-arguments)))
-              (magit-inhibit-save-previous-winconf 'unset)
-              (magit-display-buffer-noselect t)
-              (inhibit-quit nil))
-          (message "Diffing changes to be committed (C-g to abort diffing)")
-          (if-let ((fn (cl-case last-command
-                         (magit-commit
-                          (apply-partially 'magit-diff-staged nil))
-                         (magit-commit-all
-                          (apply-partially 'magit-diff-working-tree nil))
-                         ((magit-commit-amend
-                           magit-commit-reword
-                           magit-rebase-reword-commit)
-                          'magit-diff-while-amending))))
-              (funcall fn args)
-            (if (magit-anything-staged-p)
-                (magit-diff-staged nil args)
-              (magit-diff-while-amending args))))
-      (quit))))
-
-;; Mention `magit-diff-while-committing' because that's
-;; always what I search for when I try to find this line.
-(add-hook 'server-switch-hook 'magit-commit-diff)
-
-(add-to-list 'with-editor-server-window-alist
-             (cons git-commit-filename-regexp 'switch-to-buffer))
-
-;;; Message Utilities
-
-(defun magit-commit-message-buffer ()
-  (let* ((find-file-visit-truename t) ; git uses truename of COMMIT_EDITMSG
-         (topdir (magit-toplevel)))
-    (--first (equal topdir (with-current-buffer it
-                             (and git-commit-mode (magit-toplevel))))
-             (append (buffer-list (selected-frame))
-                     (buffer-list)))))
-
-(defvar magit-commit-add-log-insert-function 'magit-commit-add-log-insert
-  "Used by `magit-commit-add-log' to insert a single entry.")
-
-(defun magit-commit-add-log ()
-  "Add a stub for the current change into the commit message buffer.
-If no commit is in progress, then initiate it.  Use the function
-specified by variable `magit-commit-add-log-insert-function' to
-actually insert the entry."
-  (interactive)
-  (let ((hunk (magit-section-when 'hunk it))
-        (log (magit-commit-message-buffer)) buf pos)
-    (save-window-excursion
-      (call-interactively #'magit-diff-visit-file)
-      (setq buf (current-buffer))
-      (setq pos (point)))
-    (unless log
-      (unless (magit-commit-assert nil)
-        (user-error "Abort"))
-      (magit-commit)
-      (while (not (setq log (magit-commit-message-buffer)))
-        (sit-for 0.01)))
-    (save-excursion
-      (with-current-buffer buf
-        (goto-char pos)
-        (funcall magit-commit-add-log-insert-function log
-                 (magit-file-relative-name)
-                 (and hunk (add-log-current-defun)))))))
-
-(defun magit-commit-add-log-insert (buffer file defun)
-  (with-current-buffer buffer
-    (undo-boundary)
-    (goto-char (point-max))
-    (while (re-search-backward (concat "^" comment-start) nil t))
-    (save-restriction
-      (narrow-to-region (point-min) (point))
-      (cond ((re-search-backward (format "* %s\\(?: (\\([^)]+\\))\\)?: " file)
-                                 nil t)
-             (when (equal (match-string 1) defun)
-               (setq defun nil))
-             (re-search-forward ": "))
-            (t
-             (when (re-search-backward "^[\\*(].+\n" nil t)
-               (goto-char (match-end 0)))
-             (while (re-search-forward "^[^\\*\n].*\n" nil t))
-             (if defun
-                 (progn (insert (format "* %s (%s): \n" file defun))
-                        (setq defun nil))
-               (insert (format "* %s: \n" file)))
-             (backward-char)
-             (unless (looking-at "\n[\n\\']")
-               (insert ?\n)
-               (backward-char))))
-      (when defun
-        (forward-line)
-        (let ((limit (save-excursion
-                       (and (re-search-forward "^\\*" nil t)
-                            (point)))))
-          (unless (or (looking-back (format "(%s): " defun)
-                                    (line-beginning-position))
-                      (re-search-forward (format "^(%s): " defun) limit t))
-            (while (re-search-forward "^[^\\*\n].*\n" limit t))
-            (insert (format "(%s): \n" defun))
-            (backward-char)))))))
-
-(provide 'magit-commit)
-;;; magit-commit.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.elc
deleted file mode 100644
index 99712efa2110..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-commit.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.el
deleted file mode 100644
index 106186eae4fa..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.el
+++ /dev/null
@@ -1,132 +0,0 @@
-;;; magit-core.el --- core functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library requires several other libraries, so that yet other
-;; libraries can just require this one, instead of having to require
-;; all the other ones.  In other words this separates the low-level
-;; stuff from the rest.  It also defines some Custom groups.
-
-;;; Code:
-
-(require 'magit-popup)
-(require 'magit-utils)
-(require 'magit-section)
-(require 'magit-git)
-(require 'magit-mode)
-(require 'magit-margin)
-(require 'magit-process)
-(require 'magit-autorevert)
-
-(defgroup magit nil
-  "Controlling Git from Emacs."
-  :link '(url-link "https://magit.vc")
-  :link '(info-link "(magit)FAQ")
-  :link '(info-link "(magit)")
-  :group 'tools)
-
-(defgroup magit-essentials nil
-  "Options that every Magit user should briefly think about.
-
-Each of these options falls into one or more of these categories:
-
-* Options that affect Magit's behavior in fundamental ways.
-* Options that affect safety.
-* Options that affect performance.
-* Options that are of a personal nature."
-  :link '(info-link "(magit)Essential Settings")
-  :group 'magit)
-
-(defgroup magit-miscellaneous nil
-  "Miscellanous Magit options."
-  :group 'magit)
-
-(defgroup magit-commands nil
-  "Options controlling behavior of certain commands."
-  :group 'magit)
-
-(defgroup magit-git-arguments nil
-  "Options controlling what arguments are passed to Git.
-
-Most of these options can be set using the respective popup,
-and it is recommended that you do that because then you can
-be certain that Magit supports the arguments that you select.
-
-An option `magit-NAME-argument' specifies the arguments that
-are enabled by default by the popup `magit-NAME-popup'."
-  :link '(info-link "(magit-popup)Customizing Existing Popups")
-  :link '(info-link "(magit-popup)Usage")
-  :group 'magit-commands)
-
-(defgroup magit-modes nil
-  "Modes used or provided by Magit."
-  :group 'magit)
-
-(defgroup magit-buffers nil
-  "Options concerning Magit buffers."
-  :link '(info-link "(magit)Modes and Buffers")
-  :group 'magit)
-
-(defgroup magit-refresh nil
-  "Options controlling how Magit buffers are refreshed."
-  :link '(info-link "(magit)Automatic Refreshing of Magit Buffers")
-  :group 'magit
-  :group 'magit-buffers)
-
-(defgroup magit-faces nil
-  "Faces used by Magit."
-  :group 'magit
-  :group 'faces)
-
-(defgroup magit-extensions nil
-  "Extensions to Magit."
-  :group 'magit)
-
-(custom-add-to-group 'magit-modes   'magit-popup       'custom-group)
-(custom-add-to-group 'magit-faces   'magit-popup-faces 'custom-group)
-(custom-add-to-group 'magit-modes   'git-commit        'custom-group)
-(custom-add-to-group 'magit-faces   'git-commit-faces  'custom-group)
-(custom-add-to-group 'magit-modes   'git-rebase        'custom-group)
-(custom-add-to-group 'magit-faces   'git-rebase-faces  'custom-group)
-(custom-add-to-group 'magit-process 'with-editor       'custom-group)
-
-(defgroup magit-related nil
-  "Options that are relevant to Magit but that are defined elsewhere."
-  :link '(custom-group-link vc)
-  :link '(custom-group-link smerge)
-  :link '(custom-group-link ediff)
-  :link '(custom-group-link auto-revert)
-  :group 'magit
-  :group 'magit-extensions
-  :group 'magit-essentials)
-
-(custom-add-to-group 'magit-related     'auto-revert-check-vc-info 'custom-variable)
-(custom-add-to-group 'magit-auto-revert 'auto-revert-check-vc-info 'custom-variable)
-
-(custom-add-to-group 'magit-related 'ediff-window-setup-function 'custom-variable)
-(custom-add-to-group 'magit-related 'smerge-refine-ignore-whitespace 'custom-variable)
-(custom-add-to-group 'magit-related 'vc-follow-symlinks 'custom-variable)
-
-(provide 'magit-core)
-;;; magit-core.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.elc
deleted file mode 100644
index c68aff302d58..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-core.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.el
deleted file mode 100644
index 426894bd59b1..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.el
+++ /dev/null
@@ -1,2780 +0,0 @@
-;;; magit-diff.el --- inspect Git diffs  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for looking at Git diffs and
-;; commits.
-
-;;; Code:
-
-(require 'git-commit)
-(require 'magit-core)
-
-;; For `magit-diff-popup'
-(declare-function magit-stash-show "magit-stash" (stash &optional args files))
-;; For `magit-diff-visit-file'
-(declare-function dired-jump "dired-x" (&optional other-window file-name))
-(declare-function magit-find-file-noselect "magit-files" (rev file))
-(declare-function magit-status-internal "magit-status" (directory))
-;; For `magit-diff-while-committing'
-(declare-function magit-commit-message-buffer "magit-commit" ())
-;; For `magit-insert-revision-gravatar'
-(defvar gravatar-size)
-;; For `magit-show-commit' and `magit-diff-show-or-scroll'
-(declare-function magit-current-blame-chunk "magit-blame" ())
-(eval-when-compile
-  (cl-pushnew 'orig-rev eieio--known-slot-names))
-(declare-function magit-blame-mode "magit-blame" (&optional arg))
-(defvar magit-blame-mode)
-(defvar git-rebase-line)
-;; For `magit-diff-unmerged'
-(declare-function magit-merge-in-progress-p "magit-merge" ())
-(declare-function magit--merge-range "magit-merge" (&optional head))
-
-(require 'diff-mode)
-(require 'smerge-mode)
-
-(defvar bookmark-make-record-function)
-
-;;; Options
-;;;; Diff Mode
-
-(defgroup magit-diff nil
-  "Inspect and manipulate Git diffs."
-  :link '(info-link "(magit)Diffing")
-  :group 'magit-modes)
-
-(defcustom magit-diff-mode-hook nil
-  "Hook run after entering Magit-Diff mode."
-  :group 'magit-diff
-  :type 'hook)
-
-(defcustom magit-diff-arguments '("--stat" "--no-ext-diff")
-  "The diff arguments used in buffers whose mode derives from `magit-diff-mode'."
-  :group 'magit-git-arguments
-  :group 'magit-diff
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom magit-diff-sections-hook
-  '(magit-insert-diff
-    magit-insert-xref-buttons)
-  "Hook run to insert sections into a `magit-diff-mode' buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-diff
-  :type 'hook)
-
-(defcustom magit-diff-expansion-threshold 60
-  "After how many seconds not to expand anymore diffs.
-
-Except in status buffers, diffs are usually start out fully
-expanded.  Because that can take a long time, all diffs that
-haven't been fontified during a refresh before the threshold
-defined here are instead displayed with their bodies collapsed.
-
-Note that this can cause sections that were previously expanded
-to be collapsed.  So you should not pick a very low value here.
-
-The hook function `magit-diff-expansion-threshold' has to be a
-member of `magit-section-set-visibility-hook' for this option
-to have any effect."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-diff
-  :type 'float)
-
-(defcustom magit-diff-highlight-hunk-body t
-  "Whether to highlight bodies of selected hunk sections.
-This only has an effect if `magit-diff-highlight' is a
-member of `magit-section-highlight-hook', which see."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-diff
-  :type 'boolean)
-
-(defcustom magit-diff-highlight-hunk-region-functions
-  '(magit-diff-highlight-hunk-region-dim-outside
-    magit-diff-highlight-hunk-region-using-overlays)
-  "The functions used to highlight the hunk-internal region.
-
-`magit-diff-highlight-hunk-region-dim-outside' overlays the outside
-of the hunk internal selection with a face that causes the added and
-removed lines to have the same background color as context lines.
-This function should not be removed from the value of this option.
-
-`magit-diff-highlight-hunk-region-using-overlays' and
-`magit-diff-highlight-hunk-region-using-underline' emphasize the
-region by placing delimiting horizonal lines before and after it.
-The underline variant was implemented because Eli said that is
-how we should do it.  However the overlay variant actually works
-better.  Also see https://github.com/magit/magit/issues/2758.
-
-Instead of, or in addition to, using delimiting horizontal lines,
-to emphasize the boundaries, you may which to emphasize the text
-itself, using `magit-diff-highlight-hunk-region-using-face'.
-
-In terminal frames it's not possible to draw lines as the overlay
-and underline variants normally do, so there they fall back to
-calling the face function instead."
-  :package-version '(magit . "2.9.0")
-  :set-after '(magit-diff-show-lines-boundaries)
-  :group 'magit-diff
-  :type 'hook
-  :options '(magit-diff-highlight-hunk-region-dim-outside
-             magit-diff-highlight-hunk-region-using-underline
-             magit-diff-highlight-hunk-region-using-overlays
-             magit-diff-highlight-hunk-region-using-face))
-
-(defcustom magit-diff-unmarked-lines-keep-foreground t
-  "Whether `magit-diff-highlight-hunk-region-dim-outside' preserves foreground.
-When this is set to nil, then that function only adjusts the
-foreground color but added and removed lines outside the region
-keep their distinct foreground colors."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-diff
-  :type 'boolean)
-
-(defcustom magit-diff-refine-hunk nil
-  "Whether to show word-granularity differences within diff hunks.
-
-nil    never show fine differences.
-t      show fine differences for the current diff hunk only.
-`all'  show fine differences for all displayed diff hunks."
-  :group 'magit-diff
-  :safe (lambda (val) (memq val '(nil t all)))
-  :type '(choice (const :tag "Never" nil)
-                 (const :tag "Current" t)
-                 (const :tag "All" all)))
-
-(put 'magit-diff-refine-hunk 'permanent-local t)
-
-(defcustom magit-diff-adjust-tab-width nil
-  "Whether to adjust the width of tabs in diffs.
-
-Determining the correct width can be expensive if it requires
-opening large and/or many files, so the widths are cached in
-the variable `magit-diff--tab-width-cache'.  Set that to nil
-to invalidate the cache.
-
-nil       Never ajust tab width.  Use `tab-width's value from
-          the Magit buffer itself instead.
-
-t         If the corresponding file-visiting buffer exits, then
-          use `tab-width's value from that buffer.  Doing this is
-          cheap, so this value is used even if a corresponding
-          cache entry exists.
-
-`always'  If there is no such buffer, then temporarily visit the
-          file to determine the value.
-
-NUMBER    Like `always', but don't visit files larger than NUMBER
-          bytes."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-diff
-  :type '(choice (const :tag "Never" nil)
-                 (const :tag "If file-visiting buffer exists" t)
-                 (const :tag "... or file isn't larger than bytes" all)
-                 (const :tag "Always" always)))
-
-(defcustom magit-diff-paint-whitespace t
-  "Specify where to highlight whitespace errors.
-See `magit-diff-highlight-trailing',
-`magit-diff-highlight-indentation'.  The symbol t means in all
-diffs, `status' means only in the status buffer, and nil means
-nowhere."
-  :group 'magit-diff
-  :safe (lambda (val) (memq val '(t nil status)))
-  :type '(choice (const :tag "Always" t)
-                 (const :tag "Never" nil)
-                 (const :tag "In status buffer" status)))
-
-(defcustom magit-diff-highlight-trailing t
-  "Whether to highlight whitespace at the end of a line in diffs.
-Used only when `magit-diff-paint-whitespace' is non-nil."
-  :group 'magit-diff
-  :safe 'booleanp
-  :type 'boolean)
-
-(defcustom magit-diff-highlight-indentation nil
-  "Highlight the \"wrong\" indentation style.
-Used only when `magit-diff-paint-whitespace' is non-nil.
-
-The value is a list of cons cells.  The car is a regular
-expression, and the cdr is the value that applies to repositories
-whose directory matches the regular expression.  If more than one
-element matches, then the *last* element in the list applies.
-The default value should therefore come first in the list.
-
-If the value is `tabs', highlight indentation with tabs.  If the
-value is an integer, highlight indentation with at least that
-many spaces.  Otherwise, highlight neither."
-  :group 'magit-diff
-  :type `(repeat (cons (string :tag "Directory regexp")
-                       (choice (const :tag "Tabs" tabs)
-                               (integer :tag "Spaces" :value ,tab-width)
-                               (const :tag "Neither" nil)))))
-
-(defcustom magit-diff-hide-trailing-cr-characters
-  (and (memq system-type '(ms-dos windows-nt)) t)
-  "Whether to hide ^M characters at the end of a line in diffs."
-  :package-version '(magit . "2.6.0")
-  :group 'magit-diff
-  :type 'boolean)
-
-(defcustom magit-diff-visit-previous-blob t
-  "Whether `magit-diff-visit-file' may visit the previous blob.
-
-When this is t and point is on a removed line in a diff for a
-committed change, then `magit-diff-visit-file' visits the blob
-from the last revision which still had that line.
-
-Currently this is only supported for committed changes, for
-staged and unstaged changes `magit-diff-visit-file' always
-visits the file in the working tree."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-diff
-  :type 'boolean)
-
-(defcustom magit-diff-highlight-keywords t
-  "Whether to highlight bracketed keywords in commit messages."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-diff
-  :type 'boolean)
-
-;;;; File Diff
-
-(defcustom magit-diff-buffer-file-locked t
-  "Whether `magit-diff-buffer-file' uses a dedicated buffer."
-  :package-version '(magit . "2.7.0")
-  :group 'magit-commands
-  :group 'magit-diff
-  :type 'boolean)
-
-;;;; Revision Mode
-
-(defgroup magit-revision nil
-  "Inspect and manipulate Git commits."
-  :link '(info-link "(magit)Revision Buffer")
-  :group 'magit-modes)
-
-(defcustom magit-revision-mode-hook '(bug-reference-mode)
-  "Hook run after entering Magit-Revision mode."
-  :group 'magit-revision
-  :type 'hook
-  :options '(bug-reference-mode))
-
-(defcustom magit-revision-sections-hook
-  '(magit-insert-revision-tag
-    magit-insert-revision-headers
-    magit-insert-revision-message
-    magit-insert-revision-notes
-    magit-insert-revision-diff
-    magit-insert-xref-buttons)
-  "Hook run to insert sections into a `magit-revision-mode' buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-revision
-  :type 'hook)
-
-(defcustom magit-revision-headers-format "\
-Author:     %aN <%aE>
-AuthorDate: %ad
-Commit:     %cN <%cE>
-CommitDate: %cd
-"
-  "Format string used to insert headers in revision buffers.
-
-All headers in revision buffers are inserted by the section
-inserter `magit-insert-revision-headers'.  Some of the headers
-are created by calling `git show --format=FORMAT' where FORMAT
-is the format specified here.  Other headers are hard coded or
-subject to option `magit-revision-insert-related-refs'."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-revision
-  :type 'string)
-
-(defcustom magit-revision-insert-related-refs t
-  "Whether to show related refs in revision buffers."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-revision
-  :type 'boolean)
-
-(defcustom magit-revision-use-hash-sections 'quicker
-  "Whether to turn hashes inside the commit message into sections.
-
-If non-nil, then hashes inside the commit message are turned into
-`commit' sections.  There is a trade off to be made between
-performance and reliability:
-
-- `slow' calls git for every word to be absolutely sure.
-- `quick' skips words less than seven characters long.
-- `quicker' additionally skips words that don't contain a number.
-- `quickest' uses all words that are at least seven characters
-  long and which contain at least one number as well as at least
-  one letter.
-
-If nil, then no hashes are turned into sections, but you can
-still visit the commit at point using \"RET\"."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-revision
-  :type '(choice (const :tag "Use sections, quickest" quickest)
-                 (const :tag "Use sections, quicker" quicker)
-                 (const :tag "Use sections, quick" quick)
-                 (const :tag "Use sections, slow" slow)
-                 (const :tag "Don't use sections" nil)))
-
-(defcustom magit-revision-show-gravatars nil
-  "Whether to show gravatar images in revision buffers.
-
-If non-nil, then the value has to be a cons-cell which specifies
-where the gravatar images for the author and/or the committer are
-inserted inside the text that was previously inserted according
-to `magit-revision-header-format'.
-
-Both cells are regular expressions.  The car specifies where to
-insert the author gravatar image.  The top half of the image is
-inserted right after the matched text, the bottom half on the
-next line at the same offset.  The cdr specifies where to insert
-the committer image, accordingly.  Either the car or the cdr may
-be nil."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-revision
-  :type '(choice (const :tag "Don't show gravatars" nil)
-                 (cons  :tag "Show gravatars"
-                        (regexp :tag "Author regexp"    "^Author:     ")
-                        (regexp :tag "Committer regexp" "^Commit:     "))))
-
-(defcustom magit-revision-use-gravatar-kludge nil
-  "Whether to work around a bug which affects display of gravatars.
-
-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.  Enabling this option works around this issue by
-interchanging the halves once more, which cancels out the effect
-of the bug.
-
-See https://github.com/magit/magit/issues/2265
-and https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7847.
-
-Starting with Emacs 26.1 this kludge should not be required for
-any build."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-revision
-  :type 'boolean)
-
-;;;; Diff Sections
-
-(defcustom magit-diff-section-arguments '("--no-ext-diff")
-  "The diff arguments used in buffers that show other things besides diffs."
-  :group 'magit-git-arguments
-  :group 'magit-diff
-  :group 'magit-status
-  :type '(repeat (string :tag "Argument")))
-
-(put 'magit-diff-section-arguments 'permanent-local t)
-
-;;; Faces
-
-(defface magit-diff-file-heading
-  '((t :weight bold))
-  "Face for diff file headings."
-  :group 'magit-faces)
-
-(defface magit-diff-file-heading-highlight
-  '((t :inherit (magit-section-highlight)))
-  "Face for current diff file headings."
-  :group 'magit-faces)
-
-(defface magit-diff-file-heading-selection
-  '((((class color) (background light))
-     :inherit magit-diff-file-heading-highlight
-     :foreground "salmon4")
-    (((class color) (background dark))
-     :inherit magit-diff-file-heading-highlight
-     :foreground "LightSalmon3"))
-  "Face for selected diff file headings."
-  :group 'magit-faces)
-
-(defface magit-diff-hunk-heading
-  '((((class color) (background light))
-     :background "grey80"
-     :foreground "grey30")
-    (((class color) (background dark))
-     :background "grey25"
-     :foreground "grey70"))
-  "Face for diff hunk headings."
-  :group 'magit-faces)
-
-(defface magit-diff-hunk-heading-highlight
-  '((((class color) (background light))
-     :background "grey75"
-     :foreground "grey30")
-    (((class color) (background dark))
-     :background "grey35"
-     :foreground "grey70"))
-  "Face for current diff hunk headings."
-  :group 'magit-faces)
-
-(defface magit-diff-hunk-heading-selection
-  '((((class color) (background light))
-     :inherit magit-diff-hunk-heading-highlight
-     :foreground "salmon4")
-    (((class color) (background dark))
-     :inherit magit-diff-hunk-heading-highlight
-     :foreground "LightSalmon3"))
-  "Face for selected diff hunk headings."
-  :group 'magit-faces)
-
-(defface magit-diff-hunk-region
-  '((t :inherit bold))
-  "Face used by `magit-diff-highlight-hunk-region-using-face'.
-
-This face is overlayed over text that uses other hunk faces,
-and those normally set the foreground and background colors.
-The `:foreground' and especially the `:background' properties
-should be avoided here.  Setting the latter would cause the
-lose of information.  Good properties to set here are `:weight'
-and `:slant'."
-  :group 'magit-faces)
-
-(defface magit-diff-lines-heading
-  '((((class color) (background light))
-     :inherit magit-diff-hunk-heading-highlight
-     :background "LightSalmon3")
-    (((class color) (background dark))
-     :inherit magit-diff-hunk-heading-highlight
-     :foreground "grey80"
-     :background "salmon4"))
-  "Face for diff hunk heading when lines are marked."
-  :group 'magit-faces)
-
-(defface magit-diff-lines-boundary
-  '((t :inherit magit-diff-lines-heading))
-  "Face for boundary of marked lines in diff hunk."
-  :group 'magit-faces)
-
-(defface magit-diff-conflict-heading
-  '((t :inherit magit-diff-hunk-heading))
-  "Face for conflict markers."
-  :group 'magit-faces)
-
-(defface magit-diff-added
-  '((((class color) (background light))
-     :background "#ddffdd"
-     :foreground "#22aa22")
-    (((class color) (background dark))
-     :background "#335533"
-     :foreground "#ddffdd"))
-  "Face for lines in a diff that have been added."
-  :group 'magit-faces)
-
-(defface magit-diff-removed
- '((((class color) (background light))
-    :background "#ffdddd"
-    :foreground "#aa2222")
-   (((class color) (background dark))
-    :background "#553333"
-    :foreground "#ffdddd"))
-  "Face for lines in a diff that have been removed."
-  :group 'magit-faces)
-
-(defface magit-diff-our
-  '((t :inherit magit-diff-removed))
-  "Face for lines in a diff for our side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-base
-  '((((class color) (background light))
-     :background "#ffffcc"
-     :foreground "#aaaa11")
-    (((class color) (background dark))
-     :background "#555522"
-     :foreground "#ffffcc"))
-  "Face for lines in a diff for the base side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-their
-  '((t :inherit magit-diff-added))
-  "Face for lines in a diff for their side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-context
-  '((((class color) (background light)) :foreground "grey50")
-    (((class color) (background  dark)) :foreground "grey70"))
-  "Face for lines in a diff that are unchanged."
-  :group 'magit-faces)
-
-(defface magit-diff-added-highlight
-  '((((class color) (background light))
-     :background "#cceecc"
-     :foreground "#22aa22")
-    (((class color) (background dark))
-     :background "#336633"
-     :foreground "#cceecc"))
-  "Face for lines in a diff that have been added."
-  :group 'magit-faces)
-
-(defface magit-diff-removed-highlight
-  '((((class color) (background light))
-     :background "#eecccc"
-     :foreground "#aa2222")
-    (((class color) (background dark))
-     :background "#663333"
-     :foreground "#eecccc"))
-  "Face for lines in a diff that have been removed."
-  :group 'magit-faces)
-
-(defface magit-diff-our-highlight
-  '((t :inherit magit-diff-removed-highlight))
-  "Face for lines in a diff for our side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-base-highlight
-  '((((class color) (background light))
-     :background "#eeeebb"
-     :foreground "#aaaa11")
-    (((class color) (background dark))
-     :background "#666622"
-     :foreground "#eeeebb"))
-  "Face for lines in a diff for the base side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-their-highlight
-  '((t :inherit magit-diff-added-highlight))
-  "Face for lines in a diff for their side in a conflict."
-  :group 'magit-faces)
-
-(defface magit-diff-context-highlight
-  '((((class color) (background light))
-     :background "grey95"
-     :foreground "grey50")
-    (((class color) (background dark))
-     :background "grey20"
-     :foreground "grey70"))
-  "Face for lines in a diff that have been removed."
-  :group 'magit-faces)
-
-(defface magit-diff-whitespace-warning
-  '((t :inherit trailing-whitespace))
-  "Face for highlighting whitespace errors added lines."
-  :group 'magit-faces)
-
-(defface magit-diffstat-added
-  '((((class color) (background light)) :foreground "#22aa22")
-    (((class color) (background  dark)) :foreground "#448844"))
-  "Face for plus sign in diffstat."
-  :group 'magit-faces)
-
-(defface magit-diffstat-removed
-  '((((class color) (background light)) :foreground "#aa2222")
-    (((class color) (background  dark)) :foreground "#aa4444"))
-  "Face for minus sign in diffstat."
-  :group 'magit-faces)
-
-;;; Commands
-;;;; Diff popups
-
-(defconst magit-diff-popup-common-keywords
-  '(:variable magit-diff-arguments
-              :man-page "git-diff"))
-
-(defconst magit-diff-popup-common-options
-  '((?f "Limit to files" "-- " magit-read-files)
-    (?u "Context lines"  "-U")
-    (?m "Detect renames" "-M")
-    (?c "Detect copies"  "-C")
-    (?a "Diff algorithm" "--diff-algorithm=" magit-diff-select-algorithm)
-    (?i "Ignore submodules" "--ignore-submodules="
-        magit-diff-select-ignore-submodules)))
-
-(defun magit-diff-select-ignore-submodules (&rest _ignored)
-  (magit-read-char-case "Ignore submodules " t
-    (?u "[u]ntracked" "untracked")
-    (?d "[d]irty"     "dirty")
-    (?a "[a]ll"       "all")))
-
-(defconst magit-diff-popup-common-switches
-  '((?f "Show surrounding functions"     "--function-context")
-    (?b "Ignore whitespace changes"      "--ignore-space-change")
-    (?w "Ignore all whitespace"          "--ignore-all-space")
-    (?x "Disallow external diff drivers" "--no-ext-diff")))
-
-(defvar magit-diff-popup
-  `(,@magit-diff-popup-common-keywords
-    :options  ,magit-diff-popup-common-options
-    :switches (,@magit-diff-popup-common-switches
-               (?s "Show stats" "--stat"))
-    :actions  ((?d "Dwim"          magit-diff-dwim)
-               (?u "Diff unstaged" magit-diff-unstaged)
-               (?c "Show commit"   magit-show-commit)
-               (?r "Diff range"    magit-diff)
-               (?s "Diff staged"   magit-diff-staged)
-               (?t "Show stash"    magit-stash-show)
-               (?p "Diff paths"    magit-diff-paths)
-               (?w "Diff worktree" magit-diff-working-tree))
-    :default-action magit-diff-dwim
-    :max-action-columns 3))
-
-(defvar magit-diff-refresh-popup
-  `(,@magit-diff-popup-common-keywords
-    :options  ,magit-diff-popup-common-options
-    :switches ,magit-diff-popup-common-switches
-    :actions  ((?g "Refresh"                magit-diff-refresh)
-               (?t "Toggle hunk refinement" magit-diff-toggle-refine-hunk)
-               (?s "Set defaults"           magit-diff-set-default-arguments)
-               (?F "Toggle file filter"     magit-diff-toggle-file-filter)
-               (?w "Save defaults"          magit-diff-save-default-arguments))
-    :max-action-columns 2))
-
-(defvar magit-diff-mode-refresh-popup
-  `(,@magit-diff-popup-common-keywords
-    :options  ,magit-diff-popup-common-options
-    :switches (,@magit-diff-popup-common-switches
-               (?s "Show stats" "--stat"))
-    :actions  ((?g "Refresh"                magit-diff-refresh)
-               (?t "Toggle hunk refinement" magit-diff-toggle-refine-hunk)
-               (?s "Set defaults"           magit-diff-set-default-arguments)
-               (?r "Switch range type"      magit-diff-switch-range-type)
-               (?w "Save defaults"          magit-diff-save-default-arguments)
-               (?f "Flip revisions"         magit-diff-flip-revs) nil
-               (?F "Toggle file filter"     magit-diff-toggle-file-filter))
-    :max-action-columns 2))
-
-(defvar magit-revision-mode-refresh-popup
-  `(,@magit-diff-popup-common-keywords
-    :switches ((?f "Show surrounding functions"     "--function-context")
-               (?b "Ignore whitespace changes"      "--ignore-space-change")
-               (?w "Ignore all whitespace"          "--ignore-all-space")
-               (?x "Disallow external diff drivers" "--no-ext-diff")
-               (?s "Show stats"                     "--stat"))
-    :actions  ((?g "Refresh"                magit-diff-refresh)
-               (?t "Toggle hunk refinement" magit-diff-toggle-refine-hunk)
-               (?s "Set defaults"           magit-diff-set-default-arguments)
-               (?F "Toggle file filter"     magit-diff-toggle-file-filter)
-               (?w "Save defaults"          magit-diff-save-default-arguments))
-    :max-action-columns 2))
-
-(magit-define-popup-keys-deferred 'magit-diff-popup)
-(magit-define-popup-keys-deferred 'magit-diff-refresh-popup)
-(magit-define-popup-keys-deferred 'magit-diff-mode-refresh-popup)
-(magit-define-popup-keys-deferred 'magit-revision-mode-refresh-popup)
-
-(defvar magit-diff-section-file-args nil)
-(put 'magit-diff-section-file-args 'permanent-local t)
-(put 'magit-diff-section-file-args 'safe-local-variable
-     (lambda (val)
-       (and (listp val)
-            (-all-p #'stringp val))))
-
-(defun magit-diff-get-buffer-args ()
-  (cond ((and magit-use-sticky-arguments
-              (derived-mode-p 'magit-diff-mode))
-         (list (nth 2 magit-refresh-args)
-               (nth 3 magit-refresh-args)))
-        ((and (eq magit-use-sticky-arguments t)
-              (--when-let (magit-mode-get-buffer 'magit-diff-mode)
-                (with-current-buffer it
-                  (list (nth 2 magit-refresh-args)
-                        (nth 3 magit-refresh-args))))))
-        (t
-         (list (default-value 'magit-diff-arguments) nil))))
-
-(defun magit-diff-arguments (&optional refresh)
-  (cond ((memq magit-current-popup '(magit-diff-popup magit-diff-refresh-popup))
-         (magit-popup-export-file-args magit-current-popup-args))
-        ((and refresh (not (derived-mode-p 'magit-diff-mode)))
-         (list magit-diff-section-arguments
-               magit-diff-section-file-args))
-        (t
-         (magit-diff-get-buffer-args))))
-
-;;;###autoload
-(defun magit-diff-popup (arg)
-  "Popup console for diff commands."
-  (interactive "P")
-  (let ((magit-diff-arguments
-         ;; We cannot possibly know what suffix command the user is
-         ;; about to invoke, so we also don't know from which buffer
-         ;; we should get the current values.  However it is much
-         ;; more likely that we will end up updating the diff buffer,
-         ;; and we therefore use the value from that buffer.
-         (apply #'magit-popup-import-file-args (magit-diff-get-buffer-args))))
-    (magit-invoke-popup 'magit-diff-popup nil arg)))
-
-;;;###autoload
-(defun magit-diff-buffer-file-popup ()
-  "Popup console for diff commands.
-
-This is a variant of `magit-diff-popup' which shows the same popup
-but which limits the diff to the file being visited in the current
-buffer."
-  (interactive)
-  (if-let ((file (magit-file-relative-name)))
-      (let ((magit-diff-arguments
-             (magit-popup-import-file-args
-              (if-let ((buffer (magit-mode-get-buffer 'magit-diff-mode)))
-                  (with-current-buffer buffer
-                    (nth 3 magit-refresh-args))
-                (default-value 'magit-diff-arguments))
-              (list file))))
-        (magit-invoke-popup 'magit-diff-popup nil nil))
-    (user-error "Buffer isn't visiting a file")))
-
-(defun magit-diff-refresh-popup (arg)
-  "Popup console for changing diff arguments in the current buffer."
-  (interactive "P")
-  (let ((magit-diff-refresh-popup
-         (pcase major-mode
-           (`magit-revision-mode magit-revision-mode-refresh-popup)
-           (`magit-diff-mode     magit-diff-mode-refresh-popup)
-           (_                    magit-diff-refresh-popup)))
-        (magit-diff-arguments
-         (if (derived-mode-p 'magit-diff-mode)
-             (magit-popup-import-file-args (nth 2 magit-refresh-args)
-                                           (nth 3 magit-refresh-args))
-           (magit-popup-import-file-args magit-diff-section-arguments
-                                         magit-diff-section-file-args))))
-    (magit-invoke-popup 'magit-diff-refresh-popup nil arg)))
-
-(defun magit-diff-select-algorithm (&rest _ignore)
-  (magit-read-char-case nil t
-    (?d "[d]efault"   "default")
-    (?m "[m]inimal"   "minimal")
-    (?p "[p]atience"  "patience")
-    (?h "[h]istogram" "histogram")))
-
-;;;; Diff commands
-
-;;;###autoload
-(defun magit-diff-dwim (&optional args files)
-  "Show changes for the thing at point."
-  (interactive (magit-diff-arguments))
-  (pcase (magit-diff--dwim)
-    (`unmerged (magit-diff-unmerged args files))
-    (`unstaged (magit-diff-unstaged args files))
-    (`staged
-     (let ((file (magit-file-at-point)))
-       (if (and file (equal (cddr (car (magit-file-status file))) '(?D ?U)))
-           ;; File was deleted by us and modified by them.  Show the latter.
-           (magit-diff-unmerged args (list file))
-         (magit-diff-staged nil args files))))
-    (`(commit . ,value)
-     (magit-diff (format "%s^..%s" value value) args files))
-    (`(stash  . ,value) (magit-stash-show value args))
-    ((and range (pred stringp))
-     (magit-diff range args files))
-    (_
-     (call-interactively #'magit-diff))))
-
-(defun magit-diff--dwim ()
-  "Return information for performing DWIM diff.
-
-The information can be in three forms:
-1. TYPE
-   A symbol describing a type of diff where no additional information
-   is needed to generate the diff.  Currently, this includes `staged',
-   `unstaged' and `unmerged'.
-2. (TYPE . VALUE)
-   Like #1 but the diff requires additional information, which is
-   given by VALUE.  Currently, this includes `commit' and `stash',
-   where VALUE is the given commit or stash, respectively.
-3. RANGE
-   A string indicating a diff range.
-
-If no DWIM context is found, nil is returned."
-  (cond
-   ((--when-let (magit-region-values '(commit branch) t)
-      (deactivate-mark)
-      (concat (car (last it)) ".." (car it))))
-   (magit-buffer-refname
-    (cons 'commit magit-buffer-refname))
-   ((derived-mode-p 'magit-stash-mode)
-    (cons 'commit
-          (magit-section-case
-            (commit (oref it value))
-            (file (-> it
-                      (oref parent)
-                      (oref value)))
-            (hunk (-> it
-                      (oref parent)
-                      (oref parent)
-                      (oref value))))))
-   ((derived-mode-p 'magit-revision-mode)
-    (cons 'commit (car magit-refresh-args)))
-   ((derived-mode-p 'magit-diff-mode)
-    (nth 0 magit-refresh-args))
-   (t
-    (magit-section-case
-      ([* unstaged] 'unstaged)
-      ([* staged] 'staged)
-      (unmerged 'unmerged)
-      (unpushed (oref it value))
-      (unpulled (oref it value))
-      (branch (let ((current (magit-get-current-branch))
-                    (atpoint (oref it value)))
-                (if (equal atpoint current)
-                    (--if-let (magit-get-upstream-branch)
-                        (format "%s...%s" it current)
-                      (if (magit-anything-modified-p)
-                          current
-                        (cons 'commit current)))
-                  (format "%s...%s"
-                          (or current "HEAD")
-                          atpoint))))
-      (commit (cons 'commit (oref it value)))
-      (stash (cons 'stash (oref it value)))))))
-
-(defun magit-diff-read-range-or-commit (prompt &optional secondary-default mbase)
-  "Read range or revision with special diff range treatment.
-If MBASE is non-nil, prompt for which rev to place at the end of
-a \"revA...revB\" range.  Otherwise, always construct
-\"revA..revB\" range."
-  (--if-let (magit-region-values '(commit branch) t)
-      (let ((revA (car (last it)))
-            (revB (car it)))
-        (deactivate-mark)
-        (if mbase
-            (let ((base (magit-git-string "merge-base" revA revB)))
-              (cond
-               ((string= (magit-rev-parse revA) base)
-                (format "%s..%s" revA revB))
-               ((string= (magit-rev-parse revB) base)
-                (format "%s..%s" revB revA))
-               (t
-                (let ((main (magit-completing-read "View changes along"
-                                                   (list revA revB)
-                                                   nil t nil nil revB)))
-                  (format "%s...%s"
-                          (if (string= main revB) revA revB) main)))))
-          (format "%s..%s" revA revB)))
-    (magit-read-range prompt
-                      (or (pcase (magit-diff--dwim)
-                            (`(commit . ,value)
-                             (format "%s^..%s" value value))
-                            ((and range (pred stringp))
-                             range))
-                          secondary-default
-                          (magit-get-current-branch)))))
-
-(defun magit-diff-setup (rev-or-range const args files)
-  (require 'magit)
-  (magit-mode-setup #'magit-diff-mode rev-or-range const args files))
-
-;;;###autoload
-(defun magit-diff (rev-or-range &optional args files)
-  "Show differences between two commits.
-
-REV-OR-RANGE should be a range or a single revision.  If it is a
-revision, then show changes in the working tree relative to that
-revision.  If it is a range, but one side is omitted, then show
-changes relative to `HEAD'.
-
-If the region is active, use the revisions on the first and last
-line of the region as the two sides of the range.  With a prefix
-argument, instead of diffing the revisions, choose a revision to
-view changes along, starting at the common ancestor of both
-revisions (i.e., use a \"...\" range)."
-  (interactive (cons (magit-diff-read-range-or-commit "Diff for range"
-                                                      nil current-prefix-arg)
-                     (magit-diff-arguments)))
-  (magit-diff-setup rev-or-range nil args files))
-
-;;;###autoload
-(defun magit-diff-working-tree (&optional rev args files)
-  "Show changes between the current working tree and the `HEAD' commit.
-With a prefix argument show changes between the working tree and
-a commit read from the minibuffer."
-  (interactive
-   (cons (and current-prefix-arg
-              (magit-read-branch-or-commit "Diff working tree and commit"))
-         (magit-diff-arguments)))
-  (magit-diff-setup (or rev "HEAD") nil args files))
-
-;;;###autoload
-(defun magit-diff-staged (&optional rev args files)
-  "Show changes between the index and the `HEAD' commit.
-With a prefix argument show changes between the index and
-a commit read from the minibuffer."
-  (interactive
-   (cons (and current-prefix-arg
-              (magit-read-branch-or-commit "Diff index and commit"))
-         (magit-diff-arguments)))
-  (magit-diff-setup rev (list "--cached") args files))
-
-;;;###autoload
-(defun magit-diff-unstaged (&optional args files)
-  "Show changes between the working tree and the index."
-  (interactive (magit-diff-arguments))
-  (magit-diff-setup nil nil args files))
-
-;;;###autoload
-(defun magit-diff-unmerged (&optional args files)
-  "Show changes that are being merged."
-  (interactive (magit-diff-arguments))
-  (unless (magit-merge-in-progress-p)
-    (user-error "No merge is in progress"))
-  (magit-diff-setup (magit--merge-range) nil args files))
-
-;;;###autoload
-(defun magit-diff-while-committing (&optional args)
-  "While committing, show the changes that are about to be committed.
-While amending, invoking the command again toggles between
-showing just the new changes or all the changes that will
-be committed."
-  (interactive (list (car (magit-diff-arguments))))
-  (unless (magit-commit-message-buffer)
-    (user-error "No commit in progress"))
-  (let ((magit-display-buffer-noselect t)
-        (diff-buf (magit-mode-get-buffer 'magit-diff-mode)))
-    (if (and diff-buf
-             (get-buffer-window diff-buf))
-        (with-current-buffer diff-buf
-          (pcase-let ((`(,rev ,arg . ,_) magit-refresh-args))
-            (cond ((and (equal rev "HEAD^")
-                        (equal arg '("--cached")))
-                   (magit-diff-staged nil args))
-                  ((and (equal rev nil)
-                        (equal arg '("--cached")))
-                   (magit-diff-while-amending args))
-                  ((magit-anything-staged-p)
-                   (magit-diff-staged nil args))
-                  (t
-                   (magit-diff-while-amending args)))))
-      (if (magit-anything-staged-p)
-          (magit-diff-staged nil args)
-        (magit-diff-while-amending args)))))
-
-(define-key git-commit-mode-map
-  (kbd "C-c C-d") 'magit-diff-while-committing)
-
-(defun magit-diff-while-amending (&optional args)
-  (magit-diff-setup "HEAD^" (list "--cached") args nil))
-
-;;;###autoload
-(defun magit-diff-buffer-file ()
-  "Show diff for the blob or file visited in the current buffer."
-  (interactive)
-  (require 'magit)
-  (if-let ((file (magit-file-relative-name)))
-      (magit-mode-setup-internal #'magit-diff-mode
-                                 (list (or magit-buffer-refname
-                                           (magit-get-current-branch)
-                                           "HEAD")
-                                       nil
-                                       (cadr (magit-diff-arguments))
-                                       (list file))
-                                 magit-diff-buffer-file-locked)
-    (user-error "Buffer isn't visiting a file")))
-
-;;;###autoload
-(defun magit-diff-paths (a b)
-  "Show changes between any two files on disk."
-  (interactive (list (read-file-name "First file: " nil nil t)
-                     (read-file-name "Second file: " nil nil t)))
-  (magit-diff-setup nil (list "--no-index")
-                    nil (list (magit-convert-filename-for-git
-                               (expand-file-name a))
-                              (magit-convert-filename-for-git
-                               (expand-file-name b)))))
-
-(defvar-local magit-buffer-revision-hash nil)
-
-(defun magit-show-commit--arguments ()
-  (pcase-let ((`(,args ,diff-files) (magit-diff-arguments)))
-    (list args (if (derived-mode-p 'magit-log-mode)
-                   (and (not (member "--follow" (nth 1 magit-refresh-args)))
-                        (nth 2 magit-refresh-args))
-                 diff-files))))
-
-;;;###autoload
-(defun magit-show-commit (rev &optional args files module)
-  "Visit the revision at point in another buffer.
-If there is no revision at point or with a prefix argument prompt
-for a revision."
-  (interactive
-   (pcase-let* ((mcommit (magit-section-when module-commit))
-                (atpoint (or (and (bound-and-true-p magit-blame-mode)
-                                  (oref (magit-current-blame-chunk) orig-rev))
-                             mcommit
-                             (magit-branch-or-commit-at-point)))
-                (`(,args ,files) (magit-show-commit--arguments)))
-     (list (or (and (not current-prefix-arg) atpoint)
-               (magit-read-branch-or-commit "Show commit" atpoint))
-           args
-           files
-           (and mcommit
-                (magit-section-parent-value (magit-current-section))))))
-  (require 'magit)
-  (magit-with-toplevel
-    (when module
-      (setq default-directory
-            (expand-file-name (file-name-as-directory module))))
-    (unless (magit-rev-verify-commit rev)
-      (user-error "%s is not a commit" rev))
-    (magit-mode-setup #'magit-revision-mode rev nil args files)))
-
-;;;; Setting commands
-
-(defun magit-diff-refresh (args files)
-  "Set the local diff arguments for the current buffer."
-  (interactive (magit-diff-arguments t))
-  (cond ((derived-mode-p 'magit-diff-mode)
-         (setcdr (cdr magit-refresh-args) (list args files)))
-        (t
-         (setq-local magit-diff-section-arguments args)
-         (setq-local magit-diff-section-file-args files)))
-  (magit-refresh))
-
-(defun magit-diff-set-default-arguments (args files)
-  "Set the global diff arguments for the current buffer."
-  (interactive (magit-diff-arguments t))
-  (cond ((derived-mode-p 'magit-diff-mode)
-         (customize-set-variable 'magit-diff-arguments args)
-         (setcdr (cdr magit-refresh-args) (list args files)))
-        (t
-         (customize-set-variable 'magit-diff-section-arguments args)
-         (kill-local-variable 'magit-diff-section-arguments)
-         (kill-local-variable 'magit-diff-section-file-args)))
-  (magit-refresh))
-
-(defun magit-diff-save-default-arguments (args files)
-  "Set and save the global diff arguments for the current buffer."
-  (interactive (magit-diff-arguments t))
-  (cond ((derived-mode-p 'magit-diff-mode)
-         (customize-save-variable 'magit-diff-arguments args)
-         (setcdr (cdr magit-refresh-args) (list args files)))
-        (t
-         (customize-save-variable 'magit-diff-section-arguments args)
-         (kill-local-variable 'magit-diff-section-arguments)
-         (kill-local-variable 'magit-diff-section-file-args)))
-  (magit-refresh))
-
-(defun magit-diff-switch-range-type ()
-  "Convert diff range type.
-Change \"revA..revB\" to \"revB...revA\", or vice versa."
-  (interactive)
-  (let ((range (car magit-refresh-args)))
-    (if (and range
-             (derived-mode-p 'magit-diff-mode)
-             (string-match magit-range-re range))
-        (progn
-          (setcar magit-refresh-args
-                  (concat (match-string 1 range)
-                          (if (string= (match-string 2 range) "..")
-                              "..."
-                            "..")
-                          (match-string 3 range)))
-          (magit-refresh))
-      (user-error "No range to change"))))
-
-(defun magit-diff-flip-revs ()
-  "Swap revisions in diff range.
-Change \"revA..revB\" to \"revB..revA\"."
-  (interactive)
-  (let ((range (car magit-refresh-args)))
-    (if (and range
-             (derived-mode-p 'magit-diff-mode)
-             (string-match magit-range-re range))
-        (progn
-          (setcar magit-refresh-args
-                  (concat (match-string 3 range)
-                          (match-string 2 range)
-                          (match-string 1 range)))
-          (magit-refresh))
-      (user-error "No range to swap"))))
-
-(defvar-local magit-diff--last-file-args nil)
-(defun magit-diff--toggle-file-args (files)
-  (cond (files
-         (setq magit-diff--last-file-args files)
-               nil)
-        (magit-diff--last-file-args)
-        (t
-         (user-error "No diff file filter to toggle"))))
-
-(defun magit-diff-toggle-file-filter ()
-  "Toggle the file restriction of the current buffer's diffs.
-If the current buffer's mode is derived from `magit-log-mode',
-toggle the file restriction in the repository's revision buffer
-instead."
-  (interactive)
-  (--if-let (and (derived-mode-p 'magit-log-mode)
-                 (magit-mode-get-buffer 'magit-revision-mode))
-      (with-current-buffer it
-        (setf (nth 3 magit-refresh-args)
-              (magit-diff--toggle-file-args (nth 3 magit-refresh-args)))
-        (magit-refresh))
-    (if (derived-mode-p 'magit-diff-mode)
-        (setf (nth 3 magit-refresh-args)
-              (magit-diff--toggle-file-args (nth 3 magit-refresh-args)))
-      (setq-local magit-diff-section-file-args
-                  (magit-diff--toggle-file-args magit-diff-section-file-args)))
-    (magit-refresh)))
-
-(defun magit-diff-less-context (&optional count)
-  "Decrease the context for diff hunks by COUNT lines."
-  (interactive "p")
-  (magit-diff-set-context `(lambda (cur) (max 0 (- (or cur 0) ,count)))))
-
-(defun magit-diff-more-context (&optional count)
-  "Increase the context for diff hunks by COUNT lines."
-  (interactive "p")
-  (magit-diff-set-context `(lambda (cur) (+ (or cur 0) ,count))))
-
-(defun magit-diff-default-context ()
-  "Reset context for diff hunks to the default height."
-  (interactive)
-  (magit-diff-set-context #'ignore))
-
-(defun magit-diff-set-context (fn)
-  (let* ((def (--if-let (magit-get "diff.context") (string-to-number it) 3))
-         (val (car (magit-diff-arguments t)))
-         (arg (--first (string-match "^-U\\([0-9]+\\)?$" it) val))
-         (num (--if-let (and arg (match-string 1 arg)) (string-to-number it) def))
-         (val (delete arg val))
-         (num (funcall fn num))
-         (arg (and num (not (= num def)) (format "-U%i" num)))
-         (val (if arg (cons arg val) val)))
-    (if (derived-mode-p 'magit-diff-mode)
-        (setcar (cddr magit-refresh-args) val)
-      (setq magit-diff-section-arguments val)))
-  (magit-refresh))
-
-(defun magit-diff-context-p ()
-  (--if-let (--first (string-match "^-U\\([0-9]+\\)$" it)
-                     (car (magit-diff-arguments t)))
-      (not (equal "-U0" it))
-    t))
-
-(defun magit-diff-toggle-refine-hunk (&optional style)
-  "Turn diff-hunk refining on or off.
-
-If hunk refining is currently on, then hunk refining is turned off.
-If hunk refining is off, then hunk refining is turned on, in
-`selected' mode (only the currently selected hunk is refined).
-
-With a prefix argument, the \"third choice\" is used instead:
-If hunk refining is currently on, then refining is kept on, but
-the refining mode (`selected' or `all') is switched.
-If hunk refining is off, then hunk refining is turned on, in
-`all' mode (all hunks refined).
-
-Customize variable `magit-diff-refine-hunk' to change the default mode."
-  (interactive "P")
-  (setq-local magit-diff-refine-hunk
-              (if style
-                  (if (eq magit-diff-refine-hunk 'all) t 'all)
-                (not magit-diff-refine-hunk)))
-  (magit-diff-update-hunk-refinement))
-
-;;;; Visit commands
-
-(defun magit-diff-visit-file
-    (file &optional other-window force-worktree display-fn)
-  "From a diff, visit the corresponding file at the appropriate position.
-
-If the diff shows changes in the worktree, the index, or `HEAD',
-then visit the actual file.  Otherwise, when the diff is about an
-older commit or a range, then visit the appropriate blob.
-
-If point is on a removed line, then visit the blob for the first
-parent of the commit which removed that line, i.e. the last
-commit where that line still existed.  Otherwise visit the blob
-for the commit whose changes are being shown.
-
-Interactively, when the file or blob to be displayed is already
-being displayed in another window of the same frame, then just
-select that window and adjust point.  Otherwise, or with a prefix
-argument, display the buffer in another window.  The meaning of
-the prefix argument can be inverted or further modified using the
-option `magit-display-file-buffer-function'.
-
-Non-interactively the optional OTHER-WINDOW argument is taken
-literally.  DISPLAY-FN can be used to specify the display
-function explicitly, in which case OTHER-WINDOW is ignored.
-
-The optional FORCE-WORKTREE means to force visiting the worktree
-version of the file.  To do this interactively use the command
-`magit-diff-visit-file-worktree' instead."
-  (interactive (list (--if-let (magit-file-at-point)
-                         (expand-file-name it)
-                       (user-error "No file at point"))
-                     current-prefix-arg))
-  (if (magit-file-accessible-directory-p file)
-      (magit-diff-visit-directory file other-window)
-    (let* ((hunk (magit-diff-visit--hunk))
-           (last (and magit-diff-visit-previous-blob
-                      (not force-worktree)
-                      (magit-section-match 'hunk)
-                      (save-excursion
-                        (goto-char (line-beginning-position))
-                        (looking-at "-"))))
-           (line (and hunk (magit-diff-hunk-line   hunk)))
-           (col  (and hunk (magit-diff-hunk-column hunk last)))
-           (rev  (if last
-                     (magit-diff-visit--range-beginning)
-                   (magit-diff-visit--range-end)))
-           (buf  (if (and (not force-worktree)
-                          (stringp rev))
-                     (magit-find-file-noselect rev file)
-                   (or (get-file-buffer file)
-                       (find-file-noselect file)))))
-      (cond ((called-interactively-p 'any)
-             (magit-display-file-buffer buf))
-            (display-fn
-             (funcall display-fn buf))
-            ((or other-window (get-buffer-window buf))
-             (switch-to-buffer-other-window buf))
-            (t
-             (pop-to-buffer buf)))
-      (with-selected-window
-          (or (get-buffer-window buf 'visible)
-              (error "File buffer is not visible"))
-        (when line
-          (setq line
-                (cond ((eq rev 'staged)
-                       (apply 'magit-diff-visit--offset file nil line))
-                      ((and force-worktree
-                            (stringp rev))
-                       (apply 'magit-diff-visit--offset file rev line))
-                      (t
-                       (apply '+ line))))
-          (let ((pos (save-restriction
-                       (widen)
-                       (goto-char (point-min))
-                       (forward-line (1- line))
-                       (move-to-column col)
-                       (point))))
-            (unless (<= (point-min) pos (point-max))
-              (widen)
-              (goto-char pos))))
-        (when (magit-anything-unmerged-p file)
-          (smerge-start-session))
-        (run-hooks 'magit-diff-visit-file-hook)))))
-
-(defun magit-diff-visit-file-other-window (file)
-  "From a diff, visit the corresponding file at the appropriate position.
-The file is shown in another window.
-
-If the diff shows changes in the worktree, the index, or `HEAD',
-then visit the actual file.  Otherwise, when the diff is about an
-older commit or a range, then visit the appropriate blob.
-
-If point is on a removed line, then visit the blob for the first
-parent of the commit which removed that line, i.e. the last
-commit where that line still existed.  Otherwise visit the blob
-for the commit whose changes are being shown."
-  (interactive (list (--if-let (magit-file-at-point)
-                         (expand-file-name it)
-                       (user-error "No file at point"))))
-  (magit-diff-visit-file file t))
-
-(defvar magit-display-file-buffer-function
-  'magit-display-file-buffer-traditional
-  "The function used by `magit-diff-visit-file' to display blob buffers.
-
-Other commands such as `magit-find-file' do not use this
-function.  Instead they use high-level functions to select the
-window to be used to display the buffer.  This variable and the
-related functions are an experimental feature and should be
-treated as such.")
-
-(defun magit-display-file-buffer (buffer)
-  (funcall magit-display-file-buffer-function buffer))
-
-(defun magit-display-file-buffer-traditional (buffer)
-  "Display BUFFER in the current window.
-With a prefix argument display it in another window.
-Option `magit-display-file-buffer-function' controls
-whether `magit-diff-visit-file' uses this function."
-  (if (or current-prefix-arg (get-buffer-window buffer))
-      (pop-to-buffer buffer)
-    (switch-to-buffer buffer)))
-
-(defun magit-display-file-buffer-other-window (buffer)
-  "Display BUFFER in another window.
-With a prefix argument display it in the current window.
-Option `magit-display-file-buffer-function' controls
-whether `magit-diff-visit-file' uses this function."
-  (if (or current-prefix-arg (get-buffer-window buffer))
-      (switch-to-buffer buffer)
-    (pop-to-buffer buffer)))
-
-(defun magit-diff-visit-file-worktree (file &optional other-window)
-  "From a diff, visit the corresponding file at the appropriate position.
-
-When the file is already being displayed in another window of the
-same frame, then just select that window and adjust point.  With
-a prefix argument also display in another window.
-
-The actual file in the worktree is visited. The positions in the
-hunk headers get less useful the \"older\" the changes are, and
-as a result, jumping to the appropriate position gets less
-reliable.
-
-Also see `magit-diff-visit-file' which visits the respective
-blob, unless the diff shows changes in the worktree, the index,
-or `HEAD'."
-  (interactive (list (or (magit-file-at-point)
-                         (user-error "No file at point"))
-                     current-prefix-arg))
-  (magit-diff-visit-file file other-window t))
-
-(defun magit-diff-visit--range-end ()
-  (let ((rev (magit-diff--dwim)))
-    (if (symbolp rev)
-        rev
-      (setq rev (if (consp rev)
-                    (cdr rev)
-                  (cdr (magit-split-range rev))))
-      (if (magit-rev-head-p rev)
-          'unstaged
-        rev))))
-
-(defun magit-diff-visit--range-beginning ()
-  (let ((rev (magit-diff--dwim)))
-    (cond ((consp rev)
-           (concat (cdr rev) "^"))
-          ((stringp rev)
-           (car (magit-split-range rev)))
-          (t
-           rev))))
-
-(defun magit-diff-visit--hunk ()
-  (when-let ((scope (magit-diff-scope)))
-    (let ((section (magit-current-section)))
-      (cl-case scope
-        ((file files)
-         (setq section (car (oref section children))))
-        (list
-         (setq section (car (oref section children)))
-         (when section
-           (setq section (car (oref section children))))))
-      (and
-       ;; Unmerged files appear in the list of staged changes
-       ;; but unlike in the list of unstaged changes no diffs
-       ;; are shown here.  In that case `section' is nil.
-       section
-       ;; Currently the `hunk' type is also abused for file
-       ;; mode changes, which we are not interested in here.
-       ;; Such sections have no value.
-       (oref section value)
-       section))))
-
-(defun magit-diff-visit--offset (file rev hunk-start line-offset)
-  (let ((offset 0))
-    (with-temp-buffer
-      (save-excursion
-        (magit-with-toplevel
-          (magit-git-insert "diff" rev "--" file)))
-      (catch 'found
-        (while (re-search-forward
-                "^@@ -\\([0-9]+\\),\\([0-9]+\\) \\+\\([0-9]+\\),\\([0-9]+\\) @@"
-                nil t)
-          (let* ((abeg (string-to-number (match-string 1)))
-                 (alen (string-to-number (match-string 2)))
-                 (bbeg (string-to-number (match-string 3)))
-                 (blen (string-to-number (match-string 4)))
-                 (aend (+ abeg alen))
-                 (bend (+ bbeg blen))
-                 (hend (+ hunk-start line-offset)))
-            (if (<= abeg hunk-start)
-                (if (or (>= aend hend)
-                        (>= bend hend))
-                    (let ((line 0))
-                      (while (<= line alen)
-                        (forward-line 1)
-                        (cl-incf line)
-                        (cond ((looking-at "^\\+") (cl-incf offset))
-                              ((looking-at "^-")   (cl-decf offset)))))
-                  (cl-incf offset (- blen alen)))
-              (throw 'found nil))))))
-    (+ hunk-start line-offset offset)))
-
-(defun magit-diff-hunk-line (section)
-  (let* ((value  (oref section value))
-         (prefix (- (length value) 2))
-         (cpos   (marker-position (oref section content)))
-         (stop   (line-number-at-pos))
-         (cstart (save-excursion (goto-char cpos)
-                                 (line-number-at-pos)))
-         (prior  (and (= (length value) 3)
-                      (save-excursion (goto-char (line-beginning-position))
-                                      (looking-at "-"))))
-         (offset 0)
-         (line   (if prior
-                     (cadr value)
-                   (car (last value)))))
-    (string-match (format "^%s\\([0-9]+\\)" (if prior "-" "\\+")) line)
-    (setq line (string-to-number (match-string 1 line)))
-    (when (> cstart stop)
-      (save-excursion
-        (goto-char cpos)
-        (re-search-forward "^[-+]")
-        (setq stop (line-number-at-pos))))
-    (save-excursion
-      (goto-char cpos)
-      (while (< (line-number-at-pos) stop)
-        (unless (string-match-p
-                 (if prior "\\+" "-")
-                 (buffer-substring (point) (+ (point) prefix)))
-          (cl-incf offset))
-        (forward-line)))
-    (list line offset)))
-
-(defun magit-diff-hunk-column (section visit-beginning)
-  (if (or (< (point)
-             (oref section content))
-          (and (not visit-beginning)
-               (save-excursion (beginning-of-line) (looking-at-p "-"))))
-      0
-    (max 0 (- (+ (current-column) 2)
-              (length (oref section value))))))
-
-(defun magit-diff-visit-directory (directory &optional other-window)
-  (if (equal (magit-toplevel directory)
-             (magit-toplevel))
-      (dired-jump other-window (concat directory "/."))
-    (let ((display-buffer-overriding-action
-           (if other-window
-               '(nil (inhibit-same-window t))
-             '(display-buffer-same-window))))
-      (magit-status-internal directory))))
-
-;;;; Scroll commands
-
-(defun magit-diff-show-or-scroll-up ()
-  "Update the commit or diff buffer for the thing at point.
-
-Either show the commit or stash at point in the appropriate
-buffer, or if that buffer is already being displayed in the
-current frame and contains information about that commit or
-stash, then instead scroll the buffer up.  If there is no
-commit or stash at point, then prompt for a commit."
-  (interactive)
-  (magit-diff-show-or-scroll 'scroll-up))
-
-(defun magit-diff-show-or-scroll-down ()
-  "Update the commit or diff buffer for the thing at point.
-
-Either show the commit or stash at point in the appropriate
-buffer, or if that buffer is already being displayed in the
-current frame and contains information about that commit or
-stash, then instead scroll the buffer down.  If there is no
-commit or stash at point, then prompt for a commit."
-  (interactive)
-  (magit-diff-show-or-scroll 'scroll-down))
-
-(defun magit-diff-show-or-scroll (fn)
-  (let (rev cmd buf win)
-    (cond
-     (magit-blame-mode
-      (setq rev (oref (magit-current-blame-chunk) orig-rev))
-      (setq cmd 'magit-show-commit)
-      (setq buf (magit-mode-get-buffer 'magit-revision-mode)))
-     ((derived-mode-p 'git-rebase-mode)
-      (save-excursion
-        (goto-char (line-beginning-position))
-        (--if-let (and git-rebase-line
-                       (looking-at git-rebase-line)
-                       (match-string 2))
-            (progn (setq rev it)
-                   (setq cmd 'magit-show-commit)
-                   (setq buf (magit-mode-get-buffer 'magit-revision-mode)))
-          (user-error "No commit on this line"))))
-     (t
-      (magit-section-case
-        (branch
-         (setq rev (magit-ref-maybe-qualify (oref it value)))
-         (setq cmd 'magit-show-commit)
-         (setq buf (magit-mode-get-buffer 'magit-revision-mode)))
-        (commit
-         (setq rev (oref it value))
-         (setq cmd 'magit-show-commit)
-         (setq buf (magit-mode-get-buffer 'magit-revision-mode)))
-        (stash
-         (setq rev (oref it value))
-         (setq cmd 'magit-stash-show)
-         (setq buf (magit-mode-get-buffer 'magit-stash-mode))))))
-    (if rev
-        (if (and buf
-                 (setq win (get-buffer-window buf))
-                 (with-current-buffer buf
-                   (and (equal rev (car magit-refresh-args))
-                        (equal (magit-rev-parse rev)
-                               magit-buffer-revision-hash))))
-            (with-selected-window win
-              (condition-case nil
-                  (funcall fn)
-                (error
-                 (goto-char (pcase fn
-                              (`scroll-up   (point-min))
-                              (`scroll-down (point-max)))))))
-          (let ((magit-display-buffer-noselect t))
-            (if (eq cmd 'magit-show-commit)
-                (apply #'magit-show-commit rev (magit-show-commit--arguments))
-              (funcall cmd rev))))
-      (call-interactively #'magit-show-commit))))
-
-;;; Diff Mode
-
-(defvar magit-diff-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    (define-key map "\C-c\C-d" 'magit-diff-while-committing)
-    (define-key map "\C-c\C-b" 'magit-go-backward)
-    (define-key map "\C-c\C-f" 'magit-go-forward)
-    (define-key map "\s" 'scroll-up)
-    (define-key map "\d" 'scroll-down)
-    (define-key map "j" 'magit-jump-to-diffstat-or-diff)
-    (define-key map [remap write-file] 'magit-patch-save)
-    map)
-  "Keymap for `magit-diff-mode'.")
-
-(define-derived-mode magit-diff-mode magit-mode "Magit Diff"
-  "Mode for looking at a Git diff.
-
-This mode is documented in info node `(magit)Diff Buffer'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-section-toggle] to expand or hide the section at point.
-Type \\[magit-visit-thing] to visit the hunk or file at point.
-
-Staging and applying changes is documented in info node
-`(magit)Staging and Unstaging' and info node `(magit)Applying'.
-
-\\<magit-hunk-section-map>Type \
-\\[magit-apply] to apply the change at point, \
-\\[magit-stage] to stage,
-\\[magit-unstage] to unstage, \
-\\[magit-discard] to discard, or \
-\\[magit-reverse] to reverse it.
-
-\\{magit-diff-mode-map}"
-  :group 'magit-diff
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-prev-index-position-function
-        'magit-imenu--diff-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        'magit-imenu--diff-extract-index-name-function)
-  (setq-local bookmark-make-record-function
-              'magit-bookmark--diff-make-record))
-
-(defun magit-diff-refresh-buffer (rev-or-range const _args files)
-  "Refresh the current `magit-diff-mode' buffer.
-
-In such buffers the buffer-local value of `magit-refresh-args'
-has the same form as the arguments of this function.  The value
-is set in `magit-mode-setup'."
-  (magit-set-header-line-format
-   (if (member "--no-index" const)
-       (apply #'format "Differences between %s and %s" files)
-     (concat (if rev-or-range
-                 (if (string-match-p "\\(\\.\\.\\|\\^-\\)"
-                                     rev-or-range)
-                     (format "Changes in %s" rev-or-range)
-                   (format "Changes from %s to working tree" rev-or-range))
-               (if (member "--cached" const)
-                   "Staged changes"
-                 "Unstaged changes"))
-             (pcase (length files)
-               (0)
-               (1 (concat " in file " (car files)))
-               (_ (concat " in files "
-                          (mapconcat #'identity files ", ")))))))
-  (magit-insert-section (diffbuf)
-    (magit-run-section-hook 'magit-diff-sections-hook rev-or-range)))
-
-(defun magit-insert-diff (rev-or-range)
-  "Insert the diff into this `magit-diff-mode' buffer."
-  (let ((magit-git-global-arguments
-         (remove "--literal-pathspecs" magit-git-global-arguments)))
-    (magit-git-wash #'magit-diff-wash-diffs
-      "diff" rev-or-range "-p" "--no-prefix"
-      (and (member "--stat" (nth 2 magit-refresh-args)) "--numstat")
-      (nth 1 magit-refresh-args)
-      (nth 2 magit-refresh-args) "--"
-      (nth 3 magit-refresh-args))))
-
-(defvar magit-file-section-map
-  (let ((map (make-sparse-keymap)))
-    (unless (featurep 'jkl)
-      (define-key map (kbd "C-j") 'magit-diff-visit-file-worktree))
-    (define-key map [C-return] 'magit-diff-visit-file-worktree)
-    (define-key map [remap magit-visit-thing]      'magit-diff-visit-file)
-    (define-key map [remap magit-delete-thing]     'magit-discard)
-    (define-key map [remap magit-revert-no-commit] 'magit-reverse)
-    (define-key map "a" 'magit-apply)
-    (define-key map "C" 'magit-commit-add-log)
-    (define-key map "s" 'magit-stage)
-    (define-key map "u" 'magit-unstage)
-    (define-key map "&" 'magit-do-async-shell-command)
-    (define-key map "\C-c\C-t" 'magit-diff-trace-definition)
-    (define-key map "\C-c\C-e" 'magit-diff-edit-hunk-commit)
-    map)
-  "Keymap for `file' sections.")
-
-(defvar magit-hunk-section-map
-  (let ((map (make-sparse-keymap)))
-    (unless (featurep 'jkl)
-      (define-key map (kbd "C-j") 'magit-diff-visit-file-worktree))
-    (define-key map [C-return] 'magit-diff-visit-file-worktree)
-    (define-key map [remap magit-visit-thing]      'magit-diff-visit-file)
-    (define-key map [remap magit-delete-thing]     'magit-discard)
-    (define-key map [remap magit-revert-no-commit] 'magit-reverse)
-    (define-key map "a" 'magit-apply)
-    (define-key map "C" 'magit-commit-add-log)
-    (define-key map "s" 'magit-stage)
-    (define-key map "u" 'magit-unstage)
-    (define-key map "&" 'magit-do-async-shell-command)
-    (define-key map "\C-c\C-t" 'magit-diff-trace-definition)
-    (define-key map "\C-c\C-e" 'magit-diff-edit-hunk-commit)
-    map)
-  "Keymap for `hunk' sections.")
-
-(defconst magit-diff-headline-re
-  (concat "^\\(@@@?\\|diff\\|Submodule\\|"
-          "\\* Unmerged path\\|merged\\|changed in both\\|"
-          "added in remote\\|removed in remote\\)"))
-
-(defconst magit-diff-statline-re
-  (concat "^ ?"
-          "\\(.*\\)"     ; file
-          "\\( +| +\\)"  ; separator
-          "\\([0-9]+\\|Bin\\(?: +[0-9]+ -> [0-9]+ bytes\\)?$\\) ?"
-          "\\(\\+*\\)"   ; add
-          "\\(-*\\)$"))  ; del
-
-(defun magit-diff-wash-diffs (args &optional limit)
-  (when (member "--stat" args)
-    (magit-diff-wash-diffstat))
-  (when (re-search-forward magit-diff-headline-re limit t)
-    (goto-char (line-beginning-position))
-    (magit-wash-sequence (apply-partially 'magit-diff-wash-diff args))
-    (insert ?\n)))
-
-(defun magit-jump-to-diffstat-or-diff ()
-  "Jump to the diffstat or diff.
-When point is on a file inside the diffstat section, then jump
-to the respective diff section, otherwise jump to the diffstat
-section or a child thereof."
-  (interactive)
-  (--if-let (magit-get-section
-             (append (magit-section-case
-                       ([file diffstat] `((file . ,(oref it value))))
-                       (file `((file . ,(oref it value)) (diffstat)))
-                       (t '((diffstat))))
-                     (magit-section-ident magit-root-section)))
-      (magit-section-goto it)
-    (user-error "No diffstat in this buffer")))
-
-(defun magit-diff-wash-diffstat ()
-  (let (heading (beg (point)))
-    (when (re-search-forward "^ ?\\([0-9]+ +files? change[^\n]*\n\\)" nil t)
-      (setq heading (match-string 1))
-      (magit-delete-match)
-      (goto-char beg)
-      (magit-insert-section (diffstat)
-        (insert (propertize heading 'face 'magit-diff-file-heading))
-        (magit-insert-heading)
-        (let (files)
-          (while (looking-at "^[-0-9]+\t[-0-9]+\t\\(.+\\)$")
-            (push (magit-decode-git-path
-                   (let ((f (match-string 1)))
-                     (if (string-match " => " f)
-                         (substring f (match-end 0))
-                       f)))
-                  files)
-            (magit-delete-line))
-          (setq files (nreverse files))
-          (while (looking-at magit-diff-statline-re)
-            (magit-bind-match-strings (file sep cnt add del) nil
-              (magit-delete-line)
-              (when (string-match " +$" file)
-                (setq sep (concat (match-string 0 file) sep))
-                (setq file (substring file 0 (match-beginning 0))))
-              (let ((le (length file)) ld)
-                (setq file (magit-decode-git-path file))
-                (setq ld (length file))
-                (when (> le ld)
-                  (setq sep (concat (make-string (- le ld) ?\s) sep))))
-              (magit-insert-section (file (pop files))
-                (insert (propertize file 'face 'magit-filename) sep cnt " ")
-                (when add
-                  (insert (propertize add 'face 'magit-diffstat-added)))
-                (when del
-                  (insert (propertize del 'face 'magit-diffstat-removed)))
-                (insert "\n")))))
-        (if (looking-at "^$") (forward-line) (insert "\n"))))))
-
-(defun magit-diff-wash-diff (args)
-  (cond
-   ((looking-at "^Submodule")
-    (magit-diff-wash-submodule))
-   ((looking-at "^\\* Unmerged path \\(.*\\)")
-    (let ((file (magit-decode-git-path (match-string 1))))
-      (magit-delete-line)
-      (unless (and (derived-mode-p 'magit-status-mode)
-                   (not (member "--cached" args)))
-        (magit-insert-section (file file)
-          (insert (propertize
-                   (format "unmerged   %s%s" file
-                           (pcase (cddr (car (magit-file-status file)))
-                             (`(?D ?D) " (both deleted)")
-                             (`(?D ?U) " (deleted by us)")
-                             (`(?U ?D) " (deleted by them)")
-                             (`(?A ?A) " (both added)")
-                             (`(?A ?U) " (added by us)")
-                             (`(?U ?A) " (added by them)")
-                             (`(?U ?U) "")))
-                   'face 'magit-diff-file-heading))
-          (insert ?\n))))
-    t)
-   ((looking-at (concat "^\\(merged\\|changed in both\\|"
-                        "added in remote\\|removed in remote\\)"))
-    (let ((status (pcase (match-string 1)
-                    ("merged" "merged")
-                    ("changed in both" "conflict")
-                    ("added in remote" "new file")
-                    ("removed in remote" "deleted")))
-          file orig base modes)
-      (magit-delete-line)
-      (while (looking-at
-              "^  \\([^ ]+\\) +[0-9]\\{6\\} \\([a-z0-9]\\{40\\}\\) \\(.+\\)$")
-        (magit-bind-match-strings (side _blob name) nil
-          (pcase side
-            ("result" (setq file name))
-            ("our"    (setq orig name))
-            ("their"  (setq file name))
-            ("base"   (setq base name))))
-        (magit-delete-line))
-      (when orig (setq orig (magit-decode-git-path orig)))
-      (when file (setq file (magit-decode-git-path file)))
-      (magit-diff-insert-file-section (or file base) orig status modes nil)))
-   ((looking-at
-     "^diff --\\(?:\\(git\\) \\(?:\\(.+?\\) \\2\\)?\\|\\(cc\\|combined\\) \\(.+\\)\\)")
-    (let ((status (cond ((equal (match-string 1) "git")        "modified")
-                        ((derived-mode-p 'magit-revision-mode) "resolved")
-                        (t                                     "unmerged")))
-          (file (or (match-string 2) (match-string 4)))
-          (beg (point))
-          orig header modes)
-      (save-excursion
-        (forward-line 1)
-        (setq header (buffer-substring
-                      beg (if (re-search-forward magit-diff-headline-re nil t)
-                              (match-beginning 0)
-                            (point-max)))))
-      (magit-delete-line)
-      (while (not (or (eobp) (looking-at magit-diff-headline-re)))
-        (if (looking-at "^old mode \\([^\n]+\\)\nnew mode \\([^\n]+\\)\n")
-            (progn (setq modes (match-string 0))
-                   (magit-delete-match))
-          (cond
-           ((looking-at "^--- \\([^/].*?\\)\t?$") ; i.e. not /dev/null
-            (setq orig (match-string 1)))
-           ((looking-at "^\\+\\+\\+ \\([^/].*?\\)\t?$")
-            (setq file (match-string 1)))
-           ((looking-at "^\\(copy\\|rename\\) from \\(.+\\)$")
-            (setq orig (match-string 2)))
-           ((looking-at "^\\(copy\\|rename\\) to \\(.+\\)$")
-            (setq file (match-string 2))
-            (setq status (if (equal (match-string 1) "copy") "new file" "renamed")))
-           ((looking-at "^\\(new file\\|deleted\\)")
-            (setq status (match-string 1))))
-          (magit-delete-line)))
-      (when orig
-        (setq orig (magit-decode-git-path orig)))
-      (setq file (magit-decode-git-path file))
-      ;; KLUDGE `git-log' ignores `--no-prefix' when `-L' is used.
-      (when (and (derived-mode-p 'magit-log-mode)
-                 (--first (string-match-p "\\`-L" it)
-                          (nth 1 magit-refresh-args)))
-        (setq file (substring file 2))
-        (when orig
-          (setq orig (substring orig 2))))
-      (magit-diff-insert-file-section file orig status modes header)))))
-
-(defun magit-diff-insert-file-section (file orig status modes header)
-  (magit-insert-section section
-    (file file (or (equal status "deleted")
-                   (derived-mode-p 'magit-status-mode)))
-    (insert (propertize (format "%-10s %s\n" status
-                                (if (or (not orig) (equal orig file))
-                                    file
-                                  (format "%s -> %s" orig file)))
-                        'face 'magit-diff-file-heading))
-    (magit-insert-heading)
-    (unless (equal orig file)
-      (oset section source orig))
-    (oset section header header)
-    (when modes
-      (magit-insert-section (hunk)
-        (insert modes)))
-    (magit-wash-sequence #'magit-diff-wash-hunk)))
-
-(defun magit-diff-wash-submodule ()
-  ;; See `show_submodule_summary' in submodule.c and "this" commit.
-  (when (looking-at "^Submodule \\([^ ]+\\)")
-    (let ((module (match-string 1))
-          untracked modified)
-      (when (looking-at "^Submodule [^ ]+ contains untracked content$")
-        (magit-delete-line)
-        (setq untracked t))
-      (when (looking-at "^Submodule [^ ]+ contains modified content$")
-        (magit-delete-line)
-        (setq modified t))
-      (cond
-       ((and (looking-at "^Submodule \\([^ ]+\\) \\([^ :]+\\)\\( (rewind)\\)?:$")
-             (equal (match-string 1) module))
-        (magit-bind-match-strings (_module range rewind) nil
-          (magit-delete-line)
-          (while (looking-at "^  \\([<>]\\) \\(.+\\)$")
-            (magit-delete-line))
-          (when rewind
-            (setq range (replace-regexp-in-string "[^.]\\(\\.\\.\\)[^.]"
-                                                  "..." range t t 1)))
-          (magit-insert-section (file module t)
-            (magit-insert-heading
-              (propertize (concat "modified   " module)
-                          'face 'magit-diff-file-heading)
-              " ("
-              (cond (rewind "rewind")
-                    ((string-match-p "\\.\\.\\." range) "non-ff")
-                    (t "new commits"))
-              (and (or modified untracked)
-                   (concat ", "
-                           (and modified "modified")
-                           (and modified untracked " and ")
-                           (and untracked "untracked")
-                           " content"))
-              ")")
-            (let ((default-directory
-                    (file-name-as-directory
-                     (expand-file-name module (magit-toplevel)))))
-              (magit-git-wash (apply-partially 'magit-log-wash-log 'module)
-                "log" "--oneline" "--left-right" range)
-              (delete-char -1)))))
-       ((and (looking-at "^Submodule \\([^ ]+\\) \\([^ ]+\\) (\\([^)]+\\))$")
-             (equal (match-string 1) module))
-        (magit-bind-match-strings (_module _range msg) nil
-          (magit-delete-line)
-          (magit-insert-section (file module)
-            (magit-insert-heading
-              (propertize (concat "submodule  " module)
-                          'face 'magit-diff-file-heading)
-              " (" msg ")"))))
-       (t
-        (magit-insert-section (file module)
-          (magit-insert-heading
-            (propertize (concat "modified   " module)
-                        'face 'magit-diff-file-heading)
-            " ("
-            (and modified "modified")
-            (and modified untracked " and ")
-            (and untracked "untracked")
-            " content)")))))))
-
-(defun magit-diff-wash-hunk ()
-  (when (looking-at "^@\\{2,\\} \\(.+?\\) @\\{2,\\}\\(?: \\(.*\\)\\)?")
-    (let ((heading (match-string 0))
-          (value (cons (match-string 2) (split-string (match-string 1)))))
-      (magit-delete-line)
-      (magit-insert-section it (hunk value)
-        (insert (propertize (concat heading "\n") 'face 'magit-diff-hunk-heading))
-        (magit-insert-heading)
-        (while (not (or (eobp) (looking-at "^[^-+\s\\]")))
-          (forward-line))
-        (oset it end (point))
-        (oset it washer 'magit-diff-paint-hunk)))
-    t))
-
-(defun magit-diff-expansion-threshold (section)
-  "Keep new diff sections collapsed if washing takes too long."
-  (and (magit-file-section-p section)
-       (> (float-time (time-subtract (current-time) magit-refresh-start-time))
-          magit-diff-expansion-threshold)
-       'hide))
-
-;;; Revision Mode
-
-(define-derived-mode magit-revision-mode magit-diff-mode "Magit Rev"
-  "Mode for looking at a Git commit.
-
-This mode is documented in info node `(magit)Revision Buffer'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-section-toggle] to expand or hide the section at point.
-Type \\[magit-visit-thing] to visit the hunk or file at point.
-
-Staging and applying changes is documented in info node
-`(magit)Staging and Unstaging' and info node `(magit)Applying'.
-
-\\<magit-hunk-section-map>Type \
-\\[magit-apply] to apply the change at point, \
-\\[magit-stage] to stage,
-\\[magit-unstage] to unstage, \
-\\[magit-discard] to discard, or \
-\\[magit-reverse] to reverse it.
-
-\\{magit-revision-mode-map}"
-  :group 'magit-revision
-  (hack-dir-local-variables-non-file-buffer)
-  (setq-local bookmark-make-record-function
-              'magit-bookmark--revision-make-record))
-
-(defun magit-revision-refresh-buffer (rev __const _args files)
-  (magit-set-header-line-format
-   (concat (capitalize (magit-object-type rev))
-           " "
-           rev
-           (pcase (length files)
-             (0)
-             (1 (concat " limited to file " (car files)))
-             (_ (concat " limited to files "
-                        (mapconcat #'identity files ", "))))))
-  (setq magit-buffer-revision-hash (magit-rev-parse rev))
-  (magit-insert-section (commitbuf)
-    (magit-run-section-hook 'magit-revision-sections-hook rev)))
-
-(defun magit-insert-revision-diff (rev)
-  "Insert the diff into this `magit-revision-mode' buffer."
-  (let ((magit-git-global-arguments
-         (remove "--literal-pathspecs" magit-git-global-arguments)))
-    ;; Before v2.2.0, "--format=" did not mean "no output".
-    ;; Instead the default format was used.  So use "--format=%n"
-    ;; and then delete the empty lines.
-    (magit-git-wash (lambda (args)
-                      (delete-region (point) (progn (forward-line 3) (point)))
-                      (magit-diff-wash-diffs args))
-      "show" "-p" "--cc" "--format=%n" "--no-prefix"
-      (and (member "--stat" (nth 2 magit-refresh-args)) "--numstat")
-      (nth 2 magit-refresh-args) (concat rev "^{commit}") "--"
-      (nth 3 magit-refresh-args))))
-
-(defun magit-insert-revision-tag (rev)
-  "Insert tag message and headers into a revision buffer.
-This function only inserts anything when `magit-show-commit' is
-called with a tag as argument, when that is called with a commit
-or a ref which is not a branch, then it inserts nothing."
-  (when (equal (magit-object-type rev) "tag")
-    (magit-insert-section (taginfo)
-      (let ((beg (point)))
-        ;; "git verify-tag -v" would output what we need, but the gpg
-        ;; output is send to stderr and we have no control over the
-        ;; order in which stdout and stderr are inserted, which would
-        ;; make parsing hard.  We are forced to use "git cat-file tag"
-        ;; instead, which inserts the signature instead of verifying
-        ;; it.  We remove that later and then insert the verification
-        ;; output using "git verify-tag" (without the "-v").
-        (magit-git-insert "cat-file" "tag" rev)
-        (goto-char beg)
-        (forward-line 3)
-        (delete-region beg (point)))
-      (looking-at "^tagger \\([^<]+\\) <\\([^>]+\\)")
-      (let ((heading (format "Tagger: %s <%s>"
-                             (match-string 1)
-                             (match-string 2))))
-        (magit-delete-line)
-        (insert (propertize heading 'face 'magit-section-secondary-heading)))
-      (magit-insert-heading)
-      (if (re-search-forward "-----BEGIN PGP SIGNATURE-----" nil t)
-          (progn
-            (let ((beg (match-beginning 0)))
-              (re-search-forward "-----END PGP SIGNATURE-----")
-              (delete-region beg (point)))
-            (insert ?\n)
-            (process-file magit-git-executable nil t nil "verify-tag" rev))
-        (goto-char (point-max)))
-      (insert ?\n))))
-
-(defvar magit-commit-message-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-show-commit)
-    map)
-  "Keymap for `commit-message' sections.")
-
-(defun magit-insert-revision-message (rev)
-  "Insert the commit message into a revision buffer."
-  (magit-insert-section section (commit-message)
-    (oset section heading-highlight-face 'magit-diff-hunk-heading-highlight)
-    (let ((beg (point)))
-      (insert (save-excursion ; The risky var query can move point.
-                (with-temp-buffer
-                  (magit-rev-insert-format "%B" rev)
-                  (magit-revision--wash-message))))
-      (if (= (point) (+ beg 2))
-          (progn (backward-delete-char 2)
-                 (insert "(no message)\n"))
-        (goto-char beg)
-        (save-excursion
-          (while (search-forward "\r\n" nil t) ; Remove trailing CRs.
-            (delete-region (match-beginning 0) (1+ (match-beginning 0)))))
-        (when magit-revision-use-hash-sections
-          (save-excursion
-            (while (not (eobp))
-              (re-search-forward "\\_<" nil 'move)
-              (let ((beg (point)))
-                (re-search-forward "\\_>" nil t)
-                (when (> (point) beg)
-                  (let ((text (buffer-substring-no-properties beg (point))))
-                    (when (pcase magit-revision-use-hash-sections
-                            (`quickest ; false negatives and positives
-                             (and (>= (length text) 7)
-                                  (string-match-p "[0-9]" text)
-                                  (string-match-p "[a-z]" text)))
-                            (`quicker  ; false negatives (number-less hashes)
-                             (and (>= (length text) 7)
-                                  (string-match-p "[0-9]" text)
-                                  (magit-rev-verify-commit text)))
-                            (`quick    ; false negatives (short hashes)
-                             (and (>= (length text) 7)
-                                  (magit-rev-verify-commit text)))
-                            (`slow
-                             (magit-rev-verify-commit text)))
-                      (put-text-property beg (point) 'face 'magit-hash)
-                      (let ((end (point)))
-                        (goto-char beg)
-                        (magit-insert-section (commit text)
-                          (goto-char end))))))))))
-        (save-excursion
-          (forward-line)
-          (add-face-text-property beg (point) 'magit-diff-hunk-heading)
-          (magit-insert-heading))
-        (when magit-diff-highlight-keywords
-          (save-excursion
-            (while (re-search-forward "\\[[^[]*\\]" nil t)
-              (let ((beg (match-beginning 0))
-                    (end (match-end 0)))
-                (put-text-property
-                 beg end 'face
-                 (if-let ((face (get-text-property beg 'face)))
-                     (list face 'magit-keyword)
-                   'magit-keyword))))))
-        (goto-char (point-max))))))
-
-(defun magit-insert-revision-notes (rev)
-  "Insert commit notes into a revision buffer."
-  (let* ((var "core.notesRef")
-         (def (or (magit-get var) "refs/notes/commits")))
-    (dolist (ref (or (magit-list-active-notes-refs)))
-      (magit-insert-section section (notes ref (not (equal ref def)))
-        (oset section heading-highlight-face 'magit-diff-hunk-heading-highlight)
-        (let ((beg (point)))
-          (insert (with-temp-buffer
-                    (magit-git-insert "-c" (concat "core.notesRef=" ref)
-                                      "notes" "show" rev)
-                    (magit-revision--wash-message)))
-          (if (= (point) beg)
-              (magit-cancel-section)
-            (goto-char beg)
-            (end-of-line)
-            (insert (format " (%s)"
-                            (propertize (if (string-prefix-p "refs/notes/" ref)
-                                            (substring ref 11)
-                                          ref)
-                                        'face 'magit-refname)))
-            (forward-char)
-            (add-face-text-property beg (point) 'magit-diff-hunk-heading)
-            (magit-insert-heading)
-            (goto-char (point-max))
-            (insert ?\n)))))))
-
-(defun magit-revision--wash-message ()
-  (let ((major-mode 'git-commit-mode))
-    (hack-dir-local-variables)
-    (hack-local-variables-apply))
-  (unless (memq git-commit-major-mode '(nil text-mode))
-    (funcall git-commit-major-mode)
-    (font-lock-ensure))
-  (buffer-string))
-
-(defun magit-insert-revision-headers (rev)
-  "Insert headers about the commit into a revision buffer."
-  (magit-insert-section (headers)
-    ;; Before v2.2.0, "%D" was not supported.
-    (--when-let (magit-rev-format "%d" rev "--decorate=full")
-      (insert (magit-format-ref-labels it) ?\s))
-    (insert (propertize (magit-rev-parse (concat rev "^{commit}"))
-                        'face 'magit-hash))
-    (magit-insert-heading)
-    (let ((beg (point)))
-      (magit-rev-insert-format magit-revision-headers-format rev)
-      (magit-insert-revision-gravatars rev beg))
-    (when magit-revision-insert-related-refs
-      (dolist (parent (magit-commit-parents rev))
-        (magit-insert-section (commit parent)
-          (let ((line (magit-rev-format "%h %s" parent)))
-            (string-match "^\\([^ ]+\\) \\(.*\\)" line)
-            (magit-bind-match-strings (hash msg) line
-              (insert "Parent:     ")
-              (insert (propertize hash 'face 'magit-hash))
-              (insert " " msg "\n")))))
-      (when-let ((merged (magit-list-merged-branches rev)))
-        (insert "Merged:    ")
-        (let (branch)
-          (while (and (< (+ (- (point) (line-beginning-position))
-                            (length (car merged)) 9)
-                         (window-width))
-                      (setq branch (pop merged)))
-            (insert ?\s)
-            (magit-insert-section (branch branch)
-              (insert (propertize branch 'face 'magit-branch-local)))))
-        (when merged
-          (insert (format " (%s more)" (length merged))))
-        (insert ?\n))
-      (when-let ((containing (magit-list-containing-branches rev)))
-        (insert "Containing:")
-        (let (branch)
-          (while (and (< (+ (- (point) (line-beginning-position))
-                            (length (car containing)) 9)
-                         (window-width))
-                      (setq branch (pop containing)))
-            (insert ?\s)
-            (magit-insert-section (branch branch)
-              (insert (propertize branch 'face 'magit-branch-local)))))
-        (when containing
-          (insert (format " (%s more)" (length containing))))
-        (insert ?\n))
-      (when-let ((follows (magit-get-current-tag rev t)))
-        (let ((tag (car  follows))
-              (cnt (cadr follows)))
-          (magit-insert-section (tag tag)
-            (insert (format "Follows:    %s (%s)\n"
-                            (propertize tag 'face 'magit-tag)
-                            (propertize (number-to-string cnt)
-                                        'face 'magit-branch-local))))))
-      (when-let ((precedes (magit-get-next-tag rev t)))
-        (let ((tag (car  precedes))
-              (cnt (cadr precedes)))
-          (magit-insert-section (tag tag)
-            (insert (format "Precedes:   %s (%s)\n"
-                            (propertize tag 'face 'magit-tag)
-                            (propertize (number-to-string cnt)
-                                        'face 'magit-tag))))))
-      (insert ?\n))))
-
-(defun magit-insert-revision-gravatars (rev beg)
-  (when (and magit-revision-show-gravatars
-             (window-system))
-    (require 'gravatar)
-    (pcase-let ((`(,author . ,committer) magit-revision-show-gravatars))
-      (--when-let (magit-rev-format "%aE" rev)
-        (magit-insert-revision-gravatar beg rev it author))
-      (--when-let (magit-rev-format "%cE" rev)
-        (magit-insert-revision-gravatar beg rev it committer)))))
-
-(defun magit-insert-revision-gravatar (beg rev email regexp)
-  (save-excursion
-    (goto-char beg)
-    (when (re-search-forward regexp nil t)
-      (let* ((column   (length (match-string 0)))
-             (font-obj (query-font (font-at (point) (get-buffer-window))))
-             (size     (* 2 (+ (aref font-obj 4)
-                               (aref font-obj 5))))
-             (align-to (+ column
-                          (ceiling (/ size (aref font-obj 7) 1.0))
-                          1))
-             (gravatar-size (- size 2)))
-        (gravatar-retrieve email 'magit-insert-revision-gravatar-cb
-                           (list rev (point-marker) align-to column))))))
-
-(defun magit-insert-revision-gravatar-cb (image rev marker align-to column)
-  (unless (eq image 'error)
-    (when-let ((buffer (marker-buffer marker)))
-      (with-current-buffer buffer
-        (save-excursion
-          (goto-char marker)
-          ;; The buffer might display another revision by now or
-          ;; it might have been refreshed, in which case another
-          ;; process might already have inserted the image.
-          (when (and (equal rev (car magit-refresh-args))
-                     (not (eq (car-safe
-                               (car-safe
-                                (get-text-property (point) 'display)))
-                              'image)))
-            (let ((top `((,@image :ascent center :relief 1)
-                         (slice 0.0 0.0 1.0 0.5)))
-                  (bot `((,@image :ascent center :relief 1)
-                         (slice 0.0 0.5 1.0 1.0)))
-                  (align `((space :align-to ,align-to))))
-              (when magit-revision-use-gravatar-kludge
-                (cl-rotatef top bot))
-              (let ((inhibit-read-only t))
-                (insert (propertize " " 'display top))
-                (insert (propertize " " 'display align))
-                (forward-line)
-                (forward-char column)
-                (insert (propertize " " 'display bot))
-                (insert (propertize " " 'display align))))))))))
-
-;;; Diff Sections
-
-(defvar magit-unstaged-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]  'magit-diff-unstaged)
-    (define-key map [remap magit-delete-thing] 'magit-discard)
-    (define-key map "s" 'magit-stage)
-    (define-key map "u" 'magit-unstage)
-    map)
-  "Keymap for the `unstaged' section.")
-
-(magit-define-section-jumper magit-jump-to-unstaged "Unstaged changes" unstaged)
-
-(defun magit-insert-unstaged-changes ()
-  "Insert section showing unstaged changes."
-  (magit-insert-section (unstaged)
-    (magit-insert-heading "Unstaged changes:")
-    (magit-git-wash #'magit-diff-wash-diffs
-      "diff" magit-diff-section-arguments "--no-prefix"
-      "--" magit-diff-section-file-args)))
-
-(defvar magit-staged-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]      'magit-diff-staged)
-    (define-key map [remap magit-delete-thing]     'magit-discard)
-    (define-key map [remap magit-revert-no-commit] 'magit-reverse)
-    (define-key map "s" 'magit-stage)
-    (define-key map "u" 'magit-unstage)
-    map)
-  "Keymap for the `staged' section.")
-
-(magit-define-section-jumper magit-jump-to-staged "Staged changes" staged)
-
-(defun magit-insert-staged-changes ()
-  "Insert section showing staged changes."
-  ;; Avoid listing all files as deleted when visiting a bare repo.
-  (unless (magit-bare-repo-p)
-    (magit-insert-section (staged)
-      (magit-insert-heading "Staged changes:")
-      (magit-git-wash #'magit-diff-wash-diffs
-        "diff" "--cached" magit-diff-section-arguments "--no-prefix"
-        "--" magit-diff-section-file-args))))
-
-;;; Diff Type
-
-(defun magit-diff-type (&optional section)
-  "Return the diff type of SECTION.
-
-The returned type is one of the symbols `staged', `unstaged',
-`committed', or `undefined'.  This type serves a similar purpose
-as the general type common to all sections (which is stored in
-the `type' slot of the corresponding `magit-section' struct) but
-takes additional information into account.  When the SECTION
-isn't related to diffs and the buffer containing it also isn't
-a diff-only buffer, then return nil.
-
-Currently the type can also be one of `tracked' and `untracked'
-but these values are not handled explicitly everywhere they
-should be and a possible fix could be to just return nil here.
-
-The section has to be a `diff' or `hunk' section, or a section
-whose children are of type `diff'.  If optional SECTION is nil,
-return the diff type for the current section.  In buffers whose
-major mode is `magit-diff-mode' SECTION is ignored and the type
-is determined using other means.  In `magit-revision-mode'
-buffers the type is always `committed'.
-
-Do not confuse this with `magit-diff-scope' (which see)."
-  (--when-let (or section (magit-current-section))
-    (cond ((derived-mode-p 'magit-revision-mode 'magit-stash-mode) 'committed)
-          ((derived-mode-p 'magit-diff-mode)
-           (let ((range (nth 0 magit-refresh-args))
-                 (const (nth 1 magit-refresh-args)))
-             (cond ((member "--no-index" const) 'undefined)
-                   ((or (not range)
-                        (magit-rev-eq range "HEAD"))
-                    (if (member "--cached" const)
-                        'staged
-                      'unstaged))
-                   ((member "--cached" const)
-                    (if (magit-rev-head-p range)
-                        'staged
-                      'undefined)) ; i.e. committed and staged
-                   (t 'committed))))
-          ((derived-mode-p 'magit-status-mode)
-           (let ((stype (oref it type)))
-             (if (memq stype '(staged unstaged tracked untracked))
-                 stype
-               (pcase stype
-                 (`file (let* ((parent (oref it parent))
-                               (type   (oref parent type)))
-                          (if (eq type 'file)
-                              (magit-diff-type parent)
-                            type)))
-                 (`hunk (-> it
-                            (oref parent)
-                            (oref parent)
-                            (oref type)))))))
-          ((derived-mode-p 'magit-log-mode)
-           (if (or (and (magit-section-match 'commit section)
-                        (oref section children))
-                   (magit-section-match [* file commit] section))
-               'committed
-           'undefined))
-          (t 'undefined))))
-
-(cl-defun magit-diff-scope (&optional (section nil ssection) strict)
-  "Return the diff scope of SECTION or the selected section(s).
-
-A diff's \"scope\" describes what part of a diff is selected, it is
-a symbol, one of `region', `hunk', `hunks', `file', `files', or
-`list'.  Do not confuse this with the diff \"type\", as returned by
-`magit-diff-type'.
-
-If optional SECTION is non-nil, then return the scope of that,
-ignoring the sections selected by the region.  Otherwise return
-the scope of the current section, or if the region is active and
-selects a valid group of diff related sections, the type of these
-sections, i.e. `hunks' or `files'.  If SECTION, or if that is nil
-the current section, is a `hunk' section; and the region region
-starts and ends inside the body of a that section, then the type
-is `region'.  If the region is empty after a mouse click, then
-`hunk' is returned instead of `region'.
-
-If optional STRICT is non-nil, then return nil if the diff type of
-the section at point is `untracked' or the section at point is not
-actually a `diff' but a `diffstat' section."
-  (let ((siblings (and (not ssection) (magit-region-sections nil t))))
-    (setq section (or section (car siblings) (magit-current-section)))
-    (when (and section
-               (or (not strict)
-                   (and (not (eq (magit-diff-type section) 'untracked))
-                        (not (eq (--when-let (oref section parent)
-                                   (oref it type))
-                                 'diffstat)))))
-      (pcase (list (oref section type)
-                   (and siblings t)
-                   (magit-diff-use-hunk-region-p)
-                   ssection)
-        (`(hunk nil   t  ,_)
-         (if (magit-section-internal-region-p section) 'region 'hunk))
-        (`(hunk   t   t nil) 'hunks)
-        (`(hunk  ,_  ,_  ,_) 'hunk)
-        (`(file   t   t nil) 'files)
-        (`(file  ,_  ,_  ,_) 'file)
-        (`(,(or `staged `unstaged `untracked)
-           nil ,_ ,_) 'list)))))
-
-(defun magit-diff-use-hunk-region-p ()
-  (and (region-active-p)
-       (not (and (if (version< emacs-version "25.1")
-                     (eq this-command 'mouse-drag-region)
-                   ;; TODO implement this from first principals
-                   ;; currently it's trial-and-error
-                   (or (eq this-command 'mouse-drag-region)
-                       (eq last-command 'mouse-drag-region)
-                       ;; When another window was previously
-                       ;; selected then the last-command is
-                       ;; some byte-code function.
-                       (byte-code-function-p last-command)))
-                 (eq (region-end) (region-beginning))))))
-
-;;; Diff Highlight
-
-(defun magit-diff-unhighlight (section selection)
-  "Remove the highlighting of the diff-related SECTION."
-  (when (magit-hunk-section-p section)
-    (magit-diff-paint-hunk section selection nil)
-    t))
-
-(defun magit-diff-highlight (section selection)
-  "Highlight the diff-related SECTION.
-If SECTION is not a diff-related section, then do nothing and
-return nil.  If SELECTION is non-nil, then it is a list of sections
-selected by the region, including SECTION.  All of these sections
-are highlighted."
-  (if (and (magit-section-match 'commit section)
-           (oref section children))
-      (progn (if selection
-                 (dolist (section selection)
-                   (magit-diff-highlight-list section selection))
-               (magit-diff-highlight-list section))
-             t)
-    (when-let ((scope (magit-diff-scope section t)))
-      (cond ((eq scope 'region)
-             (magit-diff-paint-hunk section selection t))
-            (selection
-             (dolist (section selection)
-               (magit-diff-highlight-recursive section selection)))
-            (t
-             (magit-diff-highlight-recursive section)))
-      t)))
-
-(defun magit-diff-highlight-recursive (section &optional selection)
-  (pcase (magit-diff-scope section)
-    (`list (magit-diff-highlight-list section selection))
-    (`file (magit-diff-highlight-file section selection))
-    (`hunk (magit-diff-highlight-heading section selection)
-           (magit-diff-paint-hunk section selection t))
-    (_     (magit-section-highlight section nil))))
-
-(defun magit-diff-highlight-list (section &optional selection)
-  (let ((beg (oref section start))
-        (cnt (oref section content))
-        (end (oref section end)))
-    (when (or (eq this-command 'mouse-drag-region)
-              (not selection))
-      (unless (and (region-active-p)
-                   (<= (region-beginning) beg))
-        (magit-section-make-overlay beg cnt 'magit-section-highlight))
-      (unless (oref section hidden)
-        (dolist (child (oref section children))
-          (when (or (eq this-command 'mouse-drag-region)
-                    (not (and (region-active-p)
-                              (<= (region-beginning)
-                                  (oref child start)))))
-            (magit-diff-highlight-recursive child selection)))))
-    (when magit-diff-highlight-hunk-body
-      (magit-section-make-overlay (1- end) end 'magit-section-highlight))))
-
-(defun magit-diff-highlight-file (section &optional selection)
-  (magit-diff-highlight-heading section selection)
-  (unless (oref section hidden)
-    (dolist (child (oref section children))
-      (magit-diff-highlight-recursive child selection))))
-
-(defun magit-diff-highlight-heading (section &optional selection)
-  (magit-section-make-overlay
-   (oref section start)
-   (or (oref section content)
-       (oref section end))
-   (pcase (list (oref section type)
-                (and (member section selection)
-                     (not (eq this-command 'mouse-drag-region))))
-     (`(file   t) 'magit-diff-file-heading-selection)
-     (`(file nil) 'magit-diff-file-heading-highlight)
-     (`(hunk   t) 'magit-diff-hunk-heading-selection)
-     (`(hunk nil) 'magit-diff-hunk-heading-highlight))))
-
-;;; Hunk Paint
-
-(cl-defun magit-diff-paint-hunk
-    (section &optional selection
-             (highlight (magit-section-selected-p section selection)))
-  (let (paint)
-    (unless magit-diff-highlight-hunk-body
-      (setq highlight nil))
-    (cond (highlight
-           (unless (oref section hidden)
-             (add-to-list 'magit-section-highlighted-sections section)
-             (cond ((memq section magit-section-unhighlight-sections)
-                    (setq magit-section-unhighlight-sections
-                          (delq section magit-section-unhighlight-sections)))
-                   (magit-diff-highlight-hunk-body
-                    (setq paint t)))))
-          (t
-           (cond ((and (oref section hidden)
-                       (memq section magit-section-unhighlight-sections))
-                  (add-to-list 'magit-section-highlighted-sections section)
-                  (setq magit-section-unhighlight-sections
-                        (delq section magit-section-unhighlight-sections)))
-                 (t
-                  (setq paint t)))))
-    (when paint
-      (save-excursion
-        (goto-char (oref section start))
-        (let ((end (oref section end))
-              (merging (looking-at "@@@"))
-              (stage nil)
-              (tab-width (magit-diff-tab-width
-                          (magit-section-parent-value section))))
-          (forward-line)
-          (while (< (point) end)
-            (when (and magit-diff-hide-trailing-cr-characters
-                       (char-equal ?\r (char-before (line-end-position))))
-              (put-text-property (1- (line-end-position)) (line-end-position)
-                                 'invisible t))
-            (put-text-property
-             (point) (1+ (line-end-position)) 'face
-             (cond
-              ((looking-at "^\\+\\+?\\([<=|>]\\)\\{7\\}")
-               (setq stage (pcase (list (match-string 1) highlight)
-                             (`("<" nil) 'magit-diff-our)
-                             (`("<"   t) 'magit-diff-our-highlight)
-                             (`("|" nil) 'magit-diff-base)
-                             (`("|"   t) 'magit-diff-base-highlight)
-                             (`("=" nil) 'magit-diff-their)
-                             (`("="   t) 'magit-diff-their-highlight)
-                             (`(">" nil) nil)))
-               'magit-diff-conflict-heading)
-              ((looking-at (if merging "^\\(\\+\\| \\+\\)" "^\\+"))
-               (magit-diff-paint-tab merging tab-width)
-               (magit-diff-paint-whitespace merging)
-               (or stage
-                   (if highlight 'magit-diff-added-highlight 'magit-diff-added)))
-              ((looking-at (if merging "^\\(-\\| -\\)" "^-"))
-               (magit-diff-paint-tab merging tab-width)
-               (if highlight 'magit-diff-removed-highlight 'magit-diff-removed))
-              (t
-               (magit-diff-paint-tab merging tab-width)
-               (if highlight 'magit-diff-context-highlight 'magit-diff-context))))
-            (forward-line))))))
-  (magit-diff-update-hunk-refinement section))
-
-(defvar magit-diff--tab-width-cache nil)
-
-(defun magit-diff-tab-width (file)
-  (setq file (expand-file-name file))
-  (cl-flet ((cache (value)
-                   (let ((elt (assoc file magit-diff--tab-width-cache)))
-                     (if elt
-                         (setcdr elt value)
-                       (setq magit-diff--tab-width-cache
-                             (cons (cons file value)
-                                   magit-diff--tab-width-cache))))
-                   value))
-    (cond
-     ((not magit-diff-adjust-tab-width)
-      tab-width)
-     ((--when-let (find-buffer-visiting file)
-        (cache (buffer-local-value 'tab-width it))))
-     ((--when-let (assoc file magit-diff--tab-width-cache)
-        (or (cdr it)
-            tab-width)))
-     ((or (eq magit-diff-adjust-tab-width 'always)
-          (and (numberp magit-diff-adjust-tab-width)
-               (>= magit-diff-adjust-tab-width
-                   (nth 7 (file-attributes file)))))
-      (cache (buffer-local-value 'tab-width (find-file-noselect file))))
-     (t
-      (cache nil)
-      tab-width))))
-
-(defun magit-diff-paint-tab (merging width)
-  (save-excursion
-    (forward-char (if merging 2 1))
-    (while (= (char-after) ?\t)
-      (put-text-property (point) (1+ (point))
-                         'display (list (list 'space :width width)))
-      (forward-char))))
-
-(defun magit-diff-paint-whitespace (merging)
-  (when (and magit-diff-paint-whitespace
-             (or (derived-mode-p 'magit-status-mode)
-                 (not (eq magit-diff-paint-whitespace 'status))))
-    (let ((prefix (if merging "^[-\\+\s]\\{2\\}" "^[-\\+]"))
-          (indent
-           (if (local-variable-p 'magit-diff-highlight-indentation)
-               magit-diff-highlight-indentation
-             (setq-local
-              magit-diff-highlight-indentation
-              (cdr (--first (string-match-p (car it) default-directory)
-                            (nreverse
-                             (default-value
-                               'magit-diff-highlight-indentation))))))))
-      (when (and magit-diff-highlight-trailing
-                 (looking-at (concat prefix ".*?\\([ \t]+\\)$")))
-        (let ((ov (make-overlay (match-beginning 1) (match-end 1) nil t)))
-          (overlay-put ov 'face 'magit-diff-whitespace-warning)
-          (overlay-put ov 'evaporate t)))
-      (when (or (and (eq indent 'tabs)
-                     (looking-at (concat prefix "\\( *\t[ \t]*\\)")))
-                (and (integerp indent)
-                     (looking-at (format "%s\\([ \t]* \\{%s,\\}[ \t]*\\)"
-                                         prefix indent))))
-        (let ((ov (make-overlay (match-beginning 1) (match-end 1) nil t)))
-          (overlay-put ov 'face 'magit-diff-whitespace-warning)
-          (overlay-put ov 'evaporate t))))))
-
-(defun magit-diff-update-hunk-refinement (&optional section)
-  (if section
-      (unless (oref section hidden)
-        (pcase (list magit-diff-refine-hunk
-                     (oref section refined)
-                     (eq section (magit-current-section)))
-          ((or `(all nil ,_) `(t nil t))
-           (oset section refined t)
-           (save-excursion
-             (goto-char (oref section start))
-             ;; `diff-refine-hunk' does not handle combined diffs.
-             (unless (looking-at "@@@")
-               ;; Avoid fsyncing many small temp files
-               (let ((write-region-inhibit-fsync t))
-                 (diff-refine-hunk)))))
-          ((or `(nil t ,_) `(t t nil))
-           (oset section refined nil)
-           (remove-overlays (oref section start)
-                            (oref section end)
-                            'diff-mode 'fine))))
-    (cl-labels ((recurse (section)
-                         (if (magit-section-match 'hunk section)
-                             (magit-diff-update-hunk-refinement section)
-                           (dolist (child (oref section children))
-                             (recurse child)))))
-      (recurse magit-root-section))))
-
-
-;;; Hunk Region
-
-(defun magit-diff-hunk-region-beginning ()
-  (save-excursion (goto-char (region-beginning))
-                  (line-beginning-position)))
-
-(defun magit-diff-hunk-region-end ()
-  (save-excursion (goto-char (region-end))
-                  (line-end-position)))
-
-(defun magit-diff-update-hunk-region (section)
-  "Highlight the hunk-internal region if any."
-  (when (eq (magit-diff-scope section t) 'region)
-    (magit-diff--make-hunk-overlay
-     (oref section start)
-     (1- (oref section content))
-     'face 'magit-diff-lines-heading
-     'display (magit-diff-hunk-region-header section)
-     'after-string (magit-diff--hunk-after-string 'magit-diff-lines-heading))
-    (run-hook-with-args 'magit-diff-highlight-hunk-region-functions section)
-    t))
-
-(defun magit-diff-highlight-hunk-region-dim-outside (section)
-  "Dim the parts of the hunk that are outside the hunk-internal region.
-This is done by using the same foreground and background color
-for added and removed lines as for context lines."
-  (let ((face (if magit-diff-highlight-hunk-body
-                  'magit-diff-context-highlight
-                'magit-diff-context)))
-    (when magit-diff-unmarked-lines-keep-foreground
-      (setq face (list :background (face-attribute face :background))))
-    (magit-diff--make-hunk-overlay (oref section content)
-                                   (magit-diff-hunk-region-beginning)
-                                   'face face
-                                   'priority 2)
-    (magit-diff--make-hunk-overlay (1+ (magit-diff-hunk-region-end))
-                                   (oref section end)
-                                   'face face
-                                   'priority 2)))
-
-(defun magit-diff-highlight-hunk-region-using-face (_section)
-  "Highlight the hunk-internal region by making it bold.
-Or rather highlight using the face `magit-diff-hunk-region', though
-changing only the `:weight' and/or `:slant' is recommended for that
-face."
-  (magit-diff--make-hunk-overlay (magit-diff-hunk-region-beginning)
-                                 (1+ (magit-diff-hunk-region-end))
-                                 'face 'magit-diff-hunk-region))
-
-(defun magit-diff-highlight-hunk-region-using-overlays (section)
-  "Emphasize the hunk-internal region using delimiting horizontal lines.
-This is implemented as single-pixel newlines places inside overlays."
-  (if (window-system)
-      (let ((beg (magit-diff-hunk-region-beginning))
-            (end (magit-diff-hunk-region-end))
-            (str (propertize
-                  (concat (propertize "\s" 'display '(space :height (1)))
-                          (propertize "\n" 'line-height t))
-                  'face 'magit-diff-lines-boundary)))
-        (magit-diff--make-hunk-overlay beg (1+ beg) 'before-string str)
-        (magit-diff--make-hunk-overlay end (1+ end) 'after-string  str))
-    (magit-diff-highlight-hunk-region-using-face section)))
-
-(defun magit-diff-highlight-hunk-region-using-underline (section)
-  "Emphasize the hunk-internal region using delimiting horizontal lines.
-This is implemented by overlining and underlining the first and
-last (visual) lines of the region."
-  (if (window-system)
-      (let* ((beg (magit-diff-hunk-region-beginning))
-             (end (magit-diff-hunk-region-end))
-             (beg-eol (save-excursion (goto-char beg)
-                                      (end-of-visual-line)
-                                      (point)))
-             (end-bol (save-excursion (goto-char end)
-                                      (beginning-of-visual-line)
-                                      (point)))
-             (color (face-background 'magit-diff-lines-boundary nil t)))
-        (cl-flet ((ln (b e &rest face)
-                      (magit-diff--make-hunk-overlay
-                       b e 'face face 'after-string
-                       (magit-diff--hunk-after-string face))))
-          (if (= beg end-bol)
-              (ln beg beg-eol :overline color :underline color)
-            (ln beg beg-eol :overline color)
-            (ln end-bol end :underline color))))
-    (magit-diff-highlight-hunk-region-using-face section)))
-
-(defun magit-diff--make-hunk-overlay (start end &rest args)
-  (let ((ov (make-overlay start end nil t)))
-    (overlay-put ov 'evaporate t)
-    (while args (overlay-put ov (pop args) (pop args)))
-    (push ov magit-region-overlays)
-    ov))
-
-(defun magit-diff--hunk-after-string (face)
-  (propertize "\s"
-              'face face
-              'display (list 'space :align-to
-                             `(+ (0 . right)
-                                 ,(min (window-hscroll)
-                                       (- (line-end-position)
-                                          (line-beginning-position)))))
-              ;; This prevents the cursor from being rendered at the
-              ;; edge of the window.
-              'cursor t))
-
-;;; Hunk Utilities
-
-(defun magit-diff-inside-hunk-body-p ()
-  "Return non-nil if point is inside the body of a hunk."
-  (and (magit-section-match 'hunk)
-       (> (point)
-          (oref (magit-current-section) content))))
-
-;;; Diff Extract
-
-(defun magit-diff-file-header (section)
-  (when (magit-hunk-section-p section)
-    (setq section (oref section parent)))
-  (when (magit-file-section-p section)
-    (oref section header)))
-
-(defun magit-diff-hunk-region-header (section)
-  (let ((patch (magit-diff-hunk-region-patch section)))
-    (string-match "\n" patch)
-    (substring patch 0 (1- (match-end 0)))))
-
-(defun magit-diff-hunk-region-patch (section &optional args)
-  (let ((op (if (member "--reverse" args) "+" "-"))
-        (sbeg (oref section start))
-        (rbeg (magit-diff-hunk-region-beginning))
-        (rend (region-end))
-        (send (oref section end))
-        (patch nil))
-    (save-excursion
-      (goto-char sbeg)
-      (while (< (point) send)
-        (looking-at "\\(.\\)\\([^\n]*\n\\)")
-        (cond ((or (string-match-p "[@ ]" (match-string-no-properties 1))
-                   (and (>= (point) rbeg)
-                        (<= (point) rend)))
-               (push (match-string-no-properties 0) patch))
-              ((equal op (match-string-no-properties 1))
-               (push (concat " " (match-string-no-properties 2)) patch)))
-        (forward-line)))
-    (with-temp-buffer
-      (insert (mapconcat 'identity (reverse patch) ""))
-      (diff-fixup-modifs (point-min) (point-max))
-      (setq patch (buffer-string)))
-    patch))
-
-(provide 'magit-diff)
-;;; magit-diff.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.elc
deleted file mode 100644
index c566d367c203..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-diff.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.el
deleted file mode 100644
index 7e0716beefd7..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.el
+++ /dev/null
@@ -1,509 +0,0 @@
-;;; magit-ediff.el --- Ediff extension for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library provides basic support for Ediff.
-
-;;; Code:
-
-(require 'magit)
-
-(require 'ediff)
-(require 'smerge-mode)
-
-(defvar smerge-ediff-buf)
-(defvar smerge-ediff-windows)
-
-;;; Options
-
-(defgroup magit-ediff nil
-  "Ediff support for Magit."
-  :link '(info-link "(magit)Ediffing")
-  :group 'magit-extensions)
-
-(defcustom magit-ediff-quit-hook
-  '(magit-ediff-cleanup-auxiliary-buffers
-    magit-ediff-restore-previous-winconf)
-  "Hooks to run after finishing Ediff, when that was invoked using Magit.
-The hooks are run in the Ediff control buffer.  This is similar
-to `ediff-quit-hook' but takes the needs of Magit into account.
-The `ediff-quit-hook' is ignored by Ediff sessions which were
-invoked using Magit."
-  :package-version '(magit . "2.2.0")
-  :group 'magit-ediff
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(magit-ediff-cleanup-auxiliary-buffers
-             magit-ediff-restore-previous-winconf))
-
-(defcustom magit-ediff-dwim-show-on-hunks nil
-  "Whether `magit-ediff-dwim' runs show variants on hunks.
-If non-nil, `magit-ediff-show-staged' or
-`magit-ediff-show-unstaged' are called based on what section the
-hunk is in.  Otherwise, `magit-ediff-dwim' runs
-`magit-ediff-stage' when point is on an uncommitted hunk."
-  :package-version '(magit . "2.2.0")
-  :group 'magit-ediff
-  :type 'boolean)
-
-(defcustom magit-ediff-show-stash-with-index t
-  "Whether `magit-ediff-show-stash' shows the state of the index.
-
-If non-nil, use a third Ediff buffer to distinguish which changes
-in the stash were staged.  In cases where the stash contains no
-staged changes, fall back to a two-buffer Ediff.
-
-More specifically, a stash is a merge commit, stash@{N}, with
-potentially three parents.
-
-* stash@{N}^1 represents the `HEAD' commit at the time the stash
-  was created.
-
-* stash@{N}^2 records any changes that were staged when the stash
-  was made.
-
-* stash@{N}^3, if it exists, contains files that were untracked
-  when stashing.
-
-If this option is non-nil, `magit-ediff-show-stash' will run
-Ediff on a file using three buffers: one for stash@{N}, another
-for stash@{N}^1, and a third for stash@{N}^2.
-
-Otherwise, Ediff uses two buffers, comparing
-stash@{N}^1..stash@{N}.  Along with any unstaged changes, changes
-in the index commit, stash@{N}^2, will be shown in this
-comparison unless they conflicted with changes in the working
-tree at the time of stashing."
-  :package-version '(magit . "2.6.0")
-  :group 'magit-ediff
-  :type 'boolean)
-
-;;; Commands
-
-(defvar magit-ediff-previous-winconf nil)
-
-;;;###autoload (autoload 'magit-ediff-popup "magit-ediff" nil t)
-(magit-define-popup magit-ediff-popup
-  "Popup console for ediff commands."
-  :actions '((?E "Dwim"          magit-ediff-dwim)
-             (?u "Show unstaged" magit-ediff-show-unstaged)
-             (?s "Stage"         magit-ediff-stage)
-             (?i "Show staged"   magit-ediff-show-staged)
-             (?m "Resolve"       magit-ediff-resolve)
-             (?w "Show worktree" magit-ediff-show-working-tree)
-             (?r "Diff range"    magit-ediff-compare)
-             (?c "Show commit"   magit-ediff-show-commit) nil
-             (?z "Show stash"    magit-ediff-show-stash))
-  :max-action-columns 2)
-
-;;;###autoload
-(defun magit-ediff-resolve (file)
-  "Resolve outstanding conflicts in FILE using Ediff.
-FILE has to be relative to the top directory of the repository.
-
-In the rare event that you want to manually resolve all
-conflicts, including those already resolved by Git, use
-`ediff-merge-revisions-with-ancestor'."
-  (interactive
-   (let ((current  (magit-current-file))
-         (unmerged (magit-unmerged-files)))
-     (unless unmerged
-       (user-error "There are no unresolved conflicts"))
-     (list (magit-completing-read "Resolve file" unmerged nil t nil nil
-                                  (car (member current unmerged))))))
-  (magit-with-toplevel
-    (with-current-buffer (find-file-noselect file)
-      (smerge-ediff)
-      (setq-local
-       ediff-quit-hook
-       (lambda ()
-         (let ((bufC ediff-buffer-C)
-               (bufS smerge-ediff-buf))
-           (with-current-buffer bufS
-             (when (yes-or-no-p (format "Conflict resolution finished; save %s? "
-                                        buffer-file-name))
-               (erase-buffer)
-               (insert-buffer-substring bufC)
-               (save-buffer))))
-         (when (buffer-live-p ediff-buffer-A) (kill-buffer ediff-buffer-A))
-         (when (buffer-live-p ediff-buffer-B) (kill-buffer ediff-buffer-B))
-         (when (buffer-live-p ediff-buffer-C) (kill-buffer ediff-buffer-C))
-         (when (buffer-live-p ediff-ancestor-buffer)
-           (kill-buffer ediff-ancestor-buffer))
-         (let ((magit-ediff-previous-winconf smerge-ediff-windows))
-           (run-hooks 'magit-ediff-quit-hook)))))))
-
-;;;###autoload
-(defun magit-ediff-stage (file)
-  "Stage and unstage changes to FILE using Ediff.
-FILE has to be relative to the top directory of the repository."
-  (interactive
-   (list (magit-completing-read "Selectively stage file"
-                                (magit-tracked-files) nil nil nil nil
-                                (magit-current-file))))
-  (magit-with-toplevel
-    (let* ((conf (current-window-configuration))
-           (bufA (magit-get-revision-buffer "HEAD" file))
-           (bufB (get-buffer (concat file ".~{index}~")))
-           (bufBrw (and bufB (with-current-buffer bufB (not buffer-read-only))))
-           (bufC (get-file-buffer file))
-           (fileBufC (or bufC (find-file-noselect file)))
-           (coding-system-for-read
-            (with-current-buffer fileBufC buffer-file-coding-system)))
-      (ediff-buffers3
-       (or bufA (magit-find-file-noselect "HEAD" file))
-       (with-current-buffer (magit-find-file-index-noselect file t)
-         (setq buffer-read-only nil)
-         (current-buffer))
-       fileBufC
-       `((lambda ()
-           (setq-local
-            ediff-quit-hook
-            (lambda ()
-              (and (buffer-live-p ediff-buffer-B)
-                   (buffer-modified-p ediff-buffer-B)
-                   (with-current-buffer ediff-buffer-B
-                     (magit-update-index)))
-              (and (buffer-live-p ediff-buffer-C)
-                   (buffer-modified-p ediff-buffer-C)
-                   (with-current-buffer ediff-buffer-C
-                     (when (y-or-n-p
-                            (format "Save file %s? " buffer-file-name))
-                       (save-buffer))))
-              ,@(unless bufA '((ediff-kill-buffer-carefully ediff-buffer-A)))
-              ,@(if bufB
-                    (unless bufBrw '((with-current-buffer ediff-buffer-B
-                                       (setq buffer-read-only t))))
-                  '((ediff-kill-buffer-carefully ediff-buffer-B)))
-              ,@(unless bufC '((ediff-kill-buffer-carefully ediff-buffer-C)))
-              (let ((magit-ediff-previous-winconf ,conf))
-                (run-hooks 'magit-ediff-quit-hook))))))
-       'ediff-buffers3))))
-
-;;;###autoload
-(defun magit-ediff-compare (revA revB fileA fileB)
-  "Compare REVA:FILEA with REVB:FILEB using Ediff.
-
-FILEA and FILEB have to be relative to the top directory of the
-repository.  If REVA or REVB is nil, then this stands for the
-working tree state.
-
-If the region is active, use the revisions on the first and last
-line of the region.  With a prefix argument, instead of diffing
-the revisions, choose a revision to view changes along, starting
-at the common ancestor of both revisions (i.e., use a \"...\"
-range)."
-  (interactive
-   (pcase-let ((`(,revA ,revB) (magit-ediff-compare--read-revisions
-                                nil current-prefix-arg)))
-     (nconc (list revA revB)
-            (magit-ediff-read-files revA revB))))
-  (magit-with-toplevel
-    (let ((conf (current-window-configuration))
-          (bufA (if revA
-                    (magit-get-revision-buffer revA fileA)
-                  (get-file-buffer fileA)))
-          (bufB (if revB
-                    (magit-get-revision-buffer revB fileB)
-                  (get-file-buffer fileB))))
-      (ediff-buffers
-       (or bufA (if revA
-                    (magit-find-file-noselect revA fileA)
-                  (find-file-noselect fileA)))
-       (or bufB (if revB
-                    (magit-find-file-noselect revB fileB)
-                  (find-file-noselect fileB)))
-       `((lambda ()
-           (setq-local
-            ediff-quit-hook
-            (lambda ()
-              ,@(unless bufA '((ediff-kill-buffer-carefully ediff-buffer-A)))
-              ,@(unless bufB '((ediff-kill-buffer-carefully ediff-buffer-B)))
-              (let ((magit-ediff-previous-winconf ,conf))
-                (run-hooks 'magit-ediff-quit-hook))))))
-       'ediff-revision))))
-
-(defun magit-ediff-compare--read-revisions (&optional arg mbase)
-  (let ((input (or arg (magit-diff-read-range-or-commit
-                        "Compare range or commit"
-                        nil mbase))))
-    (--if-let (magit-split-range input)
-        (-cons-to-list it)
-      (list input nil))))
-
-(defun magit-ediff-read-files (revA revB &optional fileB)
-  "Read file in REVB, return it and the corresponding file in REVA.
-When FILEB is non-nil, use this as REVB's file instead of
-prompting for it."
-  (unless fileB
-    (setq fileB (magit-read-file-choice
-                 (format "File to compare between %s and %s"
-                         revA (or revB "the working tree"))
-                 (magit-changed-files revA revB)
-                 (format "No changed files between %s and %s"
-                         revA (or revB "the working tree")))))
-  (list (or (car (member fileB (magit-revision-files revA)))
-            (cdr (assoc fileB (magit-renamed-files revB revA)))
-            (magit-read-file-choice
-             (format "File in %s to compare with %s in %s"
-                     revA fileB (or revB "the working tree"))
-             (magit-changed-files revB revA)
-             (format "No files have changed between %s and %s"
-                     revA revB)))
-        fileB))
-
-;;;###autoload
-(defun magit-ediff-dwim ()
-  "Compare, stage, or resolve using Ediff.
-This command tries to guess what file, and what commit or range
-the user wants to compare, stage, or resolve using Ediff.  It
-might only be able to guess either the file, or range or commit,
-in which case the user is asked about the other.  It might not
-always guess right, in which case the appropriate `magit-ediff-*'
-command has to be used explicitly.  If it cannot read the user's
-mind at all, then it asks the user for a command to run."
-  (interactive)
-  (magit-section-case
-    (hunk (save-excursion
-            (goto-char (oref (oref it parent) start))
-            (magit-ediff-dwim)))
-    (t
-     (let ((range (magit-diff--dwim))
-           (file (magit-current-file))
-           command revA revB)
-       (pcase range
-         ((and (guard (not magit-ediff-dwim-show-on-hunks))
-               (or `unstaged `staged))
-          (setq command (if (magit-anything-unmerged-p)
-                            #'magit-ediff-resolve
-                          #'magit-ediff-stage)))
-         (`unstaged (setq command #'magit-ediff-show-unstaged))
-         (`staged (setq command #'magit-ediff-show-staged))
-         (`(commit . ,value)
-          (setq command #'magit-ediff-show-commit)
-          (setq revB value))
-         (`(stash . ,value)
-          (setq command #'magit-ediff-show-stash)
-          (setq revB value))
-         ((pred stringp)
-          (pcase-let ((`(,a ,b) (magit-ediff-compare--read-revisions range)))
-            (setq command #'magit-ediff-compare)
-            (setq revA a)
-            (setq revB b)))
-         (_
-          (when (derived-mode-p 'magit-diff-mode)
-            (pcase (magit-diff-type)
-              (`committed (pcase-let ((`(,a ,b)
-                                       (magit-ediff-compare--read-revisions
-                                        (car magit-refresh-args))))
-                            (setq revA a)
-                            (setq revB b)))
-              ((guard (not magit-ediff-dwim-show-on-hunks))
-               (setq command #'magit-ediff-stage))
-              (`unstaged  (setq command #'magit-ediff-show-unstaged))
-              (`staged    (setq command #'magit-ediff-show-staged))
-              (`undefined (setq command nil))
-              (_          (setq command nil))))))
-       (cond ((not command)
-              (call-interactively
-               (magit-read-char-case
-                   "Failed to read your mind; do you want to " t
-                 (?c "[c]ommit"  'magit-ediff-show-commit)
-                 (?r "[r]ange"   'magit-ediff-compare)
-                 (?s "[s]tage"   'magit-ediff-stage)
-                 (?v "resol[v]e" 'magit-ediff-resolve))))
-             ((eq command 'magit-ediff-compare)
-              (apply 'magit-ediff-compare revA revB
-                     (magit-ediff-read-files revA revB file)))
-             ((eq command 'magit-ediff-show-commit)
-              (magit-ediff-show-commit revB))
-             ((eq command 'magit-ediff-show-stash)
-              (magit-ediff-show-stash revB))
-             (file
-              (funcall command file))
-             (t
-              (call-interactively command)))))))
-
-;;;###autoload
-(defun magit-ediff-show-staged (file)
-  "Show staged changes using Ediff.
-
-This only allows looking at the changes; to stage, unstage,
-and discard changes using Ediff, use `magit-ediff-stage'.
-
-FILE must be relative to the top directory of the repository."
-  (interactive
-   (list (magit-read-file-choice "Show staged changes for file"
-                                 (magit-staged-files)
-                                 "No staged files")))
-  (let ((conf (current-window-configuration))
-        (bufA (magit-get-revision-buffer "HEAD" file))
-        (bufB (get-buffer (concat file ".~{index}~"))))
-    (ediff-buffers
-     (or bufA (magit-find-file-noselect "HEAD" file))
-     (or bufB (magit-find-file-index-noselect file t))
-     `((lambda ()
-         (setq-local
-          ediff-quit-hook
-          (lambda ()
-            ,@(unless bufA '((ediff-kill-buffer-carefully ediff-buffer-A)))
-            ,@(unless bufB '((ediff-kill-buffer-carefully ediff-buffer-B)))
-            (let ((magit-ediff-previous-winconf ,conf))
-              (run-hooks 'magit-ediff-quit-hook))))))
-     'ediff-buffers)))
-
-;;;###autoload
-(defun magit-ediff-show-unstaged (file)
-  "Show unstaged changes using Ediff.
-
-This only allows looking at the changes; to stage, unstage,
-and discard changes using Ediff, use `magit-ediff-stage'.
-
-FILE must be relative to the top directory of the repository."
-  (interactive
-   (list (magit-read-file-choice "Show unstaged changes for file"
-                                 (magit-unstaged-files)
-                                 "No unstaged files")))
-  (magit-with-toplevel
-    (let ((conf (current-window-configuration))
-          (bufA (get-buffer (concat file ".~{index}~")))
-          (bufB (get-file-buffer file)))
-      (ediff-buffers
-       (or bufA (magit-find-file-index-noselect file t))
-       (or bufB (find-file-noselect file))
-       `((lambda ()
-           (setq-local
-            ediff-quit-hook
-            (lambda ()
-              ,@(unless bufA '((ediff-kill-buffer-carefully ediff-buffer-A)))
-              ,@(unless bufB '((ediff-kill-buffer-carefully ediff-buffer-B)))
-              (let ((magit-ediff-previous-winconf ,conf))
-                (run-hooks 'magit-ediff-quit-hook))))))
-       'ediff-buffers))))
-
-;;;###autoload
-(defun magit-ediff-show-working-tree (file)
-  "Show changes between `HEAD' and working tree using Ediff.
-FILE must be relative to the top directory of the repository."
-  (interactive
-   (list (magit-read-file-choice "Show changes in file"
-                                 (magit-changed-files "HEAD")
-                                 "No changed files")))
-  (magit-with-toplevel
-    (let ((conf (current-window-configuration))
-          (bufA (magit-get-revision-buffer "HEAD" file))
-          (bufB (get-file-buffer file)))
-      (ediff-buffers
-       (or bufA (magit-find-file-noselect "HEAD" file))
-       (or bufB (find-file-noselect file))
-       `((lambda ()
-           (setq-local
-            ediff-quit-hook
-            (lambda ()
-              ,@(unless bufA '((ediff-kill-buffer-carefully ediff-buffer-A)))
-              ,@(unless bufB '((ediff-kill-buffer-carefully ediff-buffer-B)))
-              (let ((magit-ediff-previous-winconf ,conf))
-                (run-hooks 'magit-ediff-quit-hook))))))
-       'ediff-buffers))))
-
-;;;###autoload
-(defun magit-ediff-show-commit (commit)
-  "Show changes introduced by COMMIT using Ediff."
-  (interactive (list (magit-read-branch-or-commit "Revision")))
-  (let ((revA (concat commit "^"))
-        (revB commit))
-    (apply #'magit-ediff-compare
-           revA revB
-           (magit-ediff-read-files revA revB (magit-current-file)))))
-
-;;;###autoload
-(defun magit-ediff-show-stash (stash)
-  "Show changes introduced by STASH using Ediff.
-`magit-ediff-show-stash-with-index' controls whether a
-three-buffer Ediff is used in order to distinguish changes in the
-stash that were staged."
-  (interactive (list (magit-read-stash "Stash")))
-  (pcase-let* ((revA (concat stash "^1"))
-               (revB (concat stash "^2"))
-               (revC stash)
-               (`(,fileA ,fileC) (magit-ediff-read-files revA revC))
-               (fileB fileC))
-    (if (and magit-ediff-show-stash-with-index
-             (member fileA (magit-changed-files revB revA)))
-        (let ((conf (current-window-configuration))
-              (bufA (magit-get-revision-buffer revA fileA))
-              (bufB (magit-get-revision-buffer revB fileB))
-              (bufC (magit-get-revision-buffer revC fileC)))
-          (ediff-buffers3
-           (or bufA (magit-find-file-noselect revA fileA))
-           (or bufB (magit-find-file-noselect revB fileB))
-           (or bufC (magit-find-file-noselect revC fileC))
-           `((lambda ()
-               (setq-local
-                ediff-quit-hook
-                (lambda ()
-                  ,@(unless bufA
-                      '((ediff-kill-buffer-carefully ediff-buffer-A)))
-                  ,@(unless bufB
-                      '((ediff-kill-buffer-carefully ediff-buffer-B)))
-                  ,@(unless bufC
-                      '((ediff-kill-buffer-carefully ediff-buffer-C)))
-                  (let ((magit-ediff-previous-winconf ,conf))
-                    (run-hooks 'magit-ediff-quit-hook))))))
-           'ediff-buffers3))
-      (magit-ediff-compare revA revC fileA fileC))))
-
-(defun magit-ediff-cleanup-auxiliary-buffers ()
-  (let* ((ctl-buf ediff-control-buffer)
-         (ctl-win (ediff-get-visible-buffer-window ctl-buf))
-         (ctl-frm ediff-control-frame)
-         (main-frame (cond ((window-live-p ediff-window-A)
-                            (window-frame ediff-window-A))
-                           ((window-live-p ediff-window-B)
-                            (window-frame ediff-window-B)))))
-    (ediff-kill-buffer-carefully ediff-diff-buffer)
-    (ediff-kill-buffer-carefully ediff-custom-diff-buffer)
-    (ediff-kill-buffer-carefully ediff-fine-diff-buffer)
-    (ediff-kill-buffer-carefully ediff-tmp-buffer)
-    (ediff-kill-buffer-carefully ediff-error-buffer)
-    (ediff-kill-buffer-carefully ediff-msg-buffer)
-    (ediff-kill-buffer-carefully ediff-debug-buffer)
-    (when (boundp 'ediff-patch-diagnostics)
-      (ediff-kill-buffer-carefully ediff-patch-diagnostics))
-    (cond ((and (ediff-window-display-p)
-                (frame-live-p ctl-frm))
-           (delete-frame ctl-frm))
-          ((window-live-p ctl-win)
-           (delete-window ctl-win)))
-    (unless (ediff-multiframe-setup-p)
-      (ediff-kill-bottom-toolbar))
-    (ediff-kill-buffer-carefully ctl-buf)
-    (when (frame-live-p main-frame)
-      (select-frame main-frame))))
-
-(defun magit-ediff-restore-previous-winconf ()
-  (set-window-configuration magit-ediff-previous-winconf))
-
-(provide 'magit-ediff)
-;;; magit-ediff.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.elc
deleted file mode 100644
index eba63738909b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-ediff.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.el
deleted file mode 100644
index a9e049481d6b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.el
+++ /dev/null
@@ -1,700 +0,0 @@
-;;; magit-extras.el --- additional functionality for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2008-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Additional functionality for Magit.
-
-;;; Code:
-
-(require 'magit)
-
-(declare-function dired-read-shell-command "dired-aux" (prompt arg files))
-
-(defgroup magit-extras nil
-  "Additional functionality for Magit."
-  :group 'magit-extensions)
-
-;;; External Tools
-
-(defcustom magit-gitk-executable
-  (or (and (eq system-type 'windows-nt)
-           (let ((exe (magit-git-string
-                       "-c" "alias.X=!x() { which \"$1\" | cygpath -mf -; }; x"
-                       "X" "gitk.exe")))
-             (and exe (file-executable-p exe) exe)))
-      (executable-find "gitk") "gitk")
-  "The Gitk executable."
-  :group 'magit-extras
-  :set-after '(magit-git-executable)
-  :type 'string)
-
-;;;###autoload
-(defun magit-run-git-gui ()
-  "Run `git gui' for the current git repository."
-  (interactive)
-  (magit-with-toplevel
-    (magit-process-file magit-git-executable nil 0 nil "gui")))
-
-;;;###autoload
-(defun magit-run-git-gui-blame (commit filename &optional linenum)
-  "Run `git gui blame' on the given FILENAME and COMMIT.
-Interactively run it for the current file and the `HEAD', with a
-prefix or when the current file cannot be determined let the user
-choose.  When the current buffer is visiting FILENAME instruct
-blame to center around the line point is on."
-  (interactive
-   (let (revision filename)
-     (when (or current-prefix-arg
-               (not (setq revision "HEAD"
-                          filename (magit-file-relative-name nil 'tracked))))
-       (setq revision (magit-read-branch-or-commit "Blame from revision"))
-       (setq filename (magit-read-file-from-rev revision "Blame file")))
-     (list revision filename
-           (and (equal filename
-                       (ignore-errors
-                         (magit-file-relative-name buffer-file-name)))
-                (line-number-at-pos)))))
-  (magit-with-toplevel
-    (apply #'magit-process-file magit-git-executable nil 0 nil "gui" "blame"
-           `(,@(and linenum (list (format "--line=%d" linenum)))
-             ,commit
-             ,filename))))
-
-;;;###autoload
-(defun magit-run-gitk ()
-  "Run `gitk' in the current repository."
-  (interactive)
-  (magit-process-file magit-gitk-executable nil 0))
-
-;;;###autoload
-(defun magit-run-gitk-branches ()
-  "Run `gitk --branches' in the current repository."
-  (interactive)
-  (magit-process-file magit-gitk-executable nil 0 nil "--branches"))
-
-;;;###autoload
-(defun magit-run-gitk-all ()
-  "Run `gitk --all' in the current repository."
-  (interactive)
-  (magit-process-file magit-gitk-executable nil 0 nil "--all"))
-
-;;; Emacs Tools
-
-;;;###autoload
-(defun ido-enter-magit-status ()
-  "Drop into `magit-status' from file switching.
-
-To make this command available use something like:
-
-  (add-hook \\='ido-setup-hook
-            (lambda ()
-              (define-key ido-completion-map
-                (kbd \"C-x g\") \\='ido-enter-magit-status)))
-
-Starting with Emacs 25.1 the Ido keymaps are defined just once
-instead of every time Ido is invoked, so now you can modify it
-like pretty much every other keymap:
-
-  (define-key ido-common-completion-map
-    (kbd \"C-x g\") \\='ido-enter-magit-status)"
-  (interactive)
-  (with-no-warnings ; FIXME these are internal variables
-    (setq ido-exit 'fallback fallback 'magit-status))
-  (exit-minibuffer))
-
-;;;###autoload
-(defun magit-dired-jump (&optional other-window)
-  "Visit file at point using Dired.
-With a prefix argument, visit in another window.  If there
-is no file at point, then instead visit `default-directory'."
-  (interactive "P")
-  (dired-jump other-window
-              (when-let ((file (magit-file-at-point)))
-                (expand-file-name (if (file-directory-p file)
-                                      (file-name-as-directory file)
-                                    file)))))
-
-;;;###autoload
-(defun magit-dired-log (&optional follow)
-  "Show log for all marked files, or the current file."
-  (interactive "P")
-  (if-let ((topdir (magit-toplevel default-directory)))
-      (let ((args (car (magit-log-arguments)))
-            (files (dired-get-marked-files nil nil #'magit-file-tracked-p)))
-        (unless files
-          (user-error "No marked file is being tracked by Git"))
-        (when (and follow
-                   (not (member "--follow" args))
-                   (not (cdr files)))
-          (push "--follow" args))
-        (magit-mode-setup-internal
-         #'magit-log-mode
-         (list (list (or (magit-get-current-branch) "HEAD"))
-               args
-               (let ((default-directory topdir))
-                 (mapcar #'file-relative-name files)))
-         magit-log-buffer-file-locked))
-    (magit--not-inside-repository-error)))
-
-;;;###autoload
-(defun magit-do-async-shell-command (file)
-  "Open FILE with `dired-do-async-shell-command'.
-Interactively, open the file at point."
-  (interactive (list (or (magit-file-at-point)
-                         (completing-read "Act on file: "
-                                          (magit-list-files)))))
-  (require 'dired-aux)
-  (dired-do-async-shell-command
-   (dired-read-shell-command "& on %s: " current-prefix-arg (list file))
-   nil (list file)))
-
-;;; Shift Selection
-
-(defun magit--turn-on-shift-select-mode-p ()
-  (and shift-select-mode
-       this-command-keys-shift-translated
-       (not mark-active)
-       (not (eq (car-safe transient-mark-mode) 'only))))
-
-;;;###autoload
-(defun magit-previous-line (&optional arg try-vscroll)
-  "Like `previous-line' but with Magit-specific shift-selection.
-
-Magit's selection mechanism is based on the region but selects an
-area that is larger than the region.  This causes `previous-line'
-when invoked while holding the shift key to move up one line and
-thereby select two lines.  When invoked inside a hunk body this
-command does not move point on the first invocation and thereby
-it only selects a single line.  Which inconsistency you prefer
-is a matter of preference."
-  (declare (interactive-only
-            "use `forward-line' with negative argument instead."))
-  (interactive "p\np")
-  (unless arg (setq arg 1))
-  (let ((stay (or (magit-diff-inside-hunk-body-p)
-                  (magit-section-position-in-heading-p))))
-    (if (and stay (= arg 1) (magit--turn-on-shift-select-mode-p))
-        (push-mark nil nil t)
-      (with-no-warnings
-        (handle-shift-selection)
-        (previous-line (if stay (max (1- arg) 1) arg) try-vscroll)))))
-
-;;;###autoload
-(defun magit-next-line (&optional arg try-vscroll)
-  "Like `next-line' but with Magit-specific shift-selection.
-
-Magit's selection mechanism is based on the region but selects
-an area that is larger than the region.  This causes `next-line'
-when invoked while holding the shift key to move down one line
-and thereby select two lines.  When invoked inside a hunk body
-this command does not move point on the first invocation and
-thereby it only selects a single line.  Which inconsistency you
-prefer is a matter of preference."
-  (declare (interactive-only forward-line))
-  (interactive "p\np")
-  (unless arg (setq arg 1))
-  (let ((stay (or (magit-diff-inside-hunk-body-p)
-                  (magit-section-position-in-heading-p))))
-    (if (and stay (= arg 1) (magit--turn-on-shift-select-mode-p))
-        (push-mark nil nil t)
-      (with-no-warnings
-        (handle-shift-selection)
-        (next-line (if stay (max (1- arg) 1) arg) try-vscroll)))))
-
-;;; Clean
-
-;;;###autoload
-(defun magit-clean (&optional arg)
-  "Remove untracked files from the working tree.
-With a prefix argument also remove ignored files,
-with two prefix arguments remove ignored files only.
-\n(git clean -f -d [-x|-X])"
-  (interactive "p")
-  (when (yes-or-no-p (format "Remove %s files? "
-                             (pcase arg
-                               (1 "untracked")
-                               (4 "untracked and ignored")
-                               (_ "ignored"))))
-    (magit-wip-commit-before-change)
-    (magit-run-git "clean" "-f" "-d" (pcase arg (4 "-x") (16 "-X")))))
-
-(put 'magit-clean 'disabled t)
-
-;;; Gitignore
-
-;;;###autoload (autoload 'magit-gitignore-popup "magit-extras" nil t)
-(magit-define-popup magit-gitignore-popup
-  "Popup console for gitignore commands."
-  :man-page "gitignore"
-  :actions '((?l "ignore locally"  magit-gitignore-locally)
-             (?g "ignore globally" magit-gitignore))
-  :max-action-columns 1)
-
-;;;###autoload
-(defun magit-gitignore (file-or-pattern &optional local)
-  "Instruct Git to ignore FILE-OR-PATTERN.
-With a prefix argument only ignore locally."
-  (interactive (list (magit-gitignore-read-pattern current-prefix-arg)
-                     current-prefix-arg))
-  (let ((gitignore
-         (if local
-             (magit-git-dir (convert-standard-filename "info/exclude"))
-           (expand-file-name ".gitignore" (magit-toplevel)))))
-    (make-directory (file-name-directory gitignore) t)
-    (with-temp-buffer
-      (when (file-exists-p gitignore)
-        (insert-file-contents gitignore))
-      (goto-char (point-max))
-      (unless (bolp)
-        (insert "\n"))
-      (insert (replace-regexp-in-string "\\(\\\\*\\)" "\\1\\1" file-or-pattern))
-      (insert "\n")
-      (write-region nil nil gitignore))
-    (if local
-        (magit-refresh)
-      (magit-run-git "add" ".gitignore"))))
-
-;;;###autoload
-(defun magit-gitignore-locally (file-or-pattern)
-  "Instruct Git to locally ignore FILE-OR-PATTERN."
-  (interactive (list (magit-gitignore-read-pattern t)))
-  (magit-gitignore file-or-pattern t))
-
-(defun magit-gitignore-read-pattern (local)
-  (let* ((default (magit-current-file))
-         (choices
-          (delete-dups
-           (--mapcat
-            (cons (concat "/" it)
-                  (when-let ((ext (file-name-extension it)))
-                    (list (concat "/" (file-name-directory "foo") "*." ext)
-                          (concat "*." ext))))
-            (magit-untracked-files)))))
-    (when default
-      (setq default (concat "/" default))
-      (unless (member default choices)
-        (setq default (concat "*." (file-name-extension default)))
-        (unless (member default choices)
-          (setq default nil))))
-    (magit-completing-read (concat "File or pattern to ignore"
-                                   (and local " locally"))
-                           choices nil nil nil nil default)))
-
-;;; ChangeLog
-
-;;;###autoload
-(defun magit-add-change-log-entry (&optional whoami file-name other-window)
-  "Find change log file and add date entry and item for current change.
-This differs from `add-change-log-entry' (which see) in that
-it acts on the current hunk in a Magit buffer instead of on
-a position in a file-visiting buffer."
-  (interactive (list current-prefix-arg
-                     (prompt-for-change-log-name)))
-  (let (buf pos)
-    (save-window-excursion
-      (call-interactively #'magit-diff-visit-file)
-      (setq buf (current-buffer))
-      (setq pos (point)))
-    (save-excursion
-      (with-current-buffer buf
-        (goto-char pos)
-        (add-change-log-entry whoami file-name other-window)))))
-
-;;;###autoload
-(defun magit-add-change-log-entry-other-window (&optional whoami file-name)
-  "Find change log file in other window and add entry and item.
-This differs from `add-change-log-entry-other-window' (which see)
-in that it acts on the current hunk in a Magit buffer instead of
-on a position in a file-visiting buffer."
-  (interactive (and current-prefix-arg
-                    (list current-prefix-arg
-                          (prompt-for-change-log-name))))
-  (magit-add-change-log-entry whoami file-name t))
-
-;;; Edit Line Commit
-
-;;;###autoload
-(defun magit-edit-line-commit (&optional type)
-  "Edit the commit that added the current line.
-
-With a prefix argument edit the commit that removes the line,
-if any.  The commit is determined using `git blame' and made
-editable using `git rebase --interactive' if it is reachable
-from `HEAD', or by checking out the commit (or a branch that
-points at it) otherwise."
-  (interactive (list (and current-prefix-arg 'removal)))
-  (let* ((chunk (magit-current-blame-chunk (or type 'addition)))
-         (rev   (oref chunk orig-rev)))
-    (if (equal rev "0000000000000000000000000000000000000000")
-        (message "This line has not been committed yet")
-      (let ((rebase (magit-rev-ancestor-p rev "HEAD"))
-            (file   (expand-file-name (oref chunk orig-file)
-                                      (magit-toplevel))))
-        (if rebase
-            (let ((magit--rebase-published-symbol 'edit-published))
-              (magit-rebase-edit-commit rev (magit-rebase-arguments)))
-          (magit-checkout (or (magit-rev-branch rev) rev)))
-        (unless (and buffer-file-name
-                     (file-equal-p file buffer-file-name))
-          (let ((blame-type (and magit-blame-mode magit-blame-type)))
-            (if rebase
-                (set-process-sentinel
-                 magit-this-process
-                 (lambda (process event)
-                   (magit-sequencer-process-sentinel process event)
-                   (when (eq (process-status process) 'exit)
-                     (find-file file)
-                     (when blame-type
-                       (magit-blame--pre-blame-setup blame-type)
-                       (magit-blame--run)))))
-              (find-file file)
-              (when blame-type
-                (magit-blame--pre-blame-setup blame-type)
-                (magit-blame--run)))))))))
-
-(put 'magit-edit-line-commit 'disabled t)
-
-(defun magit-diff-edit-hunk-commit ()
-  "From a hunk, edit the respective commit and visit the file.
-
-First visit the file being modified by the hunk at the correct
-location using `magit-diff-visit-file'.  This actually visits a
-blob.  When point is on a diff header, not within an individual
-hunk, then this visits the blob the first hunk is about.
-
-Then invoke `magit-edit-line-commit', which uses an interactive
-rebase to make the commit editable, or if that is not possible
-because the commit is not reachable from `HEAD' by checking out
-that commit directly.  This also causes the actual worktree file
-to be visited.
-
-Neither the blob nor the file buffer are killed when finishing
-the rebase.  If that is undesirable, then it might be better to
-use `magit-rebase-edit-command' instead of this command."
-  (interactive)
-  (let ((magit-diff-visit-previous-blob nil))
-    (magit-diff-visit-file (--if-let (magit-file-at-point)
-                               (expand-file-name it)
-                             (user-error "No file at point"))
-                           nil 'switch-to-buffer))
-  (magit-edit-line-commit))
-
-(put 'magit-diff-edit-hunk-commit 'disabled t)
-
-;;; Reshelve
-
-;;;###autoload
-(defun magit-reshelve-since (rev)
-  "Change the author and committer dates of the commits since REV.
-
-Ask the user for the first reachable commit whose dates should
-be changed.  The read the new date for that commit.  The initial
-minibuffer input and the previous history element offer good
-values.  The next commit will be created one minute later and so
-on.
-
-This command is only intended for interactive use and should only
-be used on highly rearranged and unpublished history."
-  (interactive (list nil))
-  (cond
-   ((not rev)
-    (let ((backup (concat "refs/original/refs/heads/"
-                          (magit-get-current-branch))))
-      (when (and (magit-ref-p backup)
-                 (not (magit-y-or-n-p
-                       "Backup ref %s already exists.  Override? " backup)))
-        (user-error "Abort")))
-    (magit-log-select 'magit-reshelve-since
-      "Type %p on a commit to reshelve it and the commits above it,"))
-   (t
-    (cl-flet ((adjust (time offset)
-                      (format-time-string
-                       "%F %T %z"
-                       (+ (floor time)
-                          (* offset 60)
-                          (- (car (decode-time time)))))))
-      (let* ((start (concat rev "^"))
-             (range (concat start ".." (magit-get-current-branch)))
-             (time-rev (adjust (float-time (string-to-number
-                                            (magit-rev-format "%at" start)))
-                               1))
-             (time-now (adjust (float-time)
-                               (- (string-to-number
-                                   (magit-git-string "rev-list" "--count"
-                                                     range))))))
-        (push time-rev magit--reshelve-history)
-        (let ((date (floor
-                     (float-time
-                      (date-to-time
-                       (read-string "Date for first commit: "
-                                    time-now 'magit--reshelve-history))))))
-          (magit-with-toplevel
-            (magit-run-git-async
-             "filter-branch" "--force" "--env-filter"
-             (format "case $GIT_COMMIT in %s\nesac"
-                     (mapconcat (lambda (rev)
-                                  (prog1 (format "%s) \
-export GIT_AUTHOR_DATE=\"%s\"; \
-export GIT_COMMITTER_DATE=\"%s\";;" rev date date)
-                                    (cl-incf date 60)))
-                                (magit-git-lines "rev-list" "--reverse"
-                                                 range)
-                                " "))
-             range "--")
-            (set-process-sentinel
-             magit-this-process
-             (lambda (process event)
-               (when (memq (process-status process) '(exit signal))
-                 (if (> (process-exit-status process) 0)
-                     (magit-process-sentinel process event)
-                   (process-put process 'inhibit-refresh t)
-                   (magit-process-sentinel process event)
-                   (magit-run-git "update-ref" "-d"
-                                  (concat "refs/original/refs/heads/"
-                                          (magit-get-current-branch))))))))))))))
-
-;;; Revision Stack
-
-(defvar magit-revision-stack nil)
-
-(defcustom magit-pop-revision-stack-format
-  '("[%N: %h] " "%N: %H\n   %s\n" "\\[\\([0-9]+\\)[]:]")
-  "Control how `magit-pop-revision-stack' inserts a revision.
-
-The command `magit-pop-revision-stack' inserts a representation
-of the revision last pushed to the `magit-revision-stack' into
-the current buffer.  It inserts text at point and/or near the end
-of the buffer, and removes the consumed revision from the stack.
-
-The entries on the stack have the format (HASH TOPLEVEL) and this
-option has the format (POINT-FORMAT EOB-FORMAT INDEX-REGEXP), all
-of which may be nil or a string (though either one of EOB-FORMAT
-or POINT-FORMAT should be a string, and if INDEX-REGEXP is
-non-nil, then the two formats should be too).
-
-First INDEX-REGEXP is used to find the previously inserted entry,
-by searching backward from point.  The first submatch must match
-the index number.  That number is incremented by one, and becomes
-the index number of the entry to be inserted.  If you don't want
-to number the inserted revisions, then use nil for INDEX-REGEXP.
-
-If INDEX-REGEXP is non-nil, then both POINT-FORMAT and EOB-FORMAT
-should contain \"%N\", which is replaced with the number that was
-determined in the previous step.
-
-Both formats, if non-nil and after removing %N, are then expanded
-using `git show --format=FORMAT ...' inside TOPLEVEL.
-
-The expansion of POINT-FORMAT is inserted at point, and the
-expansion of EOB-FORMAT is inserted at the end of the buffer (if
-the buffer ends with a comment, then it is inserted right before
-that)."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-commands
-  :type '(list (choice (string :tag "Insert at point format")
-                       (cons (string :tag "Insert at point format")
-                             (repeat (string :tag "Argument to git show")))
-                       (const :tag "Don't insert at point" nil))
-               (choice (string :tag "Insert at eob format")
-                       (cons (string :tag "Insert at eob format")
-                             (repeat (string :tag "Argument to git show")))
-                       (const :tag "Don't insert at eob" nil))
-               (choice (regexp :tag "Find index regexp")
-                       (const :tag "Don't number entries" nil))))
-
-(defun magit-pop-revision-stack (rev toplevel)
-  "Insert a representation of a revision into the current buffer.
-
-Pop a revision from the `magit-revision-stack' and insert it into
-the current buffer according to `magit-pop-revision-stack-format'.
-Revisions can be put on the stack using `magit-copy-section-value'
-and `magit-copy-buffer-revision'.
-
-If the stack is empty or with a prefix argument, instead read a
-revision in the minibuffer.  By using the minibuffer history this
-allows selecting an item which was popped earlier or to insert an
-arbitrary reference or revision without first pushing it onto the
-stack.
-
-When reading the revision from the minibuffer, then it might not
-be possible to guess the correct repository.  When this command
-is called inside a repository (e.g. while composing a commit
-message), then that repository is used.  Otherwise (e.g. while
-composing an email) then the repository recorded for the top
-element of the stack is used (even though we insert another
-revision).  If not called inside a repository and with an empty
-stack, or with two prefix arguments, then read the repository in
-the minibuffer too."
-  (interactive
-   (if (or current-prefix-arg (not magit-revision-stack))
-       (let ((default-directory
-               (or (and (not (= (prefix-numeric-value current-prefix-arg) 16))
-                        (or (magit-toplevel)
-                            (cadr (car magit-revision-stack))))
-                   (magit-read-repository))))
-         (list (magit-read-branch-or-commit "Insert revision")
-               default-directory))
-     (push (caar magit-revision-stack) magit-revision-history)
-     (pop magit-revision-stack)))
-  (if rev
-      (pcase-let ((`(,pnt-format ,eob-format ,idx-format)
-                   magit-pop-revision-stack-format))
-        (let ((default-directory toplevel)
-              (idx (and idx-format
-                        (save-excursion
-                          (if (re-search-backward idx-format nil t)
-                              (number-to-string
-                               (1+ (string-to-number (match-string 1))))
-                            "1"))))
-              pnt-args eob-args)
-          (when (listp pnt-format)
-            (setq pnt-args (cdr pnt-format))
-            (setq pnt-format (car pnt-format)))
-          (when (listp eob-format)
-            (setq eob-args (cdr eob-format))
-            (setq eob-format (car eob-format)))
-          (when pnt-format
-            (when idx-format
-              (setq pnt-format
-                    (replace-regexp-in-string "%N" idx pnt-format t t)))
-            (magit-rev-insert-format pnt-format rev pnt-args)
-            (backward-delete-char 1))
-          (when eob-format
-            (when idx-format
-              (setq eob-format
-                    (replace-regexp-in-string "%N" idx eob-format t t)))
-            (save-excursion
-              (goto-char (point-max))
-              (skip-syntax-backward ">s-")
-              (beginning-of-line)
-              (if (and comment-start (looking-at comment-start))
-                  (while (looking-at comment-start)
-                    (forward-line -1))
-                (forward-line)
-                (unless (= (current-column) 0)
-                  (insert ?\n)))
-              (insert ?\n)
-              (magit-rev-insert-format eob-format rev eob-args)
-              (backward-delete-char 1)))))
-    (user-error "Revision stack is empty")))
-
-(define-key git-commit-mode-map
-  (kbd "C-c C-w") 'magit-pop-revision-stack)
-
-;;;###autoload
-(defun magit-copy-section-value ()
-  "Save the value of the current section for later use.
-
-Save the section value to the `kill-ring', and, provided that
-the current section is a commit, branch, or tag section, push
-the (referenced) revision to the `magit-revision-stack' for use
-with `magit-pop-revision-stack'.
-
-When the current section is a branch or a tag, and a prefix
-argument is used, then save the revision at its tip to the
-`kill-ring' instead of the reference name.
-
-When the region is active, then save that to the `kill-ring',
-like `kill-ring-save' would, instead of behaving as described
-above."
-  (interactive)
-  (if (use-region-p)
-      (copy-region-as-kill nil nil 'region)
-    (when-let ((section (magit-current-section))
-               (value (oref section value)))
-      (magit-section-case
-        ((branch commit module-commit tag)
-         (let ((default-directory default-directory) ref)
-           (magit-section-case
-             ((branch tag)
-              (setq ref value))
-             (module-commit
-              (setq default-directory
-                    (file-name-as-directory
-                     (expand-file-name (magit-section-parent-value section)
-                                       (magit-toplevel))))))
-           (setq value (magit-rev-parse value))
-           (push (list value default-directory) magit-revision-stack)
-           (kill-new (message "%s" (or (and current-prefix-arg ref)
-                                       value)))))
-        (t (kill-new (message "%s" value)))))))
-
-;;;###autoload
-(defun magit-copy-buffer-revision ()
-  "Save the revision of the current buffer for later use.
-
-Save the revision shown in the current buffer to the `kill-ring'
-and push it to the `magit-revision-stack'.
-
-This command is mainly intended for use in `magit-revision-mode'
-buffers, the only buffers where it is always unambiguous exactly
-which revision should be saved.
-
-Most other Magit buffers usually show more than one revision, in
-some way or another, so this command has to select one of them,
-and that choice might not always be the one you think would have
-been the best pick.
-
-In such buffers it is often more useful to save the value of
-the current section instead, using `magit-copy-section-value'.
-
-When the region is active, then save that to the `kill-ring',
-like `kill-ring-save' would, instead of behaving as described
-above."
-  (interactive)
-  (if (use-region-p)
-      (copy-region-as-kill nil nil 'region)
-    (when-let ((rev (cond ((memq major-mode '(magit-cherry-mode
-                                              magit-log-select-mode
-                                              magit-reflog-mode
-                                              magit-refs-mode
-                                              magit-revision-mode
-                                              magit-stash-mode
-                                              magit-stashes-mode))
-                           (car magit-refresh-args))
-                          ((memq major-mode '(magit-diff-mode
-                                              magit-log-mode))
-                           (let ((r (caar magit-refresh-args)))
-                             (if (string-match "\\.\\.\\.?\\(.+\\)" r)
-                                 (match-string 1 r)
-                               r)))
-                          ((eq major-mode 'magit-status-mode) "HEAD"))))
-      (when (magit-rev-verify-commit rev)
-        (setq rev (magit-rev-parse rev))
-        (push (list rev default-directory) magit-revision-stack)
-        (kill-new (message "%s" rev))))))
-
-;;; Miscellaneous
-
-;;;###autoload
-(defun magit-abort-dwim ()
-  "Abort current operation.
-Depending on the context, this will abort a merge, a rebase, a
-patch application, a cherry-pick, a revert, or a bisect."
-  (interactive)
-  (cond ((magit-merge-in-progress-p)     (magit-merge-abort))
-        ((magit-rebase-in-progress-p)    (magit-rebase-abort))
-        ((magit-am-in-progress-p)        (magit-am-abort))
-        ((magit-sequencer-in-progress-p) (magit-sequencer-abort))
-        ((magit-bisect-in-progress-p)    (magit-bisect-reset))))
-
-(provide 'magit-extras)
-;;; magit-extras.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.elc
deleted file mode 100644
index 9312a2a5a5fa..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-extras.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.el
deleted file mode 100644
index 8fbe0c58d3d0..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.el
+++ /dev/null
@@ -1,563 +0,0 @@
-;;; magit-files.el --- finding files  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for finding blobs, staged files,
-;; and Git configuration files.  It also implements modes useful in
-;; buffers visiting files and blobs, and the commands used by those
-;; modes.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Find Blob
-
-(defvar magit-find-file-hook nil)
-(add-hook 'magit-find-file-hook #'magit-blob-mode)
-
-;;;###autoload
-(defun magit-find-file (rev file)
-  "View FILE from REV.
-Switch to a buffer visiting blob REV:FILE,
-creating one if none already exists."
-  (interactive (magit-find-file-read-args "Find file"))
-  (switch-to-buffer (magit-find-file-noselect rev file)))
-
-;;;###autoload
-(defun magit-find-file-other-window (rev file)
-  "View FILE from REV, in another window.
-Like `magit-find-file', but create a new window or reuse an
-existing one."
-  (interactive (magit-find-file-read-args "Find file in other window"))
-  (switch-to-buffer-other-window (magit-find-file-noselect rev file)))
-
-(defun magit-find-file-read-args (prompt)
-  (let  ((rev (magit-read-branch-or-commit "Find file from revision")))
-    (list rev (magit-read-file-from-rev rev prompt))))
-
-(defun magit-find-file-noselect (rev file)
-  "Read FILE from REV into a buffer and return the buffer.
-FILE must be relative to the top directory of the repository."
-  (magit-find-file-noselect-1 rev file 'magit-find-file-hook))
-
-(defun magit-find-file-noselect-1 (rev file hookvar &optional revert)
-  "Read FILE from REV into a buffer and return the buffer.
-FILE must be relative to the top directory of the repository.
-An empty REV stands for index."
-  (let ((topdir (magit-toplevel)))
-    (when (file-name-absolute-p file)
-      (setq file (file-relative-name file topdir)))
-    (with-current-buffer (magit-get-revision-buffer-create rev file)
-      (when (or (not magit-buffer-file-name)
-                (if (eq revert 'ask-revert)
-                    (y-or-n-p (format "%s already exists; revert it? "
-                                      (buffer-name))))
-                revert)
-        (setq magit-buffer-revision
-              (if (string= rev "") "{index}" (magit-rev-format "%H" rev)))
-        (setq magit-buffer-refname rev)
-        (setq magit-buffer-file-name (expand-file-name file topdir))
-        (setq default-directory
-              (let ((dir (file-name-directory magit-buffer-file-name)))
-                (if (file-exists-p dir) dir topdir)))
-        (setq-local revert-buffer-function #'magit-revert-rev-file-buffer)
-        (revert-buffer t t)
-        (run-hooks hookvar))
-      (current-buffer))))
-
-(defun magit-get-revision-buffer-create (rev file)
-  (magit-get-revision-buffer rev file t))
-
-(defun magit-get-revision-buffer (rev file &optional create)
-  (funcall (if create 'get-buffer-create 'get-buffer)
-           (format "%s.~%s~" file (if (equal rev "") "index"
-                                    (subst-char-in-string ?/ ?_ rev)))))
-
-(defun magit-revert-rev-file-buffer (_ignore-auto noconfirm)
-  (when (or noconfirm
-            (and (not (buffer-modified-p))
-                 (catch 'found
-                   (dolist (regexp revert-without-query)
-                     (when (string-match regexp magit-buffer-file-name)
-                       (throw 'found t)))))
-            (yes-or-no-p (format "Revert buffer from git %s? "
-                                 (if (equal magit-buffer-refname "") "{index}"
-                                   (concat "revision " magit-buffer-refname)))))
-    (let* ((inhibit-read-only t)
-           (default-directory (magit-toplevel))
-           (file (file-relative-name magit-buffer-file-name))
-           (coding-system-for-read (or coding-system-for-read 'undecided)))
-      (erase-buffer)
-      (magit-git-insert "cat-file" "-p" (concat magit-buffer-refname ":" file))
-      (setq buffer-file-coding-system last-coding-system-used))
-    (let ((buffer-file-name magit-buffer-file-name)
-          (after-change-major-mode-hook
-           (remq 'global-diff-hl-mode-enable-in-buffers
-                 after-change-major-mode-hook)))
-      (normal-mode t))
-    (setq buffer-read-only t)
-    (set-buffer-modified-p nil)
-    (goto-char (point-min))))
-
-;;; Find Index
-
-(defvar magit-find-index-hook nil)
-
-(defun magit-find-file-index-noselect (file &optional revert)
-  "Read FILE from the index into a buffer and return the buffer.
-FILE must to be relative to the top directory of the repository."
-  (magit-find-file-noselect-1 "" file 'magit-find-index-hook
-                              (or revert 'ask-revert)))
-
-(defun magit-update-index ()
-  "Update the index with the contents of the current buffer.
-The current buffer has to be visiting a file in the index, which
-is done using `magit-find-index-noselect'."
-  (interactive)
-  (let ((file (magit-file-relative-name)))
-    (unless (equal magit-buffer-refname "")
-      (user-error "%s isn't visiting the index" file))
-    (if (y-or-n-p (format "Update index with contents of %s" (buffer-name)))
-        (let ((index (make-temp-file "index"))
-              (buffer (current-buffer)))
-          (when magit-wip-before-change-mode
-            (magit-wip-commit-before-change (list file) " before un-/stage"))
-          (let ((coding-system-for-write buffer-file-coding-system))
-            (with-temp-file index
-              (insert-buffer-substring buffer)))
-          (magit-with-toplevel
-            (magit-call-git "update-index" "--cacheinfo"
-                            (substring (magit-git-string "ls-files" "-s" file)
-                                       0 6)
-                            (magit-git-string "hash-object" "-t" "blob" "-w"
-                                              (concat "--path=" file)
-                                              "--" index)
-                            file))
-          (set-buffer-modified-p nil)
-          (when magit-wip-after-apply-mode
-            (magit-wip-commit-after-apply (list file) " after un-/stage")))
-      (message "Abort")))
-  (--when-let (magit-mode-get-buffer 'magit-status-mode)
-    (with-current-buffer it (magit-refresh)))
-  t)
-
-;;; Find Config File
-
-(defun magit-find-git-config-file (filename &optional wildcards)
-  "Edit a file located in the current repository's git directory.
-
-When \".git\", located at the root of the working tree, is a
-regular file, then that makes it cumbersome to open a file
-located in the actual git directory.
-
-This command is like `find-file', except that it temporarily
-binds `default-directory' to the actual git directory, while
-reading the FILENAME."
-  (interactive
-   (let ((default-directory (magit-git-dir)))
-     (find-file-read-args "Find file: "
-                          (confirm-nonexistent-file-or-buffer))))
-  (find-file filename wildcards))
-
-(defun magit-find-git-config-file-other-window (filename &optional wildcards)
-  "Edit a file located in the current repository's git directory, in another window.
-
-When \".git\", located at the root of the working tree, is a
-regular file, then that makes it cumbersome to open a file
-located in the actual git directory.
-
-This command is like `find-file-other-window', except that it
-temporarily binds `default-directory' to the actual git
-directory, while reading the FILENAME."
-  (interactive
-   (let ((default-directory (magit-git-dir)))
-     (find-file-read-args "Find file in other window: "
-                          (confirm-nonexistent-file-or-buffer))))
-  (find-file-other-window filename wildcards))
-
-(defun magit-find-git-config-file-other-frame (filename &optional wildcards)
-  "Edit a file located in the current repository's git directory, in another frame.
-
-When \".git\", located at the root of the working tree, is a
-regular file, then that makes it cumbersome to open a file
-located in the actual git directory.
-
-This command is like `find-file-other-frame', except that it
-temporarily binds `default-directory' to the actual git
-directory, while reading the FILENAME."
-  (interactive
-   (let ((default-directory (magit-git-dir)))
-     (find-file-read-args "Find file in other frame: "
-                          (confirm-nonexistent-file-or-buffer))))
-  (find-file-other-frame filename wildcards))
-
-;;; File Mode
-
-(defvar magit-file-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-xg"    'magit-status)
-    (define-key map "\C-x\M-g" 'magit-dispatch-popup)
-    (define-key map "\C-c\M-g" 'magit-file-popup)
-    map)
-  "Keymap for `magit-file-mode'.")
-
-;;;###autoload (autoload 'magit-file-popup "magit" nil t)
-(magit-define-popup magit-file-popup
-  "Popup console for Magit commands in file-visiting buffers."
-  :actions '((?s "Stage"     magit-stage-file)
-             (?D "Diff..."   magit-diff-buffer-file-popup)
-             (?L "Log..."    magit-log-buffer-file-popup)
-             (?B "Blame..."  magit-blame-popup) nil
-             (?u "Unstage"   magit-unstage-file)
-             (?d "Diff"      magit-diff-buffer-file)
-             (?l "Log"       magit-log-buffer-file)
-             (?b "Blame"     magit-blame)
-             (?p "Prev blob" magit-blob-previous)
-             (?c "Commit"    magit-commit-popup) nil
-             (?t "Trace"     magit-log-trace-definition)
-             (?r (lambda ()
-                   (with-current-buffer magit-pre-popup-buffer
-                     (and (not buffer-file-name)
-                          (propertize "...removal" 'face 'default))))
-                 magit-blame-removal)
-             (?n "Next blob" magit-blob-next)
-             (?e "Edit line" magit-edit-line-commit)
-             nil nil
-             (?f (lambda ()
-                   (with-current-buffer magit-pre-popup-buffer
-                     (and (not buffer-file-name)
-                          (propertize "...reverse" 'face 'default))))
-                 magit-blame-reverse)
-             nil)
-  :max-action-columns 5)
-
-(defvar magit-file-mode-lighter "")
-
-(define-minor-mode magit-file-mode
-  "Enable some Magit features in a file-visiting buffer.
-
-Currently this only adds the following key bindings.
-\n\\{magit-file-mode-map}"
-  :package-version '(magit . "2.2.0")
-  :lighter magit-file-mode-lighter
-  :keymap  magit-file-mode-map)
-
-(defun magit-file-mode-turn-on ()
-  (and buffer-file-name
-       (magit-inside-worktree-p t)
-       (magit-file-mode)))
-
-;;;###autoload
-(define-globalized-minor-mode global-magit-file-mode
-  magit-file-mode magit-file-mode-turn-on
-  :package-version '(magit . "2.13.0")
-  :link '(info-link "(magit)Minor Mode for Buffers Visiting Files")
-  :group 'magit-essentials
-  :group 'magit-modes
-  :init-value t)
-;; Unfortunately `:init-value t' only sets the value of the mode
-;; variable but does not cause the mode function to be called, and we
-;; cannot use `:initialize' to call that explicitly because the option
-;; is defined before the functions, so we have to do it here.
-(cl-eval-when (load)
-  (when global-magit-file-mode
-    (global-magit-file-mode 1)))
-
-;;; Blob Mode
-
-(defvar magit-blob-mode-map
-  (let ((map (make-sparse-keymap)))
-    (cond ((featurep 'jkl)
-           (define-key map "i" 'magit-blob-previous)
-           (define-key map "k" 'magit-blob-next)
-           (define-key map "j" 'magit-blame)
-           (define-key map "l" 'magit-blame-removal)
-           (define-key map "f" 'magit-blame-reverse))
-          (t
-           (define-key map "p" 'magit-blob-previous)
-           (define-key map "n" 'magit-blob-next)
-           (define-key map "b" 'magit-blame)
-           (define-key map "r" 'magit-blame-removal)
-           (define-key map "f" 'magit-blame-reverse)))
-    (define-key map "q" 'magit-kill-this-buffer)
-    map)
-  "Keymap for `magit-blob-mode'.")
-
-(define-minor-mode magit-blob-mode
-  "Enable some Magit features in blob-visiting buffers.
-
-Currently this only adds the following key bindings.
-\n\\{magit-blob-mode-map}"
-  :package-version '(magit . "2.3.0"))
-
-(defun magit-blob-next ()
-  "Visit the next blob which modified the current file."
-  (interactive)
-  (if magit-buffer-file-name
-      (magit-blob-visit (or (magit-blob-successor magit-buffer-revision
-                                                  magit-buffer-file-name)
-                            magit-buffer-file-name)
-                        (line-number-at-pos))
-    (if (buffer-file-name (buffer-base-buffer))
-        (user-error "You have reached the end of time")
-      (user-error "Buffer isn't visiting a file or blob"))))
-
-(defun magit-blob-previous ()
-  "Visit the previous blob which modified the current file."
-  (interactive)
-  (if-let ((file (or magit-buffer-file-name
-                     (buffer-file-name (buffer-base-buffer)))))
-      (--if-let (magit-blob-ancestor magit-buffer-revision file)
-          (magit-blob-visit it (line-number-at-pos))
-        (user-error "You have reached the beginning of time"))
-    (user-error "Buffer isn't visiting a file or blob")))
-
-(defun magit-blob-visit (blob-or-file line)
-  (if (stringp blob-or-file)
-      (find-file blob-or-file)
-    (pcase-let ((`(,rev ,file) blob-or-file))
-      (magit-find-file rev file)
-      (apply #'message "%s (%s %s ago)"
-             (magit-rev-format "%s" rev)
-             (magit--age (magit-rev-format "%ct" rev)))))
-  (goto-char (point-min))
-  (forward-line (1- line)))
-
-(defun magit-blob-ancestor (rev file)
-  (let ((lines (magit-with-toplevel
-                 (magit-git-lines "log" "-2" "--format=%H" "--name-only"
-                                  "--follow" (or rev "HEAD") "--" file))))
-    (if rev (cddr lines) (butlast lines 2))))
-
-(defun magit-blob-successor (rev file)
-  (let ((lines (magit-with-toplevel
-                 (magit-git-lines "log" "--format=%H" "--name-only" "--follow"
-                                  "HEAD" "--" file))))
-    (catch 'found
-      (while lines
-        (if (equal (nth 2 lines) rev)
-            (throw 'found (list (nth 0 lines) (nth 1 lines)))
-          (setq lines (nthcdr 2 lines)))))))
-
-;;; File Commands
-
-(defun magit-file-rename (file newname)
-  "Rename the FILE to NEWNAME.
-If FILE isn't tracked in Git, fallback to using `rename-file'."
-  (interactive
-   (let* ((file (magit-read-file "Rename file"))
-          (dir (file-name-directory file))
-          (newname (read-file-name (format "Rename %s to file: " file)
-                                   (and dir (expand-file-name dir)))))
-     (list (expand-file-name file (magit-toplevel))
-           (expand-file-name newname))))
-  (if (magit-file-tracked-p (magit-convert-filename-for-git file))
-      (let ((oldbuf (get-file-buffer file)))
-        (when (and oldbuf (buffer-modified-p oldbuf))
-          (user-error "Save %s before moving it" file))
-        (when (file-exists-p newname)
-          (user-error "%s already exists" newname))
-        (magit-run-git "mv"
-                       (magit-convert-filename-for-git file)
-                       (magit-convert-filename-for-git newname))
-        (when oldbuf
-          (with-current-buffer oldbuf
-            (let ((buffer-read-only buffer-read-only))
-              (set-visited-file-name newname))
-            (if (fboundp 'vc-refresh-state)
-                (vc-refresh-state)
-              (with-no-warnings
-                (vc-find-file-hook))))))
-    (rename-file file newname current-prefix-arg)
-    (magit-refresh)))
-
-(defun magit-file-untrack (files &optional force)
-  "Untrack the selected FILES or one file read in the minibuffer.
-
-With a prefix argument FORCE do so even when the files have
-staged as well as unstaged changes."
-  (interactive (list (or (--if-let (magit-region-values 'file t)
-                             (progn
-                               (unless (magit-file-tracked-p (car it))
-                                 (user-error "Already untracked"))
-                               (magit-confirm-files 'untrack it "Untrack"))
-                           (list (magit-read-tracked-file "Untrack file"))))
-                     current-prefix-arg))
-  (magit-run-git "rm" "--cached" (and force "--force") "--" files))
-
-(defun magit-file-delete (files &optional force)
-  "Delete the selected FILES or one file read in the minibuffer.
-
-With a prefix argument FORCE do so even when the files have
-uncommitted changes.  When the files aren't being tracked in
-Git, then fallback to using `delete-file'."
-  (interactive (list (--if-let (magit-region-values 'file t)
-                         (magit-confirm-files 'delete it "Delete")
-                       (list (magit-read-file "Delete file")))
-                     current-prefix-arg))
-  (if (magit-file-tracked-p (car files))
-      (magit-call-git "rm" (and force "--force") "--" files)
-    (let ((topdir (magit-toplevel)))
-      (dolist (file files)
-        (delete-file (expand-file-name file topdir) t))))
-  (magit-refresh))
-
-;;;###autoload
-(defun magit-file-checkout (rev file)
-  "Checkout FILE from REV."
-  (interactive
-   (let ((rev (magit-read-branch-or-commit
-               "Checkout from revision" magit-buffer-revision)))
-     (list rev (magit-read-file-from-rev rev "Checkout file"))))
-  (magit-with-toplevel
-    (magit-run-git "checkout" rev "--" file)))
-
-;;; Read File
-
-(defvar magit-read-file-hist nil)
-
-(defun magit-read-file-from-rev (rev prompt &optional default)
-  (let ((files (magit-revision-files rev)))
-    (magit-completing-read
-     prompt files nil t nil 'magit-read-file-hist
-     (car (member (or default (magit-current-file)) files)))))
-
-(defun magit-read-file (prompt &optional tracked-only)
-  (let ((choices (nconc (magit-list-files)
-                        (unless tracked-only (magit-untracked-files)))))
-    (magit-completing-read prompt choices nil t nil nil
-                           (car (member (or (magit-section-when (file submodule))
-                                            (magit-file-relative-name
-                                             nil tracked-only))
-                                        choices)))))
-
-(defun magit-read-tracked-file (prompt)
-  (magit-read-file prompt t))
-
-(defun magit-read-file-choice (prompt files &optional error default)
-  "Read file from FILES.
-
-If FILES has only one member, return that instead of prompting.
-If FILES has no members, give a user error.  ERROR can be given
-to provide a more informative error.
-
-If DEFAULT is non-nil, use this as the default value instead of
-`magit-current-file'."
-  (pcase (length files)
-    (0 (user-error (or error "No file choices")))
-    (1 (car files))
-    (_ (magit-completing-read
-        prompt files nil t nil 'magit-read-file-hist
-        (car (member (or default (magit-current-file)) files))))))
-
-(defun magit-read-changed-file (rev-or-range prompt &optional default)
-  (magit-read-file-choice
-   prompt
-   (magit-changed-files rev-or-range)
-   default
-   (concat "No file changed in " rev-or-range)))
-
-(defun magit-read-files (prompt initial-contents)
-  (mapconcat 'identity
-             (completing-read-multiple (or prompt "File,s: ")
-                                       (magit-list-files)
-                                       nil nil initial-contents) ","))
-
-;;; Patch File
-
-(defcustom magit-patch-save-arguments '(exclude "--stat")
-  "Arguments used by `magit-patch-save-arguments' (which see)"
-  :package-version '(magit . "2.12.0")
-  :group 'magit-diff
-  :type '(choice (const :tag "use buffer arguments" buffer)
-                 (cons :tag "use buffer arguments except"
-                       (const :format "" exclude)
-                       (repeat :format "%v%i\n"
-                               (string :tag "Argument")))
-                 (repeat :tag "use constant arguments"
-                         (string :tag "Argument"))))
-
-(magit-define-popup magit-patch-apply-popup
-  "Popup console for applying a patch file."
-  :man-page "git-apply"
-  :switches '((?i "Also apply to index"     "--index")
-              (?c "Only apply to index"     "--cached")
-              (?3 "Fall back on 3way merge" "--3way"))
-  :actions  '((?a "Apply patch" magit-patch-apply))
-  :default-action 'magit-patch-apply)
-
-(defun magit-patch-apply (file &rest args)
-  "Apply the patch file FILE."
-  (interactive (list (expand-file-name
-                      (read-file-name "Apply patch: "
-                                      default-directory nil nil
-                                      (--when-let (magit-file-at-point)
-                                        (file-relative-name it))))
-                     (magit-patch-apply-arguments)))
-  (magit-run-git "apply" args "--" (magit-convert-filename-for-git file)))
-
-(defun magit-patch-save (file &optional arg)
-  "Write current diff into patch FILE.
-
-What arguments are used to create the patch depends on the value
-of `magit-patch-save-arguments' and whether a prefix argument is
-used.
-
-If the value is the symbol `buffer', then use the same arguments
-as the buffer.  With a prefix argument use no arguments.
-
-If the value is a list beginning with the symbol `exclude', then
-use the same arguments as the buffer except for those matched by
-entries in the cdr of the list.  The comparison is done using
-`string-prefix-p'.  With a prefix argument use the same arguments
-as the buffer.
-
-If the value is a list of strings (including the empty list),
-then use those arguments.  With a prefix argument use the same
-arguments as the buffer.
-
-Of course the arguments that are required to actually show the
-same differences as those shown in the buffer are always used."
-  (interactive (list (read-file-name "Write patch file: " default-directory)
-                     current-prefix-arg))
-  (unless (derived-mode-p 'magit-diff-mode)
-    (user-error "Only diff buffers can be saved as patches"))
-  (pcase-let ((`(,rev ,const ,args ,files) magit-refresh-args))
-    (when (derived-mode-p 'magit-revision-mode)
-      (setq rev (format "%s~..%s" rev rev)))
-    (cond ((eq magit-patch-save-arguments 'buffer)
-           (when arg
-             (setq args nil)))
-          ((eq (car-safe magit-patch-save-arguments) 'exclude)
-           (unless arg
-             (setq args (-difference args (cdr magit-patch-save-arguments)))))
-          ((not arg)
-           (setq args magit-patch-save-arguments)))
-    (with-temp-file file
-      (magit-git-insert "diff" rev "-p" const args "--" files)))
-  (magit-refresh))
-
-(provide 'magit-files)
-;;; magit-files.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.elc
deleted file mode 100644
index 207b5f9e35c5..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-files.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.el
deleted file mode 100644
index 7b3ae37b8e20..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.el
+++ /dev/null
@@ -1,2121 +0,0 @@
-;;; magit-git.el --- Git functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements wrappers for various Git plumbing commands.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-
-(require 'magit-popup)
-(require 'magit-utils)
-(require 'magit-section)
-
-(declare-function magit-call-git "magit-process" (&rest args))
-(declare-function magit-maybe-make-margin-overlay "magit-margin" ())
-(declare-function magit-process-buffer "magit-process" (&optional nodisplay))
-(declare-function magit-process-file "magit-process" (&rest args))
-(declare-function magit-process-insert-section "magit-process"
-                  (pwe program args &optional errcode errlog))
-(declare-function magit-refresh "magit-mode" ())
-(defvar magit-process-error-message-regexps)
-(defvar magit-refresh-args) ; from `magit-mode' for `magit-current-file'
-(defvar magit-branch-prefer-remote-upstream)
-(defvar magit-published-branches)
-(defvar magit-diff-section-arguments)
-
-(defvar magit-tramp-process-environment nil)
-
-;;; Options
-
-;; For now this is shared between `magit-process' and `magit-git'.
-(defgroup magit-process nil
-  "Git and other external processes used by Magit."
-  :group 'magit)
-
-(defvar magit-git-environment
-  (list (format "INSIDE_EMACS=%s,magit" emacs-version))
-  "Prepended to `process-environment' while running git.")
-
-(defcustom magit-git-output-coding-system
-  (and (eq system-type 'windows-nt) 'utf-8)
-  "Coding system for receiving output from Git.
-
-If non-nil, the Git config value `i18n.logOutputEncoding' should
-be set via `magit-git-global-arguments' to value consistent with
-this."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-process
-  :type '(choice (coding-system :tag "Coding system to decode Git output")
-                 (const :tag "Use system default" nil)))
-
-(defvar magit-git-w32-path-hack nil
-  "Alist of (EXE . (PATHENTRY)).
-This specifies what additional PATH setting needs to be added to
-the environment in order to run the non-wrapper git executables
-successfully.")
-
-(defcustom magit-git-executable
-  ;; Git might be installed in a different location on a remote, so
-  ;; it is better not to use the full path to the executable, except
-  ;; on Window were we would otherwise end up using one one of the
-  ;; wrappers "cmd/git.exe" or "cmd/git.cmd", which are much slower
-  ;; than using "bin/git.exe" directly.
-  (or (and (eq system-type 'windows-nt)
-           (--when-let (executable-find "git")
-             (ignore-errors
-               ;; Git for Windows 2.x provides cygpath so we can
-               ;; ask it for native paths.
-               (let* ((core-exe
-                       (car
-                        (process-lines
-                         it "-c"
-                         "alias.X=!x() { which \"$1\" | cygpath -mf -; }; x"
-                         "X" "git")))
-                      (hack-entry (assoc core-exe magit-git-w32-path-hack))
-                      ;; Running the libexec/git-core executable
-                      ;; requires some extra PATH entries.
-                      (path-hack
-                       (list (concat "PATH="
-                                     (car (process-lines
-                                           it "-c"
-                                           "alias.P=!cygpath -wp \"$PATH\""
-                                           "P"))))))
-                 ;; The defcustom STANDARD expression can be
-                 ;; evaluated many times, so make sure it is
-                 ;; idempotent.
-                 (if hack-entry
-                     (setcdr hack-entry path-hack)
-                   (push (cons core-exe path-hack) magit-git-w32-path-hack))
-                 core-exe))))
-      "git")
-  "The Git executable used by Magit."
-  :group 'magit-process
-  :type 'string)
-
-(defcustom magit-git-global-arguments
-  `("--no-pager" "--literal-pathspecs" "-c" "core.preloadindex=true"
-    "-c" "log.showSignature=false"
-    ,@(and (eq system-type 'windows-nt)
-           (list "-c" "i18n.logOutputEncoding=UTF-8")))
-  "Global Git arguments.
-
-The arguments set here are used every time the git executable is
-run as a subprocess.  They are placed right after the executable
-itself and before the git command - as in `git HERE... COMMAND
-REST'.  See the manpage `git(1)' for valid arguments.
-
-Be careful what you add here, especially if you are using Tramp
-to connect to servers with ancient Git versions.  Never remove
-anything that is part of the default value, unless you really
-know what you are doing.  And think very hard before adding
-something; it will be used every time Magit runs Git for any
-purpose."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-git-arguments
-  :group 'magit-process
-  :type '(repeat string))
-
-(defvar magit-git-debug nil
-  "Whether to enable additional reporting of git errors.
-
-Magit basically calls git for one of these two reasons: for
-side-effects or to do something with its standard output.
-
-When git is run for side-effects then its output, including error
-messages, go into the process buffer which is shown when using \
-\\<magit-status-mode-map>\\[magit-process].
-
-When git's output is consumed in some way, then it would be too
-expensive to also insert it into this buffer, but when this
-option is non-nil and git returns with a non-zero exit status,
-then at least its standard error is inserted into this buffer.
-
-This is only intended for debugging purposes.  Do not enable this
-permanently, that would negatively affect performance.")
-
-
-(defcustom magit-prefer-remote-upstream nil
-  "Whether to favor remote branches when reading the upstream branch.
-
-This controls whether commands that read a branch from the user
-and then set it as the upstream branch, offer a local or a remote
-branch as default completion candidate, when they have the choice.
-
-This affects all commands that use `magit-read-upstream-branch'
-or `magit-read-starting-point', which includes all commands that
-change the upstream and many which create new branches."
-  :package-version '(magit . "2.4.2")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-list-refs-sortby nil
-  "How to sort the ref collection in the prompt.
-
-This affects commands that read a ref.  More specifically, it
-controls the order of refs returned by `magit-list-refs', which
-is called by functions like `magit-list-branch-names' to generate
-the collection of refs.  By default, refs are sorted according to
-their full refname (i.e., 'refs/...').
-
-Any value accepted by the `--sort' flag of `git for-each-ref' can
-be used.  For example, \"-creatordate\" places refs with more
-recent committer or tagger dates earlier in the list.  A list of
-strings can also be given in order to pass multiple sort keys to
-`git for-each-ref'.
-
-Note that, depending on the completion framework you use, this
-may not be sufficient to change the order in which the refs are
-displayed.  It only controls the order of the collection passed
-to `magit-completing-read' or, for commands that support reading
-multiple strings, `read-from-minibuffer'.  The completion
-framework ultimately determines how the collection is displayed."
-  :package-version '(magit . "2.11.0")
-  :group 'magit-miscellanous
-  :type '(choice string (repeat string)))
-
-;;; Git
-
-(defvar magit--refresh-cache nil)
-
-(defmacro magit--with-refresh-cache (key &rest body)
-  (declare (indent 1) (debug (form body)))
-  (let ((k (cl-gensym)))
-    `(if magit--refresh-cache
-         (let ((,k ,key))
-           (--if-let (assoc ,k (cdr magit--refresh-cache))
-               (progn (cl-incf (caar magit--refresh-cache))
-                      (cdr it))
-             (cl-incf (cdar magit--refresh-cache))
-             (let ((value ,(macroexp-progn body)))
-               (push (cons ,k value)
-                     (cdr magit--refresh-cache))
-               value)))
-       ,@body)))
-
-(defmacro magit-with-editor (&rest body)
-  "Like `with-editor' but let-bind some more variables."
-  (declare (indent 0) (debug (body)))
-  `(let ((magit-process-popup-time -1)
-         ;; The user may have customized `shell-file-name' to
-         ;; something which results in `w32-shell-dos-semantics' nil
-         ;; (which changes the quoting style used by
-         ;; `shell-quote-argument'), but Git for Windows expects shell
-         ;; quoting in the dos style.
-         (shell-file-name (if (and (eq system-type 'windows-nt)
-                                   ;; If we have Cygwin mount points,
-                                   ;; the git flavor is cygwin, so dos
-                                   ;; shell quoting is probably wrong.
-                                   (not magit-cygwin-mount-points))
-                              "cmdproxy"
-                            shell-file-name)))
-     (with-editor "GIT_EDITOR"
-       ,@body)))
-
-(defun magit-process-git-arguments (args)
-  "Prepare ARGS for a function that invokes Git.
-
-Magit has many specialized functions for running Git; they all
-pass arguments through this function before handing them to Git,
-to do the following.
-
-* Flatten ARGS, removing nil arguments.
-* Prepend `magit-git-global-arguments' to ARGS.
-* On w32 systems, encode to `w32-ansi-code-page'."
-  (setq args (append magit-git-global-arguments (-flatten args)))
-  (if (and (eq system-type 'windows-nt) (boundp 'w32-ansi-code-page))
-      ;; On w32, the process arguments *must* be encoded in the
-      ;; current code-page (see #3250).
-      (mapcar (lambda (arg)
-                (encode-coding-string
-                 arg (intern (format "cp%d" w32-ansi-code-page))))
-              args)
-    args))
-
-(defun magit-git-exit-code (&rest args)
-  "Execute Git with ARGS, returning its exit code."
-  (apply #'magit-process-file magit-git-executable nil nil nil
-         (magit-process-git-arguments args)))
-
-(defun magit-git-success (&rest args)
-  "Execute Git with ARGS, returning t if its exit code is 0."
-  (= (magit-git-exit-code args) 0))
-
-(defun magit-git-failure (&rest args)
-  "Execute Git with ARGS, returning t if its exit code is 1."
-  (= (magit-git-exit-code args) 1))
-
-(defun magit-git-str (&rest args)
-  "Execute Git with ARGS, returning the first line of its output.
-If there is no output, return nil.  If the output begins with a
-newline, return an empty string.  Like `magit-git-string' but
-ignore `magit-git-debug'."
-  (setq args (-flatten args))
-  (magit--with-refresh-cache (cons default-directory args)
-    (with-temp-buffer
-      (apply #'magit-process-file magit-git-executable nil (list t nil) nil
-             (magit-process-git-arguments args))
-      (unless (bobp)
-        (goto-char (point-min))
-        (buffer-substring-no-properties (point) (line-end-position))))))
-
-(defun magit-git-output (&rest args)
-  "Execute Git with ARGS, returning its output."
-  (setq args (-flatten args))
-  (magit--with-refresh-cache (cons default-directory args)
-    (with-temp-buffer
-      (apply #'magit-process-file magit-git-executable nil (list t nil) nil
-             (magit-process-git-arguments args))
-      (buffer-substring-no-properties (point-min) (point-max)))))
-
-(define-error 'magit-invalid-git-boolean "Not a Git boolean")
-
-(defun magit-git-true (&rest args)
-  "Execute Git with ARGS, returning t if it prints \"true\".
-If it prints \"false\", then return nil.  For any other output
-signal `magit-invalid-git-boolean'."
-  (pcase (magit-git-output args)
-    ((or "true"  "true\n")  t)
-    ((or "false" "false\n") nil)
-    (output (signal 'magit-invalid-git-boolean output))))
-
-(defun magit-git-false (&rest args)
-  "Execute Git with ARGS, returning t if it prints \"false\".
-If it prints \"true\", then return nil.  For any other output
-signal `magit-invalid-git-boolean'."
-  (pcase (magit-git-output args)
-    ((or "true"  "true\n")  nil)
-    ((or "false" "false\n") t)
-    (output (signal 'magit-invalid-git-boolean output))))
-
-(defun magit-git-insert (&rest args)
-  "Execute Git with ARGS, inserting its output at point.
-If Git exits with a non-zero exit status, then show a message and
-add a section in the respective process buffer."
-  (setq args (magit-process-git-arguments args))
-  (if magit-git-debug
-      (let (log)
-        (unwind-protect
-            (progn
-              (setq log (make-temp-file "magit-stderr"))
-              (delete-file log)
-              (let ((exit (apply #'magit-process-file magit-git-executable
-                                 nil (list t log) nil args)))
-                (when (> exit 0)
-                  (let ((msg "Git failed"))
-                    (when (file-exists-p log)
-                      (setq msg (with-temp-buffer
-                                  (insert-file-contents log)
-                                  (goto-char (point-max))
-                                  (cond
-                                   ((functionp magit-git-debug)
-                                    (funcall magit-git-debug (buffer-string)))
-                                   ((run-hook-wrapped
-                                     'magit-process-error-message-regexps
-                                     (lambda (re) (re-search-backward re nil t)))
-                                    (match-string-no-properties 1)))))
-                      (let ((magit-git-debug nil))
-                        (with-current-buffer (magit-process-buffer t)
-                          (magit-process-insert-section default-directory
-                                                        magit-git-executable
-                                                        args exit log))))
-                    (message "%s" msg)))
-                exit))
-          (ignore-errors (delete-file log))))
-    (apply #'magit-process-file magit-git-executable
-           nil (list t nil) nil args)))
-
-(defun magit-git-string (&rest args)
-  "Execute Git with ARGS, returning the first line of its output.
-If there is no output, return nil.  If the output begins with a
-newline, return an empty string."
-  (setq args (-flatten args))
-  (magit--with-refresh-cache (cons default-directory args)
-    (with-temp-buffer
-      (apply #'magit-git-insert args)
-      (unless (bobp)
-        (goto-char (point-min))
-        (buffer-substring-no-properties (point) (line-end-position))))))
-
-(defun magit-git-lines (&rest args)
-  "Execute Git with ARGS, returning its output as a list of lines.
-Empty lines anywhere in the output are omitted.
-
-If Git exits with a non-zero exit status, then report show a
-message and add a section in the respective process buffer."
-  (with-temp-buffer
-    (apply #'magit-git-insert args)
-    (split-string (buffer-string) "\n" t)))
-
-(defun magit-git-items (&rest args)
-  "Execute Git with ARGS, returning its null-separated output as a list.
-Empty items anywhere in the output are omitted.
-
-If Git exits with a non-zero exit status, then report show a
-message and add a section in the respective process buffer."
-  (with-temp-buffer
-    (apply #'magit-git-insert args)
-    (split-string (buffer-string) "\0" t)))
-
-(defun magit-git-wash (washer &rest args)
-  "Execute Git with ARGS, inserting washed output at point.
-Actually first insert the raw output at point.  If there is no
-output, call `magit-cancel-section'.  Otherwise temporarily narrow
-the buffer to the inserted text, move to its beginning, and then
-call function WASHER with ARGS as its sole argument."
-  (declare (indent 1))
-  (let ((beg (point)))
-    (setq args (-flatten args))
-    (magit-git-insert args)
-    (if (= (point) beg)
-        (magit-cancel-section)
-      (unless (bolp)
-        (insert "\n"))
-      (save-restriction
-        (narrow-to-region beg (point))
-        (goto-char beg)
-        (funcall washer args))
-      (when (or (= (point) beg)
-                (= (point) (1+ beg)))
-        (magit-cancel-section))
-      (magit-maybe-make-margin-overlay))))
-
-(defun magit-git-version (&optional raw)
-  (--when-let (let (magit-git-global-arguments)
-                (ignore-errors (substring (magit-git-string "version") 12)))
-    (if raw it (and (string-match "^\\([0-9]+\\.[0-9]+\\.[0-9]+\\)" it)
-                    (match-string 1 it)))))
-
-;;; Files
-
-(defun magit--safe-default-directory (&optional file)
-  (catch 'unsafe-default-dir
-    (let ((dir (file-name-as-directory
-                (expand-file-name (or file default-directory))))
-          (previous nil))
-      (while (not (magit-file-accessible-directory-p dir))
-        (setq dir (file-name-directory (directory-file-name dir)))
-        (when (equal dir previous)
-          (throw 'unsafe-default-dir nil))
-        (setq previous dir))
-      dir)))
-
-(defmacro magit--with-safe-default-directory (file &rest body)
-  (declare (indent 1) (debug (form body)))
-  `(when-let ((default-directory (magit--safe-default-directory ,file)))
-     ,@body))
-
-(defun magit-git-dir (&optional path)
-  "Return absolute path to the control directory of the current repository.
-
-All symlinks are followed.  If optional PATH is non-nil, then
-it has to be a path relative to the control directory and its
-absolute path is returned."
-  (magit--with-refresh-cache (list default-directory 'magit-git-dir path)
-    (magit--with-safe-default-directory nil
-      (when-let ((dir (magit-rev-parse-safe "--git-dir")))
-        (setq dir (file-name-as-directory (magit-expand-git-file-name dir)))
-        (unless (file-remote-p dir)
-          (setq dir (concat (file-remote-p default-directory) dir)))
-        (if path (expand-file-name (convert-standard-filename path) dir) dir)))))
-
-(defvar magit--separated-gitdirs nil)
-
-(defun magit--record-separated-gitdir ()
-  (let ((topdir (magit-toplevel))
-        (gitdir (magit-git-dir)))
-    ;; We want to delete the entry for `topdir' here, rather than within
-    ;; (unless ...), in case a `--separate-git-dir' repository was switched to
-    ;; the standard structure (i.e., "topdir/.git/").
-    (setq magit--separated-gitdirs (cl-delete topdir
-                                            magit--separated-gitdirs
-                                            :key #'car :test #'equal))
-    (unless (equal (file-name-as-directory (expand-file-name ".git" topdir))
-                   gitdir)
-      (push (cons topdir gitdir) magit--separated-gitdirs))))
-
-(defun magit-toplevel (&optional directory)
-  "Return the absolute path to the toplevel of the current repository.
-
-From within the working tree or control directory of a repository
-return the absolute path to the toplevel directory of the working
-tree.  As a special case, from within a bare repository return
-the control directory instead.  When called outside a repository
-then return nil.
-
-When optional DIRECTORY is non-nil then return the toplevel for
-that directory instead of the one for `default-directory'.
-
-Try to respect the option `find-file-visit-truename', i.e.  when
-the value of that option is nil, then avoid needlessly returning
-the truename.  When a symlink to a sub-directory of the working
-tree is involved, or when called from within a sub-directory of
-the gitdir or from the toplevel of a gitdir, which itself is not
-located within the working tree, then it is not possible to avoid
-returning the truename."
-  (magit--with-refresh-cache
-      (cons (or directory default-directory) 'magit-toplevel)
-    (magit--with-safe-default-directory directory
-      (if-let ((topdir (magit-rev-parse-safe "--show-toplevel")))
-          (let (updir)
-            (setq topdir (magit-expand-git-file-name topdir))
-            (if (and
-                 ;; Always honor these settings.
-                 (not find-file-visit-truename)
-                 (not (getenv "GIT_WORK_TREE"))
-                 ;; `--show-cdup' is the relative path to the toplevel
-                 ;; from `(file-truename default-directory)'.  Here we
-                 ;; pretend it is relative to `default-directory', and
-                 ;; go to that directory.  Then we check whether
-                 ;; `--show-toplevel' still returns the same value and
-                 ;; whether `--show-cdup' now is the empty string.  If
-                 ;; both is the case, then we are at the toplevel of
-                 ;; the same working tree, but also avoided needlessly
-                 ;; following any symlinks.
-                 (progn
-                   (setq updir (file-name-as-directory
-                                (magit-rev-parse-safe "--show-cdup")))
-                   (setq updir (if (file-name-absolute-p updir)
-                                   (concat (file-remote-p default-directory) updir)
-                                 (expand-file-name updir)))
-                   (let ((default-directory updir))
-                     (and (string-equal (magit-rev-parse-safe "--show-cdup") "")
-                          (--when-let (magit-rev-parse-safe "--show-toplevel")
-                            (string-equal (magit-expand-git-file-name it)
-                                          topdir))))))
-                updir
-              (concat (file-remote-p default-directory)
-                      (file-name-as-directory topdir))))
-        (when-let ((gitdir (magit-rev-parse-safe "--git-dir")))
-          (setq gitdir (file-name-as-directory
-                        (if (file-name-absolute-p gitdir)
-                            ;; We might have followed a symlink.
-                            (concat (file-remote-p default-directory)
-                                    (magit-expand-git-file-name gitdir))
-                          (expand-file-name gitdir))))
-          (if (magit-bare-repo-p)
-              gitdir
-            (let* ((link (expand-file-name "gitdir" gitdir))
-                   (wtree (and (file-exists-p link)
-                               (magit-file-line link))))
-              (cond
-               ((and wtree
-                     ;; Ignore .git/gitdir files that result from a
-                     ;; Git bug.  See #2364.
-                     (not (equal wtree ".git")))
-                ;; Return the linked working tree.
-                (file-name-directory wtree))
-               ;; The working directory may not be the parent directory of
-               ;; .git if it was set up with `git init --separate-git-dir'.
-               ;; See #2955.
-               ((car (rassoc gitdir magit--separated-gitdirs)))
-               (t
-                ;; Step outside the control directory to enter the working tree.
-                (file-name-directory (directory-file-name gitdir)))))))))))
-
-(defmacro magit-with-toplevel (&rest body)
-  (declare (indent defun) (debug (body)))
-  (let ((toplevel (cl-gensym "toplevel")))
-    `(let ((,toplevel (magit-toplevel)))
-       (if ,toplevel
-           (let ((default-directory ,toplevel))
-             ,@body)
-         (magit--not-inside-repository-error)))))
-
-(define-error 'magit-outside-git-repo "Not inside Git repository")
-(define-error 'magit-git-executable-not-found
-  "Git executable cannot be found (see https://magit.vc/goto/e6a78ed2)")
-
-(defun magit--not-inside-repository-error ()
-  (if (executable-find magit-git-executable)
-      (signal 'magit-outside-git-repo default-directory)
-    (signal 'magit-git-executable-not-found magit-git-executable)))
-
-(defun magit-inside-gitdir-p (&optioal noerror)
-  "Return t if `default-directory' is below the repository directory.
-If it is below the working directory, then return nil.
-If it isn't below either, then signal an error unless NOERROR
-is non-nil, in which case return nil."
-  (and (magit--assert-default-directory noerror)
-       ;; Below a repository directory that is not located below the
-       ;; working directory "git rev-parse --is-inside-git-dir" prints
-       ;; "false", which is wrong.
-       (let ((gitdir (magit-git-dir)))
-         (cond (gitdir (file-in-directory-p default-directory gitdir))
-               (noerror nil)
-               (t (signal 'magit-outside-git-repo default-directory))))))
-
-(defun magit-inside-worktree-p (&optional noerror)
-  "Return t if `default-directory' is below the working directory.
-If it is below the repository directory, then return nil.
-If it isn't below either, then signal an error unless NOERROR
-is non-nil, in which case return nil."
-  (and (magit--assert-default-directory noerror)
-       (condition-case nil
-           (magit-rev-parse-true "--is-inside-work-tree")
-         (magit-invalid-git-boolean
-          (and (not noerror)
-               (signal 'magit-outside-git-repo default-directory))))))
-
-(defun magit-bare-repo-p (&optional noerror)
-  "Return t if the current repository is bare.
-If it is non-bare, then return nil.  If `default-directory'
-isn't below a Git repository, then signal an error unless
-NOERROR is non-nil, in which case return nil."
-  (and (magit--assert-default-directory noerror)
-       (condition-case nil
-           (magit-rev-parse-true "--is-bare-repository")
-         (magit-invalid-git-boolean
-          (and (not noerror)
-               (signal 'magit-outside-git-repo default-directory))))))
-
-(defun magit--assert-default-directory (&optional noerror)
-  (or (file-directory-p default-directory)
-      (and (not noerror)
-           (let ((exists (file-exists-p default-directory)))
-	     (signal (if exists 'file-error 'file-missing)
-		     (list "Running git in directory"
-		           (if exists
-                               "Not a directory"
-                             "No such file or directory")
-		           default-directory))))))
-
-(defun magit-git-repo-p (directory &optional non-bare)
-  "Return t if DIRECTORY is a Git repository.
-When optional NON-BARE is non-nil also return nil if DIRECTORY is
-a bare repository."
-  (and (file-directory-p directory) ; Avoid archives, see #3397.
-       (or (file-regular-p (expand-file-name ".git" directory))
-           (file-directory-p (expand-file-name ".git" directory))
-           (and (not non-bare)
-                (file-regular-p (expand-file-name "HEAD" directory))
-                (file-directory-p (expand-file-name "refs" directory))
-                (file-directory-p (expand-file-name "objects" directory))))))
-
-(defvar-local magit-buffer-revision  nil)
-(defvar-local magit-buffer-refname   nil)
-(defvar-local magit-buffer-file-name nil)
-(put 'magit-buffer-revision  'permanent-local t)
-(put 'magit-buffer-refname   'permanent-local t)
-(put 'magit-buffer-file-name 'permanent-local t)
-
-(defun magit-file-relative-name (&optional file tracked)
-  "Return the path of FILE relative to the repository root.
-
-If optional FILE is nil or omitted, return the relative path of
-the file being visited in the current buffer, if any, else nil.
-If the file is not inside a Git repository, then return nil.
-
-If TRACKED is non-nil, return the path only if it matches a
-tracked file."
-  (unless file
-    (with-current-buffer (or (buffer-base-buffer)
-                             (current-buffer))
-      (setq file (or magit-buffer-file-name buffer-file-name
-                     (and (derived-mode-p 'dired-mode) default-directory)))))
-  (when (and file (or (not tracked)
-                      (magit-file-tracked-p (file-relative-name file))))
-    (--when-let (magit-toplevel
-                 (magit--safe-default-directory
-                  (directory-file-name (file-name-directory file))))
-      (file-relative-name file it))))
-
-(defun magit-file-tracked-p (file)
-  (magit-git-success "ls-files" "--error-unmatch" file))
-
-(defun magit-list-files (&rest args)
-  (apply #'magit-git-items "ls-files" "-z" "--full-name" args))
-
-(defun magit-tracked-files ()
-  (magit-list-files "--cached"))
-
-(defun magit-untracked-files (&optional all files)
-  (magit-list-files "--other" (unless all "--exclude-standard") "--" files))
-
-(defun magit-unstaged-files (&optional nomodules files)
-  (magit-git-items "diff-files" "-z" "--name-only"
-                   (and nomodules "--ignore-submodules")
-                   "--" files))
-
-(defun magit-staged-files (&optional nomodules files)
-  (magit-git-items "diff-index" "-z" "--name-only" "--cached"
-                   (and nomodules "--ignore-submodules")
-                   (magit-headish) "--" files))
-
-(defun magit-staged-binary-files ()
-  (--mapcat (and (string-match "^-\t-\t\\(.+\\)" it)
-                 (list (match-string 1 it)))
-            (magit-git-items "diff" "-z" "--cached"
-                             "--numstat" "--ignore-submodules")))
-
-(defun magit-unmerged-files ()
-  (magit-git-items "diff-files" "-z" "--name-only" "--diff-filter=U"))
-
-(defun magit-ignored-files ()
-  (magit-git-items "ls-files" "-z" "--others" "--ignored"
-                   "--exclude-standard" "--directory"))
-
-(defun magit-revision-files (rev)
-  (magit-with-toplevel
-    (magit-git-items "ls-tree" "-z" "-r" "--name-only" rev)))
-
-(defun magit-changed-files (rev-or-range &optional other-rev)
-  "Return list of files the have changed between two revisions.
-If OTHER-REV is non-nil, REV-OR-RANGE should be a revision, not a
-range.  Otherwise, it can be any revision or range accepted by
-\"git diff\" (i.e., <rev>, <revA>..<revB>, or <revA>...<revB>)."
-  (magit-with-toplevel
-    (magit-git-items "diff" "-z" "--name-only" rev-or-range other-rev)))
-
-(defun magit-renamed-files (revA revB)
-  (--map (cons (nth 1 it) (nth 2 it))
-         (-partition 3 (magit-git-items
-                        "diff-tree" "-r" "--diff-filter=R" "-z" "-M"
-                        revA revB))))
-
-(defun magit-file-status (&rest args)
-  (with-temp-buffer
-    (save-excursion (magit-git-insert "status" "-z" args))
-    (let ((pos (point)) status)
-      (while (> (skip-chars-forward "[:print:]") 0)
-        (let ((x (char-after     pos))
-              (y (char-after (1+ pos)))
-              (file (buffer-substring (+ pos 3) (point))))
-          (forward-char)
-          (if (memq x '(?R ?C))
-              (progn
-                (setq pos (point))
-                (skip-chars-forward "[:print:]")
-                (push (list file (buffer-substring pos (point)) x y) status)
-                (forward-char))
-            (push (list file nil x y) status)))
-        (setq pos (point)))
-      status)))
-
-(defcustom magit-cygwin-mount-points
-  (when (eq system-type 'windows-nt)
-    (cl-sort (--map (if (string-match "^\\(.*\\) on \\(.*\\) type" it)
-                        (cons (file-name-as-directory (match-string 2 it))
-                              (file-name-as-directory (match-string 1 it)))
-                      (lwarn '(magit) :error
-                             "Failed to parse Cygwin mount: %S" it))
-                    ;; If --exec-path is not a native Windows path,
-                    ;; then we probably have a cygwin git.
-                    (let ((process-environment
-                           (append magit-git-environment process-environment)))
-                      (and (not (string-match-p
-                                 "\\`[a-zA-Z]:"
-                                 (car (process-lines
-                                       magit-git-executable "--exec-path"))))
-                           (ignore-errors (process-lines "mount")))))
-             #'> :key (pcase-lambda (`(,cyg . ,_win)) (length cyg))))
-  "Alist of (CYGWIN . WIN32) directory names.
-Sorted from longest to shortest CYGWIN name."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-process
-  :type '(alist :key-type string :value-type directory))
-
-(defun magit-expand-git-file-name (filename)
-  (unless (file-name-absolute-p filename)
-    (setq filename (expand-file-name filename)))
-  (-if-let ((cyg . win)
-            (cl-assoc filename magit-cygwin-mount-points
-                      :test (lambda (f cyg) (string-prefix-p cyg f))))
-      (concat win (substring filename (length cyg)))
-    filename))
-
-(defun magit-convert-filename-for-git (filename)
-  "Convert FILENAME so that it can be passed to git.
-1. If it's a remote filename, then remove the remote part.
-2. Deal with an `windows-nt' Emacs vs. Cygwin Git incompatibility."
-  (if (file-name-absolute-p filename)
-      (-if-let ((cyg . win)
-                (cl-rassoc filename magit-cygwin-mount-points
-                           :test (lambda (f win) (string-prefix-p win f))))
-          (concat cyg (substring filename (length win)))
-        (or (file-remote-p filename 'localname)
-            filename))
-    filename))
-
-(defun magit-decode-git-path (path)
-  (if (eq (aref path 0) ?\")
-      (decode-coding-string (read path)
-                            (or magit-git-output-coding-system
-                                (car default-process-coding-system))
-                            t)
-    path))
-
-(defun magit-file-at-point ()
-  (magit-section-case
-    (file (oref it value))
-    (hunk (magit-section-parent-value it))))
-
-(defun magit-current-file ()
-  (or (magit-file-relative-name)
-      (magit-file-at-point)
-      (and (derived-mode-p 'magit-log-mode)
-           (car (nth 2 magit-refresh-args)))))
-
-;;; Predicates
-
-(defun magit-no-commit-p ()
-  "Return t if there is no commit in the current Git repository."
-  (not (magit-rev-verify "HEAD")))
-
-(defun magit-merge-commit-p (commit)
-  "Return t if COMMIT is a merge commit."
-  (> (length (magit-commit-parents commit)) 1))
-
-(defun magit-anything-staged-p (&optional ignore-submodules &rest files)
-  "Return t if there are any staged changes.
-If optional FILES is non-nil, then only changes to those files
-are considered."
-  (magit-git-failure "diff" "--quiet" "--cached"
-                     (and ignore-submodules "--ignore-submodules")
-                     "--" files))
-
-(defun magit-anything-unstaged-p (&optional ignore-submodules &rest files)
-  "Return t if there are any unstaged changes.
-If optional FILES is non-nil, then only changes to those files
-are considered."
-  (magit-git-failure "diff" "--quiet"
-                     (and ignore-submodules "--ignore-submodules")
-                     "--" files))
-
-(defun magit-anything-modified-p (&optional ignore-submodules &rest files)
-  "Return t if there are any staged or unstaged changes.
-If optional FILES is non-nil, then only changes to those files
-are considered."
-  (or (apply 'magit-anything-staged-p   ignore-submodules files)
-      (apply 'magit-anything-unstaged-p ignore-submodules files)))
-
-(defun magit-anything-unmerged-p (&rest files)
-  "Return t if there are any merge conflicts.
-If optional FILES is non-nil, then only conflicts in those files
-are considered."
-  (and (magit-git-string "ls-files" "--unmerged" files) t))
-
-(defun magit-module-worktree-p (module)
-  (magit-with-toplevel
-    (file-exists-p (expand-file-name (expand-file-name ".git" module)))))
-
-(defun magit-module-no-worktree-p (module)
-  (not (magit-module-worktree-p module)))
-
-(defun magit-ignore-submodules-p ()
-  (cl-find-if (lambda (arg)
-                (string-prefix-p "--ignore-submodules" arg))
-              magit-diff-section-arguments))
-
-;;; Revisions and References
-
-(defun magit-rev-parse (&rest args)
-  "Execute `git rev-parse ARGS', returning first line of output.
-If there is no output, return nil."
-  (apply #'magit-git-string "rev-parse" args))
-
-(defun magit-rev-parse-safe (&rest args)
-  "Execute `git rev-parse ARGS', returning first line of output.
-If there is no output, return nil.  Like `magit-rev-parse' but
-ignore `magit-git-debug'."
-  (apply #'magit-git-str "rev-parse" args))
-
-(defun magit-rev-parse-true (&rest args)
-  "Execute `git rev-parse ARGS', returning t if it prints \"true\".
-If it prints \"false\", then return nil.  For any other output
-signal an error."
-  (magit-git-true "rev-parse" args))
-
-(defun magit-rev-parse-false (&rest args)
-  "Execute `git rev-parse ARGS', returning t if it prints \"false\".
-If it prints \"true\", then return nil.  For any other output
-signal an error."
-  (magit-git-false "rev-parse" args))
-
-(defun magit-rev-parse-p (&rest args)
-  "Execute `git rev-parse ARGS', returning t if it prints \"true\".
-Return t if the first (and usually only) output line is the
-string \"true\", otherwise return nil."
-  (equal (magit-git-str "rev-parse" args) "true"))
-
-(defun magit-rev-verify (rev)
-  (magit-rev-parse-safe "--verify" rev))
-
-(defun magit-rev-verify-commit (rev)
-  "Return full hash for REV if it names an existing commit."
-  (magit-rev-verify (concat rev "^{commit}")))
-
-(defun magit-rev-equal (a b)
-  (magit-git-success "diff" "--quiet" a b))
-
-(defun magit-rev-eq (a b)
-  (let ((a (magit-rev-verify a))
-        (b (magit-rev-verify b)))
-    (and a b (equal a b))))
-
-(defun magit-rev-ancestor-p (a b)
-  "Return non-nil if commit A is an ancestor of commit B."
-  (magit-git-success "merge-base" "--is-ancestor" a b))
-
-(defun magit-rev-head-p (rev)
-  (or (equal rev "HEAD")
-      (and rev
-           (not (string-match-p "\\.\\." rev))
-           (equal (magit-rev-parse rev)
-                  (magit-rev-parse "HEAD")))))
-
-(defun magit-rev-author-p (rev)
-  "Return t if the user is the author of REV.
-More precisely return t if `user.name' is equal to the author
-name of REV and/or `user.email' is equal to the author email
-of REV."
-  (or (equal (magit-get "user.name")  (magit-rev-format "%an" rev))
-      (equal (magit-get "user.email") (magit-rev-format "%ae" rev))))
-
-(defun magit-rev-name (rev &optional pattern)
-  "Return a symbolic name for REV.
-PATTERN is passed to the `--refs' flag of `git-name-rev' and can
-be used to limit the result to a matching ref.  When structured
-as \"refs/<subdir>/*\", PATTERN is taken as a namespace.  In this
-case, the name returned by `git-name-rev' is discarded if it
-corresponds to a ref outside of the namespace."
-  (--when-let (magit-git-string "name-rev" "--name-only" "--no-undefined"
-                                (and pattern (concat "--refs=" pattern))
-                                rev)
-    ;; We can't use name-rev's --exclude to filter out "*/PATTERN"
-    ;; because --exclude wasn't added until Git v2.13.0.
-    (if (and pattern
-             (string-match-p "\\`refs/[^/]+/\\*\\'" pattern))
-        (let ((namespace (substring pattern 0 -1)))
-          (unless (and (string-match-p namespace it)
-                       (not (magit-rev-verify (concat namespace it))))
-            it))
-      it)))
-
-(defun magit-rev-branch (rev)
-  (--when-let (magit-rev-name rev "refs/heads/*")
-    (unless (string-match-p "[~^]" it) it)))
-
-(defun magit-get-shortname (rev)
-  (let* ((fn (apply-partially 'magit-rev-name rev))
-         (name (or (funcall fn "refs/tags/*")
-                   (funcall fn "refs/heads/*")
-                   (funcall fn "refs/remotes/*"))))
-    (cond ((not name)
-           (magit-rev-parse "--short" rev))
-          ((string-match "^\\(?:tags\\|remotes\\)/\\(.+\\)" name)
-           (if (magit-ref-ambiguous-p (match-string 1 name))
-               name
-             (match-string 1 name)))
-          (t (magit-ref-maybe-qualify name)))))
-
-(defun magit-name-branch (rev &optional lax)
-  (or (magit-name-local-branch rev)
-      (magit-name-remote-branch rev)
-      (and lax (or (magit-name-local-branch rev t)
-                   (magit-name-remote-branch rev t)))))
-
-(defun magit-name-local-branch (rev &optional lax)
-  (--when-let (magit-rev-name rev "refs/heads/*")
-    (and (or lax (not (string-match-p "[~^]" it))) it)))
-
-(defun magit-name-remote-branch (rev &optional lax)
-  (--when-let (magit-rev-name rev "refs/remotes/*")
-    (and (or lax (not (string-match-p "[~^]" it)))
-         (substring it 8))))
-
-(defun magit-name-tag (rev &optional lax)
-  (--when-let (magit-rev-name rev "refs/tags/*")
-    (and (or lax (not (string-match-p "[~^]" it)))
-         (substring it 5))))
-
-(defun magit-ref-fullname (name)
-  "Return fully qualified refname for NAME.
-If NAME is ambiguous, return nil.  NAME may include suffixes such
-as \"^1\" and \"~3\".  "
-  (save-match-data
-    (if (string-match "\\`\\([^^~]+\\)\\(.*\\)" name)
-        (--when-let (magit-rev-parse "--symbolic-full-name"
-                                     (match-string 1 name))
-          (concat it (match-string 2 name)))
-      (error "`name' has an unrecognized format"))))
-
-(defun magit-ref-ambiguous-p (name)
-  (not (magit-ref-fullname name)))
-
-(cl-defun magit-ref-maybe-qualify (name &optional (prefix "heads/"))
-  "If NAME is ambiguous, prepend PREFIX to it."
-  (concat (and (magit-ref-ambiguous-p name)
-               prefix)
-          name))
-
-(defun magit-ref-exists-p (ref)
-  (magit-git-success "show-ref" "--verify" ref))
-
-(defun magit-ref-equal (a b)
-  "Return t if the refs A and B are `equal'.
-A symbolic-ref pointing to some ref, is `equal' to that ref,
-as are two symbolic-refs pointing to the same ref."
-  (equal (magit-ref-fullname a)
-         (magit-ref-fullname b)))
-
-(defun magit-ref-eq (a b)
-  "Return t if the refs A and B are `eq'.
-A symbolic-ref is `eq' to itself, but not to the ref it points
-to, or to some other symbolic-ref that points to the same ref."
-  (let ((symbolic-a (magit-symbolic-ref-p a))
-        (symbolic-b (magit-symbolic-ref-p b)))
-    (or (and symbolic-a
-             symbolic-b
-             (equal a b))
-        (and (not symbolic-a)
-             (not symbolic-b)
-             (magit-ref-equal a b)))))
-
-(defun magit-headish ()
-  "Return \"HEAD\" or if that doesn't exist the hash of the empty tree."
-  (if (magit-no-commit-p)
-      (magit-git-string "mktree")
-    "HEAD"))
-
-(defun magit-branch-at-point ()
-  (magit-section-case
-    (branch (oref it value))
-    (commit (or (magit--painted-branch-at-point)
-                (magit-name-branch (oref it value))))))
-
-(defun magit--painted-branch-at-point (&optional type)
-  (or (and (not (eq type 'remote))
-           (memq (get-text-property (point) 'face)
-                 (list 'magit-branch-local
-                       'magit-branch-current))
-           (cdr (magit-split-branch-name
-                 (thing-at-point 'git-revision t))))
-      (and (not (eq type 'local))
-           (memq (get-text-property (point) 'face)
-                 (list 'magit-branch-remote
-                       'magit-branch-remote-head))
-           (thing-at-point 'git-revision t))))
-
-(defun magit-local-branch-at-point ()
-  (magit-section-case
-    (branch (let ((branch (magit-ref-maybe-qualify (oref it value))))
-              (when (member branch (magit-list-local-branch-names))
-                branch)))
-    (commit (or (magit--painted-branch-at-point 'local)
-                (magit-name-local-branch (oref it value))))))
-
-(defun magit-remote-branch-at-point ()
-  (magit-section-case
-    (branch (let ((branch (oref it value)))
-              (when (member branch (magit-list-remote-branch-names))
-                branch)))
-    (commit (or (magit--painted-branch-at-point 'remote)
-                (magit-name-remote-branch (oref it value))))))
-
-(defun magit-commit-at-point ()
-  (or (magit-section-when commit)
-      (and (derived-mode-p 'magit-revision-mode)
-           (car magit-refresh-args))))
-
-(defun magit-branch-or-commit-at-point ()
-  (or magit-buffer-refname
-      (magit-section-case
-        (branch (magit-ref-maybe-qualify (oref it value)))
-        (commit (or (magit--painted-branch-at-point)
-                    (let ((rev (oref it value)))
-                      (or (magit-name-branch rev)
-                          (magit-get-shortname rev)
-                          rev))))
-        (tag (magit-ref-maybe-qualify (oref it value) "tags/")))
-      (thing-at-point 'git-revision t)
-      (and (derived-mode-p 'magit-revision-mode
-                           'magit-merge-preview-mode)
-           (car magit-refresh-args))))
-
-(defun magit-tag-at-point ()
-  (magit-section-case
-    (tag    (oref it value))
-    (commit (magit-name-tag (oref it value)))))
-
-(defun magit-stash-at-point ()
-  (magit-section-when stash))
-
-(defun magit-remote-at-point ()
-  (magit-section-case
-    (remote (oref it value))
-    (branch (magit-section-parent-value it))))
-
-(defun magit-module-at-point (&optional predicate)
-  (magit-section-when
-      '(submodule
-        [file modules-unpulled-from-upstream]
-        [file modules-unpulled-from-pushremote]
-        [file modules-unpushed-to-upstream]
-        [file modules-unpushed-to-pushremote])
-    (let ((module (oref it value)))
-      (and (or (not predicate)
-               (funcall predicate module))
-           module))))
-
-(defun magit-get-current-branch ()
-  "Return the refname of the currently checked out branch.
-Return nil if no branch is currently checked out."
-  (magit-git-string "symbolic-ref" "--short" "HEAD"))
-
-(defvar magit-get-previous-branch-timeout 0.5
-  "Maximum time to spend in `magit-get-previous-branch'.
-Given as a number of seconds.")
-
-(defun magit-get-previous-branch ()
-  "Return the refname of the previously checked out branch.
-Return nil if no branch can be found in the `HEAD' reflog
-which is different from the current branch and still exists.
-The amount of time spent searching is limited by
-`magit-get-previous-branch-timeout'."
-  (let ((t0 (float-time))
-        (current (magit-get-current-branch))
-        (i 1) prev)
-    (while (if (> (- (float-time) t0) magit-get-previous-branch-timeout)
-               (setq prev nil) ;; Timed out.
-             (and (setq prev (magit-rev-verify (format "@{-%i}" i)))
-                  (or (not (setq prev (magit-rev-branch prev)))
-                      (equal prev current))))
-      (cl-incf i))
-    prev))
-
-(defun magit-get-upstream-ref (&optional branch)
-  (and (or branch (setq branch (magit-get-current-branch)))
-       (let ((remote (magit-get "branch" branch "remote"))
-             (merge  (magit-get "branch" branch "merge")))
-         (when (and remote merge)
-           (cond ((string-equal remote ".") merge)
-                 ((string-prefix-p "refs/heads/" merge)
-                  (concat "refs/remotes/" remote "/" (substring merge 11))))))))
-
-(defun magit-get-upstream-branch (&optional branch verify)
-  (and (or branch (setq branch (magit-get-current-branch)))
-       (when-let ((remote (magit-get "branch" branch "remote"))
-                  (merge  (magit-get "branch" branch "merge")))
-         (and (string-prefix-p "refs/heads/" merge)
-              (let* ((upstream (substring merge 11))
-                     (upstream
-                      (cond ((string-equal remote ".")
-                             (propertize upstream 'face 'magit-branch-local))
-                            ((string-match-p "[@:]" remote)
-                             (propertize (concat remote " " upstream)
-                                         'face 'magit-branch-remote))
-                            (t
-                             (propertize (concat remote "/" upstream)
-                                         'face 'magit-branch-remote)))))
-                (and (or (not verify)
-                         (magit-rev-verify upstream))
-                     upstream))))))
-
-(defun magit-get-indirect-upstream-branch (branch &optional force)
-  (let ((remote (magit-get "branch" branch "remote")))
-    (and remote (not (equal remote "."))
-         ;; The user has opted in...
-         (or force
-             (--some (if (magit-git-success "check-ref-format" "--branch" it)
-                         (equal it branch)
-                       (string-match-p it branch))
-                     magit-branch-prefer-remote-upstream))
-         ;; and local BRANCH tracks a remote branch...
-         (let ((upstream (magit-get-upstream-branch branch)))
-           ;; whose upstream...
-           (and upstream
-                ;; has the same name as BRANCH and...
-                (equal (substring upstream (1+ (length remote))) branch)
-                ;; and can be fast-forwarded to BRANCH.
-                (magit-rev-ancestor-p upstream branch)
-                upstream)))))
-
-(defun magit-get-upstream-remote (&optional branch)
-  (and (or branch (setq branch (magit-get-current-branch)))
-       (magit-get "branch" branch "remote")))
-
-(defun magit-get-push-remote (&optional branch)
-  (or (and (or branch (setq branch (magit-get-current-branch)))
-           (magit-get "branch" branch "pushRemote"))
-      (magit-get "remote.pushDefault")))
-
-(defun magit-get-push-branch (&optional branch verify)
-  (and (or branch (setq branch (magit-get-current-branch)))
-       (when-let ((remote (magit-get-push-remote branch))
-                  (push-branch (concat remote "/" branch)))
-         (and (or (not verify)
-                  (magit-rev-verify push-branch))
-              push-branch))))
-
-(defun magit-get-@{push}-branch (&optional branch)
-  (let ((ref (magit-rev-parse "--symbolic-full-name"
-                              (concat branch "@{push}"))))
-    (when (and ref (string-prefix-p "refs/remotes/" ref))
-      (substring ref 13))))
-
-(defun magit-get-remote (&optional branch)
-  (when (or branch (setq branch (magit-get-current-branch)))
-    (let ((remote (magit-get "branch" branch "remote")))
-      (unless (equal remote ".")
-        remote))))
-
-(defun magit-get-some-remote (&optional branch)
-  (or (magit-get-remote branch)
-      (and (magit-branch-p "master")
-           (magit-get-remote "master"))
-      (let ((remotes (magit-list-remotes)))
-        (or (car (member "origin" remotes))
-            (car remotes)))))
-
-(defun magit-branch-merged-p (branch &optional target)
-  "Return non-nil if BRANCH is merged into its upstream and TARGET.
-
-TARGET defaults to the current branch.  If `HEAD' is detached and
-TARGET is nil, then always return nil.  As a special case, if
-TARGET is t, then return non-nil if BRANCH is merged into any one
-of the other local branches.
-
-If, and only if, BRANCH has an upstream, then only return non-nil
-if BRANCH is merged into both TARGET (as described above) as well
-as into its upstream."
-  (and (--if-let (and (magit-branch-p branch)
-                      (magit-get-upstream-branch branch))
-           (magit-git-success "merge-base" "--is-ancestor" branch it)
-         t)
-       (if (eq target t)
-           (delete (magit-name-local-branch branch)
-                   (magit-list-containing-branches branch))
-         (--when-let (or target (magit-get-current-branch))
-           (magit-git-success "merge-base" "--is-ancestor" branch it)))))
-
-(defun magit-split-branch-name (branch)
-  (cond ((member branch (magit-list-local-branch-names))
-         (cons "." branch))
-        ((string-match " " branch)
-         (pcase-let ((`(,url ,branch) (split-string branch " ")))
-           (cons url branch)))
-        ((string-match "/" branch)
-         (let ((remote (substring branch 0 (match-beginning 0))))
-           (if (save-match-data (member remote (magit-list-remotes)))
-               (cons remote (substring branch (match-end 0)))
-             (error "Invalid branch name %s" branch))))))
-
-(defun magit-get-current-tag (&optional rev with-distance)
-  "Return the closest tag reachable from REV.
-
-If optional REV is nil, then default to `HEAD'.
-If optional WITH-DISTANCE is non-nil then return (TAG COMMITS),
-if it is `dirty' return (TAG COMMIT DIRTY). COMMITS is the number
-of commits in `HEAD' but not in TAG and DIRTY is t if there are
-uncommitted changes, nil otherwise."
-  (--when-let (magit-git-str "describe" "--long" "--tags"
-                             (and (eq with-distance 'dirty) "--dirty") rev)
-    (save-match-data
-      (string-match
-       "\\(.+\\)-\\(?:0[0-9]*\\|\\([0-9]+\\)\\)-g[0-9a-z]+\\(-dirty\\)?$" it)
-      (if with-distance
-          `(,(match-string 1 it)
-            ,(string-to-number (or (match-string 2 it) "0"))
-            ,@(and (match-string 3 it) (list t)))
-        (match-string 1 it)))))
-
-(defun magit-get-next-tag (&optional rev with-distance)
-  "Return the closest tag from which REV is reachable.
-
-If optional REV is nil, then default to `HEAD'.
-If no such tag can be found or if the distance is 0 (in which
-case it is the current tag, not the next), return nil instead.
-If optional WITH-DISTANCE is non-nil, then return (TAG COMMITS)
-where COMMITS is the number of commits in TAG but not in REV."
-  (--when-let (magit-git-str "describe" "--contains" (or rev "HEAD"))
-    (save-match-data
-      (when (string-match "^[^^~]+" it)
-        (setq it (match-string 0 it))
-        (unless (equal it (magit-get-current-tag rev))
-          (if with-distance
-              (list it (car (magit-rev-diff-count it rev)))
-            it))))))
-
-(defvar magit-list-refs-namespaces
-  '("refs/heads" "refs/remotes" "refs/tags" "refs/pull"))
-
-(defun magit-list-refs (&optional namespaces format sortby)
-  "Return list of references.
-
-When NAMESPACES is non-nil, list refs from these namespaces
-rather than those from `magit-list-refs-namespaces'.
-
-FORMAT is passed to the `--format' flag of `git for-each-ref'
-and defaults to \"%(refname)\".  If the format is \"%(refname)\"
-or \"%(refname:short)\", then drop the symbolic-ref \"HEAD\".
-
-SORTBY is a key or list of keys to pass to the `--sort' flag of
-`git for-each-ref'.  When nil, use `magit-list-refs-sortby'"
-  (unless format
-    (setq format "%(refname)"))
-  (let ((refs (magit-git-lines "for-each-ref"
-                               (concat "--format=" format)
-                               (--map (concat "--sort=" it)
-                                      (pcase (or sortby magit-list-refs-sortby)
-                                        ((and val (pred stringp)) (list val))
-                                        ((and val (pred listp)) val)))
-                               (or namespaces magit-list-refs-namespaces))))
-    (if (member format '("%(refname)" "%(refname:short)"))
-        (--remove (string-match-p "\\(\\`\\|/\\)HEAD\\'" it) refs)
-      refs)))
-
-(defun magit-list-branches ()
-  (magit-list-refs (list "refs/heads" "refs/remotes")))
-
-(defun magit-list-local-branches ()
-  (magit-list-refs "refs/heads"))
-
-(defun magit-list-remote-branches (&optional remote)
-  (magit-list-refs (concat "refs/remotes/" remote)))
-
-(defun magit-list-related-branches (relation &optional commit arg)
-  (--remove (string-match-p "\\(\\`(HEAD\\|HEAD -> \\)" it)
-            (--map (substring it 2)
-                   (magit-git-lines "branch" arg relation commit))))
-
-(defun magit-list-containing-branches (&optional commit arg)
-  (magit-list-related-branches "--contains" commit arg))
-
-(defun magit-list-publishing-branches (&optional commit)
-  (--filter (magit-rev-ancestor-p commit it)
-            magit-published-branches))
-
-(defun magit-list-merged-branches (&optional commit arg)
-  (magit-list-related-branches "--merged" commit arg))
-
-(defun magit-list-unmerged-branches (&optional commit arg)
-  (magit-list-related-branches "--no-merged" commit arg))
-
-(defun magit-list-unmerged-to-upstream-branches ()
-  (--filter (when-let ((upstream (magit-get-upstream-branch it)))
-              (member it (magit-list-unmerged-branches upstream)))
-            (magit-list-local-branch-names)))
-
-(defun magit-list-branches-pointing-at (commit)
-  (let ((re (format "\\`%s refs/\\(heads\\|remotes\\)/\\(.*\\)\\'"
-                   (magit-rev-verify commit))))
-    (--keep (and (string-match re it)
-                 (let ((name (match-string 2 it)))
-                   (and (not (string-suffix-p "HEAD" name))
-                        name)))
-            (magit-git-lines "show-ref"))))
-
-(defun magit-list-refnames (&optional namespaces)
-  (magit-list-refs namespaces "%(refname:short)"))
-
-(defun magit-list-branch-names ()
-  (magit-list-refnames (list "refs/heads" "refs/remotes")))
-
-(defun magit-list-local-branch-names ()
-  (magit-list-refnames "refs/heads"))
-
-(defun magit-list-remote-branch-names (&optional remote relative)
-  (if (and remote relative)
-      (let ((regexp (format "^refs/remotes/%s/\\(.+\\)" remote)))
-        (--mapcat (when (string-match regexp it)
-                    (list (match-string 1 it)))
-                  (magit-list-remote-branches remote)))
-    (magit-list-refnames (concat "refs/remotes/" remote))))
-
-(defun magit-format-refs (format &rest args)
-  (let ((lines (magit-git-lines
-                "for-each-ref" (concat "--format=" format)
-                (or args (list "refs/heads" "refs/remotes" "refs/tags")))))
-    (if (string-match-p "\f" format)
-        (--map (split-string it "\f") lines)
-      lines)))
-
-(defun magit-list-remotes ()
-  (magit-git-lines "remote"))
-
-(defun magit-list-tags ()
-  (magit-git-lines "tag"))
-
-(defun magit-list-stashes (&optional format)
-  (magit-git-lines "stash" "list" (concat "--format=" (or format "%gd"))))
-
-(defun magit-list-active-notes-refs ()
-  "Return notes refs according to `core.notesRef' and `notes.displayRef'."
-  (magit-git-lines "for-each-ref" "--format=%(refname)"
-                   (or (magit-get "core.notesRef") "refs/notes/commits")
-                   (magit-get-all "notes.displayRef")))
-
-(defun magit-list-notes-refnames ()
-  (--map (substring it 6) (magit-list-refnames "refs/notes")))
-
-(defun magit-remote-list-tags (remote)
-  (--keep (and (not (string-match-p "\\^{}$" it))
-               (substring it 51))
-          (magit-git-lines "ls-remote" "--tags" remote)))
-
-(defun magit-remote-list-branches (remote)
-  (--keep (and (not (string-match-p "\\^{}$" it))
-               (substring it 52))
-          (magit-git-lines "ls-remote" "--heads" remote)))
-
-(defun magit-remote-list-refs (remote)
-  (--keep (and (not (string-match-p "\\^{}$" it))
-               (substring it 41))
-          (magit-git-lines "ls-remote" remote)))
-
-(defun magit-list-module-paths ()
-  (--mapcat (and (string-match "^160000 [0-9a-z]\\{40\\} 0\t\\(.+\\)$" it)
-                 (list (match-string 1 it)))
-            (magit-git-items "ls-files" "-z" "--stage")))
-
-(defun magit-get-submodule-name (path)
-  "Return the name of the submodule at PATH.
-PATH has to be relative to the super-repository."
-  (cadr (split-string
-         (car (or (magit-git-items
-                   "config" "-z"
-                   "-f" (expand-file-name ".gitmodules" (magit-toplevel))
-                   "--get-regexp" "^submodule\\..*\\.path$"
-                   (concat "^" (regexp-quote (directory-file-name path)) "$"))
-                  (error "No such submodule `%s'" path)))
-         "\n")))
-
-(defun magit-list-worktrees ()
-  (let (worktrees worktree)
-    (dolist (line (let ((magit-git-global-arguments
-                         ;; KLUDGE At least in v2.8.3 this triggers a segfault.
-                         (remove "--no-pager" magit-git-global-arguments)))
-                    (magit-git-lines "worktree" "list" "--porcelain")))
-      (cond ((string-prefix-p "worktree" line)
-             (push (setq worktree (list (substring line 9) nil nil nil))
-                   worktrees))
-            ((string-equal line "bare")
-             (let* ((default-directory (car worktree))
-                    (wt (and (not (magit-get-boolean "core.bare"))
-                             (magit-get "core.worktree"))))
-               (if (and wt (file-exists-p (expand-file-name wt)))
-                   (progn (setf (nth 0 worktree) (expand-file-name wt))
-                          (setf (nth 2 worktree) (magit-rev-parse "HEAD"))
-                          (setf (nth 3 worktree) (magit-get-current-branch)))
-                 (setf (nth 1 worktree) t))))
-            ((string-prefix-p "HEAD" line)
-             (setf (nth 2 worktree) (substring line 5)))
-            ((string-prefix-p "branch" line)
-             (setf (nth 3 worktree) (substring line 18)))
-            ((string-equal line "detached"))))
-    (nreverse worktrees)))
-
-(defun magit-symbolic-ref-p (name)
-  (magit-git-success "symbolic-ref" "--quiet" name))
-
-(defun magit-ref-p (rev)
-  (or (car (member rev (magit-list-refs)))
-      (car (member rev (magit-list-refnames)))))
-
-(defun magit-branch-p (rev)
-  (or (car (member rev (magit-list-branches)))
-      (car (member rev (magit-list-branch-names)))))
-
-(defun magit-local-branch-p (rev)
-  (or (car (member rev (magit-list-local-branches)))
-      (car (member rev (magit-list-local-branch-names)))))
-
-(defun magit-remote-branch-p (rev)
-  (or (car (member rev (magit-list-remote-branches)))
-      (car (member rev (magit-list-remote-branch-names)))))
-
-(defun magit-branch-set-face (branch)
-  (propertize branch 'face (if (magit-local-branch-p branch)
-                               'magit-branch-local
-                             'magit-branch-remote)))
-
-(defun magit-tag-p (rev)
-  (car (member rev (magit-list-tags))))
-
-(defun magit-remote-p (string)
-  (car (member string (magit-list-remotes))))
-
-(defun magit-rev-diff-count (a b)
-  "Return the commits in A but not B and vice versa.
-Return a list of two integers: (A>B B>A)."
-  (mapcar 'string-to-number
-          (split-string (magit-git-string "rev-list"
-                                          "--count" "--left-right"
-                                          (concat a "..." b))
-                        "\t")))
-
-(defun magit-abbrev-length ()
-  (--if-let (magit-get "core.abbrev")
-      (string-to-number it)
-    ;; Guess the length git will be using based on an example
-    ;; abbreviation.  Actually HEAD's abbreviation might be an
-    ;; outlier, so use the shorter of the abbreviations for two
-    ;; commits.  When a commit does not exist, then fall back
-    ;; to the default of 7.  See #3034.
-    (min (--if-let (magit-rev-parse "--short" "HEAD")  (length it) 7)
-         (--if-let (magit-rev-parse "--short" "HEAD~") (length it) 7))))
-
-(defun magit-abbrev-arg (&optional arg)
-  (format "--%s=%d" (or arg "abbrev") (magit-abbrev-length)))
-
-(defun magit-rev-abbrev (rev)
-  (magit-rev-parse (magit-abbrev-arg "short") rev))
-
-(defun magit-commit-children (commit &optional args)
-  (mapcar #'car
-          (--filter (member commit (cdr it))
-                    (--map (split-string it " ")
-                           (magit-git-lines
-                            "log" "--format=%H %P"
-                            (or args (list "--branches" "--tags" "--remotes"))
-                            "--not" commit)))))
-
-(defun magit-commit-parents (commit)
-  (--when-let (magit-git-string "rev-list" "-1" "--parents" commit)
-    (cdr (split-string it))))
-
-(defun magit-patch-id (rev)
-  (with-temp-buffer
-    (magit-process-file
-     shell-file-name nil '(t nil) nil shell-command-switch
-     (let ((exec (shell-quote-argument magit-git-executable)))
-       (format "%s diff-tree -u %s | %s patch-id" exec rev exec)))
-    (car (split-string (buffer-string)))))
-
-(defun magit-rev-format (format &optional rev args)
-  (let ((str (magit-git-string "show" "--no-patch"
-                               (concat "--format=" format) args
-                               (if rev (concat rev "^{commit}") "HEAD") "--")))
-    (unless (string-equal str "")
-      str)))
-
-(defun magit-rev-insert-format (format &optional rev args)
-  (magit-git-insert "show" "--no-patch"
-                    (concat "--format=" format) args
-                    (if rev (concat rev "^{commit}") "HEAD") "--"))
-
-(defun magit-format-rev-summary (rev)
-  (--when-let (magit-rev-format "%h %s" rev)
-    (string-match " " it)
-    (put-text-property 0 (match-beginning 0) 'face 'magit-hash it)
-    it))
-
-(defvar magit-ref-namespaces
-  '(("\\`HEAD\\'"                  . magit-head)
-    ("\\`refs/tags/\\(.+\\)"       . magit-tag)
-    ("\\`refs/heads/\\(.+\\)"      . magit-branch-local)
-    ("\\`refs/remotes/\\(.+\\)"    . magit-branch-remote)
-    ("\\`refs/bisect/\\(bad\\)"    . magit-bisect-bad)
-    ("\\`refs/bisect/\\(skip.*\\)" . magit-bisect-skip)
-    ("\\`refs/bisect/\\(good.*\\)" . magit-bisect-good)
-    ("\\`refs/stash$"              . magit-refname-stash)
-    ("\\`refs/wip/\\(.+\\)"        . magit-refname-wip)
-    ("\\`refs/pullreqs/\\(.+\\)"   . magit-refname-pullreq)
-    ("\\`\\(bad\\):"               . magit-bisect-bad)
-    ("\\`\\(skip\\):"              . magit-bisect-skip)
-    ("\\`\\(good\\):"              . magit-bisect-good)
-    ("\\`\\(.+\\)"                 . magit-refname))
-  "How refs are formatted for display.
-
-Each entry controls how a certain type of ref is displayed, and
-has the form (REGEXP . FACE).  REGEXP is a regular expression
-used to match full refs.  The first entry whose REGEXP matches
-the reference is used.  The first regexp submatch becomes the
-\"label\" that represents the ref and is propertized with FONT.")
-
-(defun magit-format-ref-labels (string)
-  ;; To support Git <2.2.0, we remove the surrounding parentheses here
-  ;; rather than specifying that STRING should be generated with Git's
-  ;; "%D" placeholder.
-  (setq string (->> string
-                    (replace-regexp-in-string "\\`\\s-*(" "")
-                    (replace-regexp-in-string ")\\s-*\\'" "")))
-  (save-match-data
-    (let ((regexp "\\(, \\|tag: \\|HEAD -> \\)")
-          names)
-      (if (and (derived-mode-p 'magit-log-mode)
-               (member "--simplify-by-decoration" (cadr magit-refresh-args)))
-          (let ((branches (magit-list-local-branch-names))
-                (re (format "^%s/.+" (regexp-opt (magit-list-remotes)))))
-            (setq names
-                  (--map (cond ((string-equal it "HEAD")     it)
-                               ((string-prefix-p "refs/" it) it)
-                               ((member it branches) (concat "refs/heads/" it))
-                               ((string-match re it) (concat "refs/remotes/" it))
-                               (t                    (concat "refs/" it)))
-                         (split-string
-                          (replace-regexp-in-string "tag: " "refs/tags/" string)
-                          regexp t))))
-        (setq names (split-string string regexp t)))
-      (let (state head tags branches remotes other combined)
-        (dolist (ref names)
-          (let* ((face (cdr (--first (string-match (car it) ref)
-                                     magit-ref-namespaces)))
-                 (name (propertize (or (match-string 1 ref) ref) 'face face)))
-            (cl-case face
-              ((magit-bisect-bad magit-bisect-skip magit-bisect-good)
-               (setq state name))
-              (magit-head
-               (setq head (propertize "@" 'face 'magit-head)))
-              (magit-tag            (push name tags))
-              (magit-branch-local   (push name branches))
-              (magit-branch-remote  (push name remotes))
-              (t                    (push name other)))))
-        (setq remotes
-              (-keep
-               (lambda (name)
-                 (if (string-match "\\`\\([^/]*\\)/\\(.*\\)\\'" name)
-                     (let ((r (match-string 1 name))
-                           (b (match-string 2 name)))
-                       (and (not (equal b "HEAD"))
-                            (if (equal (concat "refs/remotes/" name)
-                                       (magit-git-string
-                                        "symbolic-ref"
-                                        (format "refs/remotes/%s/HEAD" r)))
-                                (propertize name
-                                            'face 'magit-branch-remote-head)
-                              name)))
-                   name))
-               remotes))
-        (dolist (name branches)
-          (let ((push (car (member (magit-get-push-branch name) remotes))))
-            (when push
-              (setq remotes (delete push remotes))
-              (string-match "^[^/]*/" push)
-              (setq push (substring push 0 (match-end 0))))
-            (if (equal name (magit-get-current-branch))
-                (setq head
-                      (concat push
-                              (propertize name 'face 'magit-branch-current)))
-              (push (concat push name) combined))))
-        (mapconcat #'identity
-                   (-flatten `(,state
-                               ,head
-                               ,@(nreverse tags)
-                               ,@(nreverse combined)
-                               ,@(nreverse remotes)
-                               ,@other))
-                   " ")))))
-
-(defun magit-object-type (object)
-  (magit-git-string "cat-file" "-t" object))
-
-(defmacro magit-with-blob (commit file &rest body)
-  (declare (indent 2)
-           (debug (form form body)))
-  `(with-temp-buffer
-     (let ((buffer-file-name ,file))
-       (save-excursion
-         (magit-git-insert "cat-file" "-p"
-                           (concat ,commit ":" buffer-file-name)))
-       (decode-coding-inserted-region
-        (point-min) (point-max) buffer-file-name t nil nil t)
-       ,@body)))
-
-(defmacro magit-with-temp-index (tree arg &rest body)
-  (declare (indent 2) (debug (form form body)))
-  (let ((file (cl-gensym "file")))
-    `(let ((magit--refresh-cache nil)
-           (,file (magit-convert-filename-for-git
-                   (make-temp-name (magit-git-dir "index.magit.")))))
-       (unwind-protect
-           (progn (--when-let ,tree
-                    (or (magit-git-success "read-tree" ,arg it
-                                           (concat "--index-output=" ,file))
-                        (error "Cannot read tree %s" it)))
-                  (if (file-remote-p default-directory)
-                      (let ((magit-tramp-process-environment
-                             (cons (concat "GIT_INDEX_FILE=" ,file)
-                                   magit-tramp-process-environment)))
-                        ,@body)
-                    (let ((process-environment
-                           (cons (concat "GIT_INDEX_FILE=" ,file)
-                                 process-environment)))
-                      ,@body)))
-         (ignore-errors
-           (delete-file (concat (file-remote-p default-directory) ,file)))))))
-
-(defun magit-commit-tree (message &optional tree &rest parents)
-  (magit-git-string "commit-tree" "--no-gpg-sign" "-m" message
-                    (--mapcat (list "-p" it) (delq nil parents))
-                    (or tree
-                        (magit-git-string "write-tree")
-                        (error "Cannot write tree"))))
-
-(defun magit-commit-worktree (message &optional arg &rest other-parents)
-  (magit-with-temp-index "HEAD" arg
-    (and (magit-update-files (magit-unstaged-files))
-         (apply #'magit-commit-tree message nil "HEAD" other-parents))))
-
-(defun magit-update-files (files)
-  (magit-git-success "update-index" "--add" "--remove" "--" files))
-
-(defun magit-update-ref (ref message rev &optional stashish)
-  (let ((magit--refresh-cache nil))
-    (or (if (not (version< (magit-git-version) "2.6.0"))
-            (zerop (magit-call-git "update-ref" "--create-reflog"
-                                   "-m" message ref rev
-                                   (or (magit-rev-verify ref) "")))
-          ;; `--create-reflog' didn't exist before v2.6.0
-          (let ((oldrev  (magit-rev-verify ref))
-                (logfile (magit-git-dir (concat "logs/" ref))))
-            (unless (file-exists-p logfile)
-              (when oldrev
-                (magit-git-success "update-ref" "-d" ref oldrev))
-              (make-directory (file-name-directory logfile) t)
-              (with-temp-file logfile)
-              (when (and oldrev (not stashish))
-                (magit-git-success "update-ref" "-m" "enable reflog"
-                                   ref oldrev ""))))
-          (magit-git-success "update-ref" "-m" message ref rev
-                             (or (magit-rev-verify ref) "")))
-        (error "Cannot update %s with %s" ref rev))))
-
-(defconst magit-range-re
-  (concat "\\`\\([^ \t]*[^.]\\)?"       ; revA
-          "\\(\\.\\.\\.?\\)"            ; range marker
-          "\\([^.][^ \t]*\\)?\\'"))     ; revB
-
-(defun magit-split-range (range)
-  (and (string-match magit-range-re range)
-       (let ((beg (or (match-string 1 range) "HEAD"))
-             (end (or (match-string 3 range) "HEAD")))
-         (cons (if (string-equal (match-string 2 range) "...")
-                   (magit-git-string "merge-base" beg end)
-                 beg)
-               end))))
-
-(defvar magit-thingatpt--git-revision-chars "-./[:alnum:]@{}^~!"
-  "Characters allowable in filenames, excluding space and colon.")
-
-(put 'git-revision 'end-op
-     (lambda ()
-       (re-search-forward
-        (concat "\\=[" magit-thingatpt--git-revision-chars "]*")
-        nil t)))
-
-(put 'git-revision 'beginning-op
-     (lambda ()
-       (if (re-search-backward
-            (concat "[^" magit-thingatpt--git-revision-chars "]") nil t)
-           (forward-char)
-         (goto-char (point-min)))))
-
-(put 'git-revision 'thing-at-point 'magit-thingatpt--git-revision)
-
-(defun magit-thingatpt--git-revision ()
-  (--when-let (bounds-of-thing-at-point 'git-revision)
-    (let ((text (buffer-substring-no-properties (car it) (cdr it))))
-      (and (magit-rev-verify-commit text) text))))
-
-;;; Completion
-
-(defvar magit-revision-history nil)
-
-(defun magit-read-branch (prompt &optional secondary-default)
-  (magit-completing-read prompt (magit-list-branch-names)
-                         nil t nil 'magit-revision-history
-                         (or (magit-branch-at-point)
-                             secondary-default
-                             (magit-get-current-branch))))
-
-(defun magit-read-branch-or-commit (prompt &optional secondary-default)
-  (or (magit-completing-read prompt (cons "HEAD" (magit-list-refnames))
-                             nil nil nil 'magit-revision-history
-                             (or (magit-branch-or-commit-at-point)
-                                 secondary-default
-                                 (magit-get-current-branch)))
-      (user-error "Nothing selected")))
-
-(defun magit-read-range-or-commit (prompt &optional secondary-default)
-  (magit-read-range
-   prompt
-   (or (--when-let (magit-region-values '(commit branch) t)
-         (deactivate-mark)
-         (concat (car (last it)) ".." (car it)))
-       (magit-branch-or-commit-at-point)
-       secondary-default
-       (magit-get-current-branch))))
-
-(defun magit-read-range (prompt &optional default)
-  (magit-completing-read-multiple prompt
-                                  (magit-list-refnames)
-                                  "\\.\\.\\.?"
-                                  default 'magit-revision-history))
-
-(defun magit-read-remote-branch
-    (prompt &optional remote default local-branch require-match)
-  (let ((choice (magit-completing-read
-                 prompt
-                 (-union (and local-branch
-                              (if remote
-                                  (concat remote "/" local-branch)
-                                (--map (concat it "/" local-branch)
-                                       (magit-list-remotes))))
-                         (magit-list-remote-branch-names remote t))
-                 nil require-match nil 'magit-revision-history default)))
-    (if (or remote (string-match "\\`\\([^/]+\\)/\\(.+\\)" choice))
-        choice
-      (user-error "`%s' doesn't have the form REMOTE/BRANCH" choice))))
-
-(defun magit-read-refspec (prompt remote)
-  (magit-completing-read prompt
-                         (prog2 (message "Determining available refs...")
-                             (magit-remote-list-refs remote)
-                           (message "Determining available refs...done"))))
-
-(defun magit-read-local-branch (prompt &optional secondary-default)
-  (magit-completing-read prompt (magit-list-local-branch-names)
-                         nil t nil 'magit-revision-history
-                         (or (magit-local-branch-at-point)
-                             secondary-default
-                             (magit-get-current-branch))))
-
-(defun magit-read-local-branch-or-commit (prompt)
-  (let ((branches (magit-list-local-branch-names))
-        (commit (magit-commit-at-point)))
-    (or (magit-completing-read prompt
-                               (if commit (cons commit branches) branches)
-                               nil nil nil 'magit-revision-history
-                               (or (magit-local-branch-at-point) commit))
-                     (user-error "Nothing selected"))))
-
-(defun magit-read-local-branch-or-ref (prompt &optional secondary-default)
-  (magit-completing-read prompt (nconc (magit-list-local-branch-names)
-                                       (magit-list-refs "refs/"))
-                         nil t nil 'magit-revision-history
-                         (or (magit-local-branch-at-point)
-                             secondary-default
-                             (magit-get-current-branch))))
-
-(defun magit-read-other-branch
-    (prompt &optional exclude secondary-default no-require-match)
-  (let* ((current (magit-get-current-branch))
-         (atpoint (magit-branch-at-point))
-         (exclude (or exclude current))
-         (default (or (and (not (equal atpoint exclude)) atpoint)
-                      (and (not (equal current exclude)) current)
-                      secondary-default
-                      (magit-get-previous-branch))))
-    (magit-completing-read prompt (delete exclude (magit-list-branch-names))
-                           nil (not no-require-match)
-                           nil 'magit-revision-history default)))
-
-(defun magit-read-other-branch-or-commit
-    (prompt &optional exclude secondary-default)
-  (let* ((current (magit-get-current-branch))
-         (atpoint (magit-branch-or-commit-at-point))
-         (exclude (or exclude current))
-         (default (or (and (not (equal atpoint exclude)) atpoint)
-                      (and (not (equal current exclude)) current)
-                      secondary-default
-                      (magit-get-previous-branch))))
-    (or (magit-completing-read prompt (delete exclude (magit-list-refnames))
-                               nil nil nil 'magit-revision-history default)
-        (user-error "Nothing selected"))))
-
-(defun magit-read-other-local-branch
-    (prompt &optional exclude secondary-default no-require-match)
-  (let* ((current (magit-get-current-branch))
-         (atpoint (magit-local-branch-at-point))
-         (exclude (or exclude current))
-         (default (or (and (not (equal atpoint exclude)) atpoint)
-                      (and (not (equal current exclude)) current)
-                      secondary-default
-                      (magit-get-previous-branch))))
-    (magit-completing-read prompt
-                           (delete exclude (magit-list-local-branch-names))
-                           nil (not no-require-match)
-                           nil 'magit-revision-history default)))
-
-(defun magit-read-branch-prefer-other (prompt)
-  (let* ((current (magit-get-current-branch))
-         (commit  (magit-commit-at-point))
-         (atrev   (and commit (magit-list-branches-pointing-at commit)))
-         (atpoint (magit--painted-branch-at-point)))
-    (magit-completing-read prompt (magit-list-branch-names)
-                           nil t nil 'magit-revision-history
-                           (or (magit-section-when 'branch)
-                               atpoint
-                               (and (not (cdr atrev)) (car atrev))
-                               (--first (not (equal it current)) atrev)
-                               (magit-get-previous-branch)
-                               (car atrev)))))
-
-(cl-defun magit-read-upstream-branch
-    (&optional (branch (magit-get-current-branch)) prompt)
-  (magit-completing-read
-   (or prompt (format "Change upstream of %s to" branch))
-   (-union (--map (concat it "/" branch)
-                  (magit-list-remotes))
-           (delete branch (magit-list-branch-names)))
-   nil nil nil 'magit-revision-history
-   (or (let ((r (magit-remote-branch-at-point))
-             (l (magit-branch-at-point)))
-         (when (and l (equal l branch))
-           (setq l nil))
-         (if magit-prefer-remote-upstream (or r l) (or l r)))
-       (let ((r (magit-branch-p "origin/master"))
-             (l (and (not (equal branch "master"))
-                     (magit-branch-p "master"))))
-         (if magit-prefer-remote-upstream (or r l) (or l r)))
-       (let ((previous (magit-get-previous-branch)))
-         (and (not (equal previous branch)) previous)))))
-
-(defun magit-read-starting-point (prompt &optional branch)
-  (or (magit-completing-read
-       (concat prompt
-               (and branch
-                    (if (bound-and-true-p ivy-mode)
-                        ;; Ivy-mode strips faces from prompt.
-                        (format  " `%s'" branch)
-                      (concat " "
-                              (propertize branch 'face 'magit-branch-local))))
-               " starting at")
-       (nconc (list "HEAD")
-              (magit-list-refnames)
-              (directory-files (magit-git-dir) nil "_HEAD\\'"))
-       nil nil nil 'magit-revision-history
-       (magit--default-starting-point))
-      (user-error "Nothing selected")))
-
-(defun magit--default-starting-point ()
-  (or (let ((r (magit-remote-branch-at-point))
-            (l (magit-local-branch-at-point)))
-        (if magit-prefer-remote-upstream (or r l) (or l r)))
-      (magit-commit-at-point)
-      (magit-stash-at-point)
-      (magit-get-current-branch)))
-
-(defun magit-read-tag (prompt &optional require-match)
-  (magit-completing-read prompt (magit-list-tags) nil
-                         require-match nil 'magit-revision-history
-                         (magit-tag-at-point)))
-
-(defun magit-read-stash (prompt)
-  (let ((stashes (magit-list-stashes)))
-    (magit-completing-read prompt stashes nil t nil nil
-                           (magit-stash-at-point)
-                           (car stashes))))
-
-(defun magit-read-remote (prompt &optional default use-only)
-  (let ((remotes (magit-list-remotes)))
-    (if (and use-only (= (length remotes) 1))
-        (car remotes)
-      (magit-completing-read prompt remotes
-                             nil t nil nil
-                             (or default
-                                 (magit-remote-at-point)
-                                 (magit-get-remote))))))
-
-(defun magit-read-remote-or-url (prompt &optional default)
-  (magit-completing-read prompt
-                         (nconc (magit-list-remotes)
-                                (list "https://" "git://" "git@"))
-                         nil nil nil nil
-                         (or default
-                             (magit-remote-at-point)
-                             (magit-get-remote))))
-
-(defun magit-read-module-path (prompt &optional predicate)
-  (magit-completing-read prompt (magit-list-module-paths)
-                         predicate t nil nil
-                         (magit-module-at-point predicate)))
-
-(defun magit-module-confirm (verb &optional predicate)
-  (let (modules)
-    (if current-prefix-arg
-        (progn
-          (setq modules (magit-list-module-paths))
-          (when predicate
-            (setq modules (-filter predicate modules)))
-          (unless modules
-            (if predicate
-                (user-error "No modules satisfying %s available" predicate)
-              (user-error "No modules available"))))
-      (setq modules (magit-region-values
-                     '(submodule
-                       [file modules-unpulled-from-upstream]
-                       [file modules-unpulled-from-pushremote]
-                       [file modules-unpushed-to-upstream]
-                       [file modules-unpushed-to-pushremote])))
-      (when modules
-        (when predicate
-          (setq modules (-filter predicate modules)))
-        (unless modules
-          (user-error "No modules satisfying %s selected" predicate))))
-    (if (> (length modules) 1)
-        (magit-confirm t nil (format "%s %%i modules" verb) nil modules)
-      (list (magit-read-module-path (format "%s module" verb) predicate)))))
-
-;;; Variables
-
-(defun magit-config-get-from-cached-list (key)
-  (gethash
-   ;; `git config --list' downcases first and last components of the key.
-   (--> key
-        (replace-regexp-in-string "\\`[^.]+" #'downcase it t t)
-        (replace-regexp-in-string "[^.]+\\'" #'downcase it t t))
-   (magit--with-refresh-cache (cons (magit-toplevel) 'config)
-     (let ((configs (make-hash-table :test 'equal)))
-       (dolist (conf (magit-git-items "config" "--list" "-z"))
-         (let* ((nl-pos (cl-position ?\n conf))
-                (key (substring conf 0 nl-pos))
-                (val (if nl-pos (substring conf (1+ nl-pos)) "")))
-           (puthash key (nconc (gethash key configs) (list val)) configs)))
-       configs))))
-
-(defun magit-get (&rest keys)
-  "Return the value of the Git variable specified by KEYS."
-  (car (last (apply 'magit-get-all keys))))
-
-(defun magit-get-all (&rest keys)
-  "Return all values of the Git variable specified by KEYS."
-  (let ((magit-git-debug nil)
-        (arg (and (or (null (car keys))
-                      (string-prefix-p "--" (car keys)))
-                  (pop keys)))
-        (key (mapconcat 'identity keys ".")))
-    (if (and magit--refresh-cache (not arg))
-        (magit-config-get-from-cached-list key)
-      (magit-git-items "config" arg "-z" "--get-all" key))))
-
-(defun magit-get-boolean (&rest keys)
-  "Return the boolean value of the Git variable specified by KEYS."
-  (let ((key (mapconcat 'identity keys ".")))
-    (if magit--refresh-cache
-        (equal "true" (car (last (magit-config-get-from-cached-list key))))
-      (equal (magit-git-str "config" "--bool" key) "true"))))
-
-(defun magit-set (value &rest keys)
-  "Set the value of the Git variable specified by KEYS to VALUE."
-  (let ((arg (and (or (null (car keys))
-                      (string-prefix-p "--" (car keys)))
-                  (pop keys)))
-        (key (mapconcat 'identity keys ".")))
-    (if value
-        (magit-git-success "config" arg key value)
-      (magit-git-success "config" arg "--unset" key))
-    value))
-
-(gv-define-setter magit-get (val &rest keys)
-  `(magit-set ,val ,@keys))
-
-(defun magit-set-all (values &rest keys)
-  "Set all values of the Git variable specified by KEYS to VALUES."
-  (let ((arg (and (or (null (car keys))
-                      (string-prefix-p "--" (car keys)))
-                  (pop keys)))
-        (var (mapconcat 'identity keys ".")))
-    (when (magit-get var)
-      (magit-call-git "config" arg "--unset-all" var))
-    (dolist (v values)
-      (magit-call-git "config" arg "--add" var v))))
-
-;;;; Variables in Popups
-
-(defun magit--format-popup-variable:value (variable width &optional global)
-  (concat variable
-          (make-string (max 1 (- width 3 (length variable))) ?\s)
-          (if-let ((value (magit-get (and global "--global") variable)))
-              (propertize value 'face 'magit-popup-option-value)
-            (propertize "unset" 'face 'magit-popup-disabled-argument))))
-
-(defun magit--format-popup-variable:values (variable width &optional global)
-  (concat variable
-          (make-string (max 1 (- width 3 (length variable))) ?\s)
-          (if-let ((values (magit-get-all (and global "--global") variable)))
-              (concat
-               (propertize (car values) 'face 'magit-popup-option-value)
-               (mapconcat
-                (lambda (value)
-                  (concat "\n" (make-string width ?\s)
-                          (propertize value
-                                      'face 'magit-popup-option-value)))
-                (cdr values) ""))
-            (propertize "unset" 'face 'magit-popup-disabled-argument))))
-
-(defun magit--set-popup-variable
-    (variable choices &optional default other)
-  (magit-set (--if-let (magit-git-string "config" "--local" variable)
-                 (cadr (member it choices))
-               (car choices))
-             variable)
-  (magit-with-pre-popup-buffer
-    (magit-refresh))
-  (message "%s %s" variable
-           (magit--format-popup-variable:choices*
-            variable choices default other)))
-
-(defun magit--format-popup-variable:choices
-    (variable choices &optional default other width)
-  (concat variable
-          (if width (make-string (- width (length variable)) ?\s) " ")
-          (magit--format-popup-variable:choices*
-           variable choices default other)))
-
-(defun magit--format-popup-variable:choices*
-    (variable choices &optional default other)
-  (let ((local  (magit-git-string "config" "--local"  variable))
-        (global (magit-git-string "config" "--global" variable)))
-    (when other
-      (setq other (--when-let (magit-get other)
-                    (concat other ":" it))))
-    (concat
-     (propertize "[" 'face 'magit-popup-disabled-argument)
-     (mapconcat
-      (lambda (choice)
-        (propertize choice 'face (if (equal choice local)
-                                     'magit-popup-option-value
-                                   'magit-popup-disabled-argument)))
-      choices
-      (propertize "|" 'face 'magit-popup-disabled-argument))
-     (when (or global other default)
-       (concat
-        (propertize "|" 'face 'magit-popup-disabled-argument)
-        (cond (global
-               (propertize (concat "global:" global)
-                           'face (cond (local
-                                        'magit-popup-disabled-argument)
-                                       ((member global choices)
-                                        'magit-popup-option-value)
-                                       (t
-                                        'font-lock-warning-face))))
-              (other
-               (propertize other
-                           'face (if local
-                                     'magit-popup-disabled-argument
-                                   'magit-popup-option-value)))
-              (default
-               (propertize (concat "default:" default)
-                           'face (if local
-                                     'magit-popup-disabled-argument
-                                   'magit-popup-option-value))))))
-     (propertize "]" 'face 'magit-popup-disabled-argument))))
-
-(provide 'magit-git)
-;;; magit-git.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.elc
deleted file mode 100644
index 9048415d2c4c..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-git.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.el
deleted file mode 100644
index 6434f9f3c826..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.el
+++ /dev/null
@@ -1,241 +0,0 @@
-;;; magit-imenu.el --- Integrate Imenu in magit major modes  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Damien Cassou <damien@cassou.me>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Emacs' major modes can facilitate navigation in their buffers by
-;; supporting Imenu.  In such major modes, launching Imenu (M-x imenu)
-;; makes Emacs display a list of items (e.g., function definitions in
-;; a programming major mode).  Selecting an item from this list moves
-;; point to this item.
-
-;; magit-imenu.el adds Imenu support to every major mode in Magit
-
-;;; Code:
-
-(eval-when-compile (require 'subr-x))
-
-(require 'magit)
-(require 'git-rebase)
-
-(defun magit-imenu--index-function (entry-types menu-types)
-  "Return an alist of imenu entries in current buffer.
-
-ENTRY-TYPES is a list of section types to be selected through
-`imenu'.
-
-MENU-TYPES is a list of section types containing elements of
-ENTRY-TYPES.  Elements of MENU-TYPES are are used to categories
-elements of ENTRY-TYPES.
-
-This function is used as a helper for functions set as
-`imenu-create-index-function'."
-  (let ((entries (make-hash-table :test 'equal)))
-    (goto-char (point-max))
-    (while (magit-section--backward-find
-            (lambda ()
-              (let* ((section (magit-current-section))
-                     (type (oref section type))
-                     (parent (oref section parent))
-                     (parent-type (oref parent type)))
-                (and (-contains-p entry-types type)
-                     (-contains-p menu-types parent-type)))))
-      (let* ((section (magit-current-section))
-             (name (buffer-substring-no-properties
-                    (line-beginning-position)
-                    (line-end-position)))
-             (parent (oref section parent))
-             (parent-title (buffer-substring-no-properties
-                            (oref parent start)
-                            (1- (oref parent content)))))
-        (puthash parent-title
-                 (cons (cons name (point))
-                       (gethash parent-title entries (list)))
-                 entries)))
-    (mapcar (lambda (menu-title)
-              (cons menu-title (gethash menu-title entries)))
-            (hash-table-keys entries))))
-
-;;; Log mode
-
-;;;###autoload
-(defun magit-imenu--log-prev-index-position-function ()
-  "Move point to previous line in current buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (magit-section--backward-find
-   (lambda ()
-     (-contains-p '(commit stash)
-                  (oref (magit-current-section) type)))))
-
-;;;###autoload
-(defun magit-imenu--log-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (save-match-data
-    (looking-at "\\([^ ]+\\)[ *|]+\\(.+\\)$")
-    (format "%s: %s"
-            (match-string-no-properties 1)
-            (match-string-no-properties 2))))
-
-;;; Diff mode
-
-;;;###autoload
-(defun magit-imenu--diff-prev-index-position-function ()
-  "Move point to previous file line in current buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (magit-section--backward-find
-   (lambda ()
-     (let ((section (magit-current-section)))
-       (and (magit-file-section-p section)
-            (not (equal (oref (oref section parent) type)
-                        'diffstat)))))))
-
-;;;###autoload
-(defun magit-imenu--diff-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (buffer-substring-no-properties (line-beginning-position)
-                                  (line-end-position)))
-
-;;; Status mode
-
-;;;###autoload
-(defun magit-imenu--status-create-index-function ()
-  "Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'."
-  (magit-imenu--index-function
-   '(file commit stash)
-   '(unpushed unstaged unpulled untracked staged stashes)))
-
-;;;; Refs mode
-
-;;;###autoload
-(defun magit-imenu--refs-create-index-function ()
-  "Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'."
-  (magit-imenu--index-function
-   '(branch commit tag)
-   '(local remote tags)))
-
-;;;; Cherry mode
-
-;;;###autoload
-(defun magit-imenu--cherry-create-index-function ()
-  "Return an alist of all imenu entries in current buffer.
-This function is used as a value for
-`imenu-create-index-function'."
-  (magit-imenu--index-function
-   '(commit)
-   '(cherries)))
-
-;;;; Submodule list mode
-
-;;;###autoload
-(defun magit-imenu--submodule-prev-index-position-function ()
-  "Move point to previous line in magit-submodule-list buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (unless (bobp)
-    (forward-line -1)))
-
-;;;###autoload
-(defun magit-imenu--submodule-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (elt (tabulated-list-get-entry) 0))
-
-;;;; Repolist mode
-
-;;;###autoload
-(defun magit-imenu--repolist-prev-index-position-function ()
-  "Move point to previous line in magit-repolist buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (unless (bobp)
-    (forward-line -1)))
-
-;;;###autoload
-(defun magit-imenu--repolist-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (let ((entry (tabulated-list-get-entry)))
-    (format "%s (%s)"
-            (elt entry 0)
-            (elt entry (1- (length entry))))))
-
-;;;; Process mode
-
-;;;###autoload
-(defun magit-imenu--process-prev-index-position-function ()
-  "Move point to previous process in magit-process buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (magit-section--backward-find
-   (lambda ()
-     (eq (oref (magit-current-section) type) 'process))))
-
-;;;###autoload
-(defun magit-imenu--process-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (buffer-substring-no-properties (line-beginning-position)
-                                  (line-end-position)))
-
-;;;; Rebase mode
-
-;;;###autoload
-(defun magit-imenu--rebase-prev-index-position-function ()
-  "Move point to previous commit in git-rebase buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
-  (catch 'found
-    (while (not (bobp))
-      (git-rebase-backward-line)
-      (when (git-rebase-line-p)
-        (throw 'found t)))))
-
-;;;###autoload
-(defun magit-imenu--rebase-extract-index-name-function ()
-  "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'.  Point should be at the
-beginning of the line."
-  (buffer-substring-no-properties (line-beginning-position)
-                                  (line-end-position)))
-
-(provide 'magit-imenu)
-;;; magit-imenu.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.elc
deleted file mode 100644
index b1897a7b56c6..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-imenu.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.el
deleted file mode 100644
index e4c7b013310b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.el
+++ /dev/null
@@ -1,1708 +0,0 @@
-;;; magit-log.el --- inspect Git history  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for looking at Git logs, including
-;; special logs like reflogs and cherry-logs, as well as for selecting
-;; a commit from a log.
-
-;;; Code:
-
-(require 'magit-core)
-(require 'magit-diff)
-
-(declare-function magit-blob-visit "magit-files" (blob-or-file line))
-(declare-function magit-insert-head-branch-header "magit-status"
-                  (&optional branch))
-(declare-function magit-insert-upstream-branch-header "magit-status"
-                  (&optional branch pull keyword))
-(declare-function magit-read-file-from-rev "magit-files"
-                  (rev prompt &optional default))
-(declare-function magit-show-commit "magit-diff"
-                  (arg1 &optional arg2 arg3 arg4))
-(defvar magit-refs-focus-column-width)
-(defvar magit-refs-margin)
-(defvar magit-refs-show-commit-count)
-(defvar magit-buffer-margin)
-(defvar magit-status-margin)
-(defvar magit-status-sections-hook)
-
-(require 'ansi-color)
-(require 'crm)
-(require 'which-func)
-
-(defvar bookmark-make-record-function)
-
-;;; Options
-;;;; Log Mode
-
-(defgroup magit-log nil
-  "Inspect and manipulate Git history."
-  :link '(info-link "(magit)Logging")
-  :group 'magit-modes)
-
-(defcustom magit-log-mode-hook nil
-  "Hook run after entering Magit-Log mode."
-  :group 'magit-log
-  :type 'hook)
-
-(defcustom magit-log-arguments '("-n256" "--graph" "--decorate")
-  "The log arguments used in `magit-log-mode' buffers."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-git-arguments
-  :group 'magit-log
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom magit-log-remove-graph-args '("--follow" "--grep" "-G" "-S" "-L")
-  "The log arguments that cause the `--graph' argument to be dropped."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-log
-  :type '(repeat (string :tag "Argument"))
-  :options '("--follow" "--grep" "-G" "-S" "-L"))
-
-(defcustom magit-log-revision-headers-format "\
-%+b
-Author:    %aN <%aE>
-Committer: %cN <%cE>"
-  "Additional format string used with the `++header' argument."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-log
-  :type 'string)
-
-(defcustom magit-log-auto-more nil
-  "Insert more log entries automatically when moving past the last entry.
-Only considered when moving past the last entry with
-`magit-goto-*-section' commands."
-  :group 'magit-log
-  :type 'boolean)
-
-(defcustom magit-log-margin '(t age magit-log-margin-width t 18)
-  "Format of the margin in `magit-log-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-log
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set (apply-partially #'magit-margin-set-variable 'magit-log-mode))
-
-(defcustom magit-log-show-refname-after-summary nil
-  "Whether to show refnames after commit summaries.
-This is useful if you use really long branch names."
-  :package-version '(magit . "2.2.0")
-  :group 'magit-log
-  :type 'boolean)
-
-(defcustom magit-log-highlight-keywords t
-  "Whether to highlight bracketed keywords in commit summaries."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-log
-  :type 'boolean)
-
-(defcustom magit-log-header-line-function 'magit-log-header-line-sentence
-  "Function used to generate text shown in header line of log buffers."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-log
-  :type '(choice (function-item magit-log-header-line-arguments)
-                 (function-item magit-log-header-line-sentence)
-                 function))
-
-(defface magit-log-graph
-  '((((class color) (background light)) :foreground "grey30")
-    (((class color) (background  dark)) :foreground "grey80"))
-  "Face for the graph part of the log output."
-  :group 'magit-faces)
-
-(defface magit-log-author
-  '((((class color) (background light)) :foreground "firebrick")
-    (((class color) (background  dark)) :foreground "tomato"))
-  "Face for the author part of the log output."
-  :group 'magit-faces)
-
-(defface magit-log-date
-  '((((class color) (background light)) :foreground "grey30")
-    (((class color) (background  dark)) :foreground "grey80"))
-  "Face for the date part of the log output."
-  :group 'magit-faces)
-
-(defface magit-header-line-log-select
-  '((t :inherit bold))
-  "Face for the `header-line' in `magit-log-select-mode'."
-  :group 'magit-faces)
-
-;;;; File Log
-
-(defcustom magit-log-buffer-file-locked t
-  "Whether `magit-log-buffer-file' uses a dedicated buffer."
-  :package-version '(magit . "2.7.0")
-  :group 'magit-commands
-  :group 'magit-log
-  :type 'boolean)
-
-;;;; Select Mode
-
-(defcustom magit-log-select-arguments '("-n256" "--graph" "--decorate")
-  "The log arguments used in `magit-log-select-mode' buffers."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-log
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom magit-log-select-show-usage 'both
-  "Whether to show usage information when selecting a commit from a log.
-The message can be shown in the `echo-area' or the `header-line', or in
-`both' places.  If the value isn't one of these symbols, then it should
-be nil, in which case no usage information is shown."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-log
-  :type '(choice (const :tag "in echo-area" echo-area)
-                 (const :tag "in header-line" header-line)
-                 (const :tag "in both places" both)
-                 (const :tag "nowhere")))
-
-(defcustom magit-log-select-margin
-  (list (nth 0 magit-log-margin)
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width t
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-log-select-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-log
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-log-select-mode))
-
-;;;; Cherry Mode
-
-(defcustom magit-cherry-sections-hook
-  '(magit-insert-cherry-headers
-    magit-insert-cherry-commits)
-  "Hook run to insert sections into the cherry buffer."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-log
-  :type 'hook)
-
-(defcustom magit-cherry-margin
-  (list (nth 0 magit-log-margin)
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width t
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-cherry-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-log
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-cherry-mode))
-
-;;;; Reflog Mode
-
-(defcustom magit-reflog-arguments '("-n256")
-  "The log arguments used in `magit-reflog-mode' buffers."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-git-arguments
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom magit-reflog-margin
-  (list (nth 0 magit-log-margin)
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width nil
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-reflog-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-log
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-reflog-mode))
-
-(defface magit-reflog-commit '((t :foreground "green"))
-  "Face for commit commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-amend '((t :foreground "magenta"))
-  "Face for amend commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-merge '((t :foreground "green"))
-  "Face for merge, checkout and branch commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-checkout '((t :foreground "blue"))
-  "Face for checkout commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-reset '((t :foreground "red"))
-  "Face for reset commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-rebase '((t :foreground "magenta"))
-  "Face for rebase commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-cherry-pick '((t :foreground "green"))
-  "Face for cherry-pick commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-remote '((t :foreground "cyan"))
-  "Face for pull and clone commands in reflogs."
-  :group 'magit-faces)
-
-(defface magit-reflog-other '((t :foreground "cyan"))
-  "Face for other commands in reflogs."
-  :group 'magit-faces)
-
-;;;; Log Sections
-
-(defcustom magit-log-section-commit-count 10
-  "How many recent commits to show in certain log sections.
-How many recent commits `magit-insert-recent-commits' and
-`magit-insert-unpulled-from-upstream-or-recent' (provided
-the upstream isn't ahead of the current branch) show."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-status
-  :type 'number)
-
-(defcustom magit-log-section-arguments '("-n256" "--decorate")
-  "The log arguments used in buffers that show other things besides logs."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-git-arguments
-  :group 'magit-log
-  :group 'magit-status
-  :type '(repeat (string :tag "Argument")))
-
-;;; Commands
-;;;; Popups
-
-(defvar magit-log-popup
-  '(:variable magit-log-arguments
-    :man-page "git-log"
-    :switches ((?g "Show graph"              "--graph")
-               (?c "Show graph in color"     "--color")
-               (?d "Show refnames"           "--decorate")
-               (?S "Show signatures"         "--show-signature")
-               (?u "Show diffs"              "--patch")
-               (?s "Show diffstats"          "--stat")
-               (?h "Show header"             "++header" magit-log++header)
-               (?r "Show in reverse order"   "--reverse")
-               (?D "Simplify by decoration"  "--simplify-by-decoration")
-               (?f "Follow renames when showing single-file log" "--follow"))
-    :options  ((?n "Limit number of commits" "-n")
-               (?f "Limit to files"          "-- " magit-read-files)
-               (?a "Limit to author"         "--author=")
-               (?o "Order commits by"        "++order=" magit-log-select-order)
-               (?g "Search messages"         "--grep=")
-               (?G "Search changes"          "-G")
-               (?S "Search occurrences"      "-S")
-               (?L "Trace line evolution"    "-L" magit-read-file-trace))
-    :actions  ((?l "Log current"             magit-log-current)
-               (?L "Log local branches"      magit-log-branches)
-               (?r "Reflog current"          magit-reflog-current)
-               (?o "Log other"               magit-log)
-               (?b "Log all branches"        magit-log-all-branches)
-               (?O "Reflog other"            magit-reflog)
-               (?h "Log HEAD"                magit-log-head)
-               (?a "Log all references"      magit-log-all)
-               (?H "Reflog HEAD"             magit-reflog-head))
-    :default-action magit-log-current
-    :max-action-columns 3))
-
-(defvar magit-log-mode-refresh-popup
-  '(:variable magit-log-arguments
-    :man-page "git-log"
-    :switches ((?g "Show graph"              "--graph")
-               (?c "Show graph in color"     "--color")
-               (?d "Show refnames"           "--decorate")
-               (?S "Show signatures"         "--show-signature")
-               (?u "Show diffs"              "--patch")
-               (?s "Show diffstats"          "--stat")
-               (?r "Show in reverse order"   "--reverse")
-               (?D "Simplify by decoration"  "--simplify-by-decoration")
-               (?f "Follow renames when showing single-file log" "--follow"))
-    :options  ((?n "Limit number of commits" "-n")
-               (?f "Limit to files"          "-- " magit-read-files)
-               (?a "Limit to author"         "--author=")
-               (?o "Order commits by"        "++order=" magit-log-select-order)
-               (?g "Search messages"         "--grep=")
-               (?G "Search changes"          "-G")
-               (?S "Search occurrences"      "-S")
-               (?L "Trace line evolution"    "-L" magit-read-file-trace))
-    :actions  ((?g "Refresh"       magit-log-refresh)
-               (?L "Toggle margin" magit-toggle-margin)
-               (?s "Set defaults"  magit-log-set-default-arguments) nil
-               (?w "Save defaults" magit-log-save-default-arguments))
-    :max-action-columns 2))
-
-(defvar magit-reflog-mode-refresh-popup
-  '(:variable magit-reflog-arguments
-    :man-page "git-reflog"
-    :options  ((?n "Limit number of commits" "-n"))))
-
-(defvar magit-log-refresh-popup
-  '(:variable magit-log-arguments
-    :man-page "git-log"
-    :switches ((?g "Show graph"          "--graph")
-               (?c "Show graph in color" "--color")
-               (?d "Show refnames"       "--decorate"))
-    :options  ((?n "Limit number of commits" "-n")
-               (?o "Order commits by"        "++order=" magit-log-select-order))
-    :actions  ("Refresh"
-               (?g "buffer"                   magit-log-refresh)
-               (?s "buffer and set defaults"  magit-log-set-default-arguments)
-               (?w "buffer and save defaults" magit-log-save-default-arguments)
-               "Margin"
-               (?L "toggle visibility" magit-toggle-margin)
-               (?l "cycle style"       magit-cycle-margin-style)
-               (?d "toggle details"    magit-toggle-margin-details))
-    :max-action-columns 1))
-
-(magit-define-popup-keys-deferred 'magit-log-popup)
-(magit-define-popup-keys-deferred 'magit-log-mode-refresh-popup)
-(magit-define-popup-keys-deferred 'magit-log-refresh-popup)
-
-(defun magit-read-file-trace (&rest _ignored)
-  (let ((file  (magit-read-file-from-rev "HEAD" "File"))
-        (trace (magit-read-string "Trace")))
-    (concat trace (or (match-string 2 trace) ":") file)))
-
-(defun magit-log-select-order (&rest _ignored)
-  "Set one `--<value>-order' option in Git log.
-This encompasses the options `--author-date-order',
-`--date-order', and `--topo-order'."
-  (magit-read-char-case "Order commits by " t
-    (?t "[t]opography"     "topo")
-    (?a "[a]uthor date"    "author-date")
-    (?c "[c]ommitter date" "date")))
-
-;; This is a dummy procedure used to show help in `magit-log-popup'.
-(defun magit-log++header ()
-  "Insert a header after each revision summary in Git log.
-Customize `magit-log-revision-headers-format' to change this
-header."
-  nil)
-
-(defun magit-log-get-buffer-args ()
-  (cond ((and magit-use-sticky-arguments
-              (derived-mode-p 'magit-log-mode))
-         (list (nth 1 magit-refresh-args)
-               (nth 2 magit-refresh-args)))
-        ((and (eq magit-use-sticky-arguments t)
-              (--when-let (magit-mode-get-buffer 'magit-log-mode)
-                (with-current-buffer it
-                  (list (nth 1 magit-refresh-args)
-                        (nth 2 magit-refresh-args))))))
-        (t
-         (list (default-value 'magit-log-arguments) nil))))
-
-(defun magit-log-arguments (&optional refresh)
-  (cond ((memq magit-current-popup
-               '(magit-log-popup magit-log-refresh-popup))
-         (magit-popup-export-file-args magit-current-popup-args))
-        ((and refresh (not (derived-mode-p 'magit-log-mode)))
-         (list magit-log-section-arguments nil))
-        (t
-         (magit-log-get-buffer-args))))
-
-(defun magit-log-popup (arg)
-  "Popup console for log commands."
-  (interactive "P")
-  (let ((magit-log-refresh-popup
-         (pcase major-mode
-           (`magit-log-mode magit-log-mode-refresh-popup)
-           (_               magit-log-refresh-popup)))
-        (magit-log-arguments
-         (apply #'magit-popup-import-file-args (magit-log-get-buffer-args))))
-    (magit-invoke-popup 'magit-log-popup nil arg)))
-
-;;;###autoload
-(defun magit-log-buffer-file-popup ()
-  "Popup console for log commands.
-
-This is a variant of `magit-log-popup' which shows the same popup
-but which limits the log to the file being visited in the current
-buffer."
-  (interactive)
-  (if-let ((file (magit-file-relative-name)))
-      (let ((magit-log-arguments
-             (magit-popup-import-file-args
-              (if-let ((buffer (magit-mode-get-buffer 'magit-log-mode)))
-                  (with-current-buffer buffer
-                    (nth 2 magit-refresh-args))
-                (default-value 'magit-log-arguments))
-              (list file))))
-        (magit-invoke-popup 'magit-log-popup nil nil))
-    (user-error "Buffer isn't visiting a file")))
-
-(defun magit-log-refresh-popup (arg)
-  "Popup console for changing log arguments in the current buffer."
-  (interactive "P")
-  (magit-log-refresh-assert)
-  (let ((magit-log-refresh-popup
-         (cond ((derived-mode-p 'magit-log-select-mode)
-                magit-log-refresh-popup)
-               ((derived-mode-p 'magit-log-mode)
-                (let ((def (copy-sequence magit-log-refresh-popup)))
-                  (plist-put def :switches (plist-get magit-log-popup :switches))
-                  (plist-put def :options  (plist-get magit-log-popup :options))
-                  def))
-               (t
-                magit-log-refresh-popup)))
-        (magit-log-arguments
-         (cond ((derived-mode-p 'magit-log-select-mode)
-                (cadr magit-refresh-args))
-               ((derived-mode-p 'magit-log-mode)
-                (magit-popup-import-file-args (nth 1 magit-refresh-args)
-                                              (nth 2 magit-refresh-args)))
-               (t
-                magit-log-section-arguments))))
-    (magit-invoke-popup 'magit-log-refresh-popup nil arg)))
-
-;;;; Refresh Commands
-
-(defun magit-log-refresh (args files)
-  "Set the local log arguments for the current buffer."
-  (interactive (magit-log-arguments t))
-  (magit-log-refresh-assert)
-  (cond ((derived-mode-p 'magit-log-select-mode)
-         (setcar (cdr magit-refresh-args) args))
-        ((derived-mode-p 'magit-log-mode)
-         (setcdr magit-refresh-args (list args files)))
-        (t
-         (setq-local magit-log-section-arguments args)))
-  (magit-refresh))
-
-(defun magit-log-set-default-arguments (args files)
-  "Set the global log arguments for the current buffer."
-  (interactive (magit-log-arguments t))
-  (magit-log-refresh-assert)
-  (cond ((derived-mode-p 'magit-log-select-mode)
-         (customize-set-variable 'magit-log-select-arguments args)
-         (setcar (cdr magit-refresh-args) args))
-        ((derived-mode-p 'magit-log-mode)
-         (customize-set-variable 'magit-log-arguments args)
-         (setcdr magit-refresh-args (list args files)))
-        (t
-         (customize-set-variable 'magit-log-section-arguments args)
-         (kill-local-variable    'magit-log-section-arguments)))
-  (magit-refresh))
-
-(defun magit-log-save-default-arguments (args files)
-  "Set and save the global log arguments for the current buffer."
-  (interactive (magit-log-arguments t))
-  (magit-log-refresh-assert)
-  (cond ((derived-mode-p 'magit-log-select-mode)
-         (customize-save-variable 'magit-log-select-arguments args)
-         (setcar (cdr magit-refresh-args) args))
-        ((derived-mode-p 'magit-log-mode)
-         (customize-save-variable 'magit-log-arguments args)
-         (setcdr magit-refresh-args (list args files)))
-        (t
-         (customize-save-variable 'magit-log-section-arguments args)
-         (kill-local-variable     'magit-log-section-arguments)))
-  (magit-refresh))
-
-(defun magit-log-refresh-assert ()
-  (cond ((derived-mode-p 'magit-reflog-mode)
-         (user-error "Cannot change log arguments in reflog buffers"))
-        ((derived-mode-p 'magit-cherry-mode)
-         (user-error "Cannot change log arguments in cherry buffers"))))
-
-;;;; Log Commands
-
-(defvar magit-log-read-revs-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map crm-local-completion-map)
-    (define-key map "\s" 'self-insert-command)
-    map))
-
-(defun magit-log-read-revs (&optional use-current)
-  (or (and use-current (--when-let (magit-get-current-branch) (list it)))
-      (let ((collection `(,@(and (file-exists-p (magit-git-dir "FETCH_HEAD"))
-                                 (list "FETCH_HEAD"))
-                          ,@(magit-list-refnames))))
-        (split-string
-         (magit-completing-read-multiple "Log rev,s" collection
-                                         "\\(\\.\\.\\.?\\|[, ]\\)"
-                                         (or (magit-branch-or-commit-at-point)
-                                             (unless use-current
-                                               (magit-get-previous-branch)))
-                                         'magit-revision-history
-                                         magit-log-read-revs-map)
-         "[, ]" t))))
-
-;;;###autoload
-(defun magit-log-current (revs &optional args files)
-  "Show log for the current branch.
-When `HEAD' is detached or with a prefix argument show log for
-one or more revs read from the minibuffer."
-  (interactive (cons (magit-log-read-revs t)
-                     (magit-log-arguments)))
-  (magit-log revs args files))
-
-;;;###autoload
-(defun magit-log (revs &optional args files)
-  "Show log for one or more revs read from the minibuffer.
-The user can input any revision or revisions separated by a
-space, or even ranges, but only branches and tags, and a
-representation of the commit at point, are available as
-completion candidates."
-  (interactive (cons (magit-log-read-revs)
-                     (magit-log-arguments)))
-  (require 'magit)
-  (magit-mode-setup #'magit-log-mode revs args files)
-  (magit-log-goto-same-commit))
-
-;;;###autoload
-(defun magit-log-head (&optional args files)
-  "Show log for `HEAD'."
-  (interactive (magit-log-arguments))
-  (magit-log (list "HEAD") args files))
-
-;;;###autoload
-(defun magit-log-branches (&optional args files)
-  "Show log for all local branches and `HEAD'."
-  (interactive (magit-log-arguments))
-  (magit-log (if (magit-get-current-branch)
-                 (list "--branches")
-               (list "HEAD" "--branches"))
-             args files))
-
-;;;###autoload
-(defun magit-log-all-branches (&optional args files)
-  "Show log for all local and remote branches and `HEAD'."
-  (interactive (magit-log-arguments))
-  (magit-log (if (magit-get-current-branch)
-                 (list "--branches" "--remotes")
-               (list "HEAD" "--branches" "--remotes"))
-             args files))
-
-;;;###autoload
-(defun magit-log-all (&optional args files)
-  "Show log for all references and `HEAD'."
-  (interactive (magit-log-arguments))
-  (magit-log (if (magit-get-current-branch)
-                 (list "--all")
-               (list "HEAD" "--all"))
-             args files))
-
-;;;###autoload
-(defun magit-log-buffer-file (&optional follow beg end)
-  "Show log for the blob or file visited in the current buffer.
-With a prefix argument or when `--follow' is part of
-`magit-log-arguments', then follow renames.  When the region is
-active, restrict the log to the lines that the region touches."
-  (interactive
-   (cons current-prefix-arg
-         (and (region-active-p)
-              (magit-file-relative-name)
-              (save-restriction
-                (widen)
-                (list (line-number-at-pos (region-beginning))
-                      (line-number-at-pos
-                       (let ((end (region-end)))
-                         (if (char-after end)
-                             end
-                           ;; Ensure that we don't get the line number
-                           ;; of a trailing newline.
-                           (1- end)))))))))
-  (require 'magit)
-  (if-let ((file (magit-file-relative-name)))
-      (magit-mode-setup-internal
-       #'magit-log-mode
-       (list (list (or magit-buffer-refname
-                       (magit-get-current-branch)
-                       "HEAD"))
-             (let ((args (car (magit-log-arguments))))
-               (when (and follow (not (member "--follow" args)))
-                 (push "--follow" args))
-               (when (and (file-regular-p
-                           (expand-file-name file (magit-toplevel)))
-                          beg end)
-                 (setq args (cons (format "-L%s,%s:%s" beg end file)
-                                  (cl-delete "-L" args :test
-                                             'string-prefix-p)))
-                 (setq file nil))
-               args)
-             (and file (list file)))
-       magit-log-buffer-file-locked)
-    (user-error "Buffer isn't visiting a file"))
-  (magit-log-goto-same-commit))
-
-;;;###autoload
-(defun magit-log-trace-definition (file fn rev)
-  "Show log for the definition at point."
-  (interactive (list (or (magit-file-relative-name)
-                         (user-error "Buffer isn't visiting a file"))
-                     (which-function)
-                     (or magit-buffer-refname
-                         (magit-get-current-branch)
-                         "HEAD")))
-  (require 'magit)
-  (magit-mode-setup-internal
-   #'magit-log-mode
-   (list (list rev)
-         (cons (format "-L:%s:%s" (regexp-quote fn) file)
-               (cl-delete "-L" (car (magit-log-arguments))
-                          :test 'string-prefix-p))
-         nil)
-   magit-log-buffer-file-locked)
-  (magit-log-goto-same-commit))
-
-(defun magit-diff-trace-definition ()
-  "Show log for the definition at point in a diff."
-  (interactive)
-  (let (buf pos)
-    (save-window-excursion
-      (call-interactively #'magit-diff-visit-file)
-      (setq buf (current-buffer))
-      (setq pos (point)))
-    (save-excursion
-      (with-current-buffer buf
-        (goto-char pos)
-        (call-interactively #'magit-log-trace-definition)))))
-
-;;;###autoload
-(defun magit-reflog-current ()
-  "Display the reflog of the current branch."
-  (interactive)
-  (magit-reflog (magit-get-current-branch)))
-
-;;;###autoload
-(defun magit-reflog (ref)
-  "Display the reflog of a branch."
-  (interactive (list (magit-read-local-branch-or-ref "Show reflog for")))
-  (require 'magit)
-  (magit-mode-setup #'magit-reflog-mode ref magit-reflog-arguments))
-
-;;;###autoload
-(defun magit-reflog-head ()
-  "Display the `HEAD' reflog."
-  (interactive)
-  (magit-reflog "HEAD"))
-
-;;;; Limit Commands
-
-(defun magit-log-toggle-commit-limit ()
-  "Toggle the number of commits the current log buffer is limited to.
-If the number of commits is currently limited, then remove that
-limit.  Otherwise set it to 256."
-  (interactive)
-  (magit-log-set-commit-limit (lambda (&rest _) nil)))
-
-(defun magit-log-double-commit-limit ()
-  "Double the number of commits the current log buffer is limited to."
-  (interactive)
-  (magit-log-set-commit-limit '*))
-
-(defun magit-log-half-commit-limit ()
-  "Half the number of commits the current log buffer is limited to."
-  (interactive)
-  (magit-log-set-commit-limit '/))
-
-(defun magit-log-set-commit-limit (fn)
-  (let* ((val (car (magit-log-arguments t)))
-         (arg (--first (string-match "^-n\\([0-9]+\\)?$" it) val))
-         (num (and arg (string-to-number (match-string 1 arg))))
-         (num (if num (funcall fn num 2) 256)))
-    (setq val (delete arg val))
-    (setcar (cdr magit-refresh-args)
-            (if (and num (> num 0))
-                (cons (format "-n%i" num) val)
-              val)))
-  (magit-refresh))
-
-(defun magit-log-get-commit-limit ()
-  (--when-let (--first (string-match "^-n\\([0-9]+\\)?$" it)
-                       (car (magit-log-arguments t)))
-    (string-to-number (match-string 1 it))))
-
-;;;; Other Commands
-
-(defun magit-log-bury-buffer (&optional arg)
-  "Bury the current buffer or the revision buffer in the same frame.
-Like `magit-mode-bury-buffer' (which see) but with a negative
-prefix argument instead bury the revision buffer, provided it
-is displayed in the current frame."
-  (interactive "p")
-  (if (< arg 0)
-      (let* ((buf (magit-mode-get-buffer 'magit-revision-mode))
-             (win (and buf (get-buffer-window buf (selected-frame)))))
-        (if win
-            (with-selected-window win
-              (with-current-buffer buf
-                (magit-mode-bury-buffer (> (abs arg) 1))))
-          (user-error "No revision buffer in this frame")))
-    (magit-mode-bury-buffer (> arg 1))))
-
-;;;###autoload
-(defun magit-log-move-to-parent (&optional n)
-  "Move to the Nth parent of the current commit."
-  (interactive "p")
-  (when (derived-mode-p 'magit-log-mode)
-    (magit-section-when commit
-      (let ((parent-rev (format "%s^%s" (oref it value) (or n 1))))
-        (if-let ((parent-hash (magit-rev-parse "--short" parent-rev)))
-            (if-let ((section (--first (equal (oref it value)
-                                              parent-hash)
-                                       (magit-section-siblings it 'next))))
-                (magit-section-goto section)
-              (user-error
-               (substitute-command-keys
-                (concat "Parent " parent-hash " not found.  Try typing "
-                        "\\[magit-log-double-commit-limit] first"))))
-          (user-error "Parent %s does not exist" parent-rev))))))
-
-;;; Log Mode
-
-(defvar magit-log-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    (define-key map "\C-c\C-b" 'magit-go-backward)
-    (define-key map "\C-c\C-f" 'magit-go-forward)
-    (define-key map "\C-c\C-n" 'magit-log-move-to-parent)
-    (define-key map "=" 'magit-log-toggle-commit-limit)
-    (define-key map "+" 'magit-log-double-commit-limit)
-    (define-key map "-" 'magit-log-half-commit-limit)
-    (define-key map "q" 'magit-log-bury-buffer)
-    map)
-  "Keymap for `magit-log-mode'.")
-
-(define-derived-mode magit-log-mode magit-mode "Magit Log"
-  "Mode for looking at Git log.
-
-This mode is documented in info node `(magit)Log Buffer'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-visit-thing] or \\[magit-diff-show-or-scroll-up] \
-to visit the commit at point.
-
-Type \\[magit-branch-popup] to see available branch commands.
-Type \\[magit-merge-popup] to merge the branch or commit at point.
-Type \\[magit-cherry-pick-popup] to apply the commit at point.
-Type \\[magit-reset] to reset `HEAD' to the commit at point.
-
-\\{magit-log-mode-map}"
-  :group 'magit-log
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-prev-index-position-function
-        'magit-imenu--log-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        'magit-imenu--log-extract-index-name-function)
-  (setq-local bookmark-make-record-function
-              'magit-bookmark--log-make-record))
-
-(defvar magit-log-disable-graph-hack-args
-  '("-G" "--grep" "--author")
-  "Arguments which disable the graph speedup hack.")
-
-(defun magit-log-refresh-buffer (revs args files)
-  (magit-set-header-line-format
-   (funcall magit-log-header-line-function revs args files))
-  (if (= (length files) 1)
-      (unless (magit-file-tracked-p (car files))
-        (setq args (cons "--full-history" args)))
-    (setq args (remove "--follow" args)))
-  (when (--any-p (string-match-p
-                  (concat "^" (regexp-opt magit-log-remove-graph-args)) it)
-                 args)
-    (setq args (remove "--graph" args)))
-  (unless (member "--graph" args)
-    (setq args (remove "--color" args)))
-  (when-let ((limit (magit-log-get-commit-limit))
-             (limit (* 2 limit)) ; increase odds for complete graph
-             (count (and (= (length revs) 1)
-                         (> limit 1024) ; otherwise it's fast enough
-                         (setq revs (car revs))
-                         (not (string-match-p "\\.\\." revs))
-                         (not (member revs '("--all" "--branches")))
-                         (-none-p (lambda (arg)
-                                    (--any-p (string-prefix-p it arg)
-                                             magit-log-disable-graph-hack-args))
-                                  args)
-                         (magit-git-string "rev-list" "--count"
-                                           "--first-parent" args revs))))
-    (setq revs (if (< (string-to-number count) limit)
-                   revs
-                 (format "%s~%s..%s" revs limit revs))))
-  (magit-insert-section (logbuf)
-    (magit-insert-log revs args files)))
-
-(defun magit-log-header-line-arguments (revs args files)
-  "Return string describing some of the used arguments."
-  (mapconcat (lambda (arg)
-               (if (string-match-p " " arg)
-                   (prin1 arg)
-                 arg))
-             `("git" "log" ,@args ,@revs "--" ,@files)
-             " "))
-
-(defun magit-log-header-line-sentence (revs args files)
-  "Return string containing all arguments."
-  (concat "Commits in "
-          (mapconcat #'identity revs " ")
-          (and (member "--reverse" args)
-               " in reverse")
-          (and files (concat " touching "
-                             (mapconcat 'identity files " ")))
-          (--some (and (string-prefix-p "-L" it)
-                       (concat " " it))
-                  args)))
-
-(defun magit-insert-log (revs &optional args files)
-  "Insert a log section.
-Do not add this to a hook variable."
-  (let ((magit-git-global-arguments
-         (remove "--literal-pathspecs" magit-git-global-arguments)))
-    (magit-git-wash (apply-partially #'magit-log-wash-log 'log)
-      "log"
-      (format "--format=%%h%s%%x00%s%%x00%%aN%%x00%%at%%x00%%s%s"
-              (if (member "--decorate" args) "%d" "")
-              (if (member "--show-signature" args)
-                  (progn (setq args (remove "--show-signature" args)) "%G?")
-                "")
-              (if (member "++header" args)
-                  (if (member "--graph" (setq args (remove "++header" args)))
-                      (concat "\n" magit-log-revision-headers-format "\n")
-                    (concat "\n" magit-log-revision-headers-format "\n"))
-                ""))
-      (progn
-        (--when-let (--first (string-match "^\\+\\+order=\\(.+\\)$" it) args)
-          (setq args (cons (format "--%s-order" (match-string 1 it))
-                           (remove it args))))
-        (when (member "--decorate" args)
-          (setq args (cons "--decorate=full" (remove "--decorate" args))))
-        (when (member "--reverse" args)
-          (setq args (remove "--graph" args)))
-        args)
-      "--use-mailmap" "--no-prefix" revs "--" files)))
-
-(defvar magit-commit-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-show-commit)
-    (define-key map "a" 'magit-cherry-apply)
-    map)
-  "Keymap for `commit' sections.")
-
-(defvar magit-module-commit-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-show-commit)
-    map)
-  "Keymap for `module-commit' sections.")
-
-(defconst magit-log-heading-re
-  (concat "^"
-          "\\(?4:[-_/|\\*o. ]*\\)"                 ; graph
-          "\\(?1:[0-9a-fA-F]+\\)"                  ; sha1
-          "\\(?3:[^\0\n]+)\\)?\0"                  ; refs
-          "\\(?7:[BGUXYREN]\\)?\0"                 ; gpg
-          "\\(?5:[^\0\n]*\\)\0"                    ; author
-          ;; Note: Date is optional because, prior to Git v2.19.0,
-          ;; `git rebase -i --root` corrupts the root's author date.
-          "\\(?6:[^\0\n]*\\)\0"                    ; date
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defconst magit-log-cherry-re
-  (concat "^"
-          "\\(?8:[-+]\\) "                         ; cherry
-          "\\(?1:[0-9a-fA-F]+\\) "                 ; sha1
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defconst magit-log-module-re
-  (concat "^"
-          "\\(?:\\(?11:[<>]\\) \\)?"               ; side
-          "\\(?1:[0-9a-fA-F]+\\) "                 ; sha1
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defconst magit-log-bisect-vis-re
-  (concat "^"
-          "\\(?4:[-_/|\\*o. ]*\\)"                 ; graph
-          "\\(?1:[0-9a-fA-F]+\\)"                  ; sha1
-          "\\(?3:[^\0\n]+)\\)?\0"                  ; refs
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defconst magit-log-bisect-log-re
-  (concat "^# "
-          "\\(?3:bad:\\|skip:\\|good:\\) "         ; "refs"
-          "\\[\\(?1:[^]\n]+\\)\\] "                ; sha1
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defconst magit-log-reflog-re
-  (concat "^"
-          "\\(?1:[^\0\n]+\\)\0"                    ; sha1
-          "\\(?5:[^\0\n]*\\)\0"                    ; author
-          "\\(?:\\(?:[^@\n]+@{\\(?6:[^}\n]+\\)}\0" ; date
-          "\\(?10:merge \\|autosave \\|restart \\|[^:\n]+: \\)?" ; refsub
-          "\\(?2:.*\\)?\\)\\|\0\\)$"))             ; msg
-
-(defconst magit-reflog-subject-re
-  (concat "\\(?1:[^ ]+\\) ?"                       ; command
-          "\\(?2:\\(?: ?-[^ ]+\\)+\\)?"            ; option
-          "\\(?: ?(\\(?3:[^)]+\\))\\)?"))          ; type
-
-(defconst magit-log-stash-re
-  (concat "^"
-          "\\(?1:[^\0\n]+\\)\0"                    ; "sha1"
-          "\\(?5:[^\0\n]*\\)\0"                    ; author
-          "\\(?6:[^\0\n]+\\)\0"                    ; date
-          "\\(?2:.*\\)$"))                         ; msg
-
-(defvar magit-log-count nil)
-
-(defvar magit-log-format-message-function 'magit-log-propertize-keywords)
-
-(defun magit-log-wash-log (style args)
-  (setq args (-flatten args))
-  (when (and (member "--graph" args)
-             (member "--color" args))
-    (let ((ansi-color-apply-face-function
-           (lambda (beg end face)
-             (put-text-property beg end 'font-lock-face
-                                (or face 'magit-log-graph)))))
-      (ansi-color-apply-on-region (point-min) (point-max))))
-  (when (eq style 'cherry)
-    (reverse-region (point-min) (point-max)))
-  (let ((magit-log-count 0))
-    (magit-wash-sequence (apply-partially 'magit-log-wash-rev style
-                                          (magit-abbrev-length)))
-    (if (derived-mode-p 'magit-log-mode)
-        (when (eq magit-log-count (magit-log-get-commit-limit))
-          (magit-insert-section (longer)
-            (insert-text-button
-             (substitute-command-keys
-              (format "Type \\<%s>\\[%s] to show more history"
-                      'magit-log-mode-map
-                      'magit-log-double-commit-limit))
-             'action (lambda (_button)
-                       (magit-log-double-commit-limit))
-             'follow-link t
-             'mouse-face 'magit-section-highlight)))
-      (insert ?\n))))
-
-(cl-defun magit-log-wash-rev (style abbrev)
-  (when (derived-mode-p 'magit-log-mode)
-    (cl-incf magit-log-count))
-  (looking-at (pcase style
-                (`log        magit-log-heading-re)
-                (`cherry     magit-log-cherry-re)
-                (`module     magit-log-module-re)
-                (`reflog     magit-log-reflog-re)
-                (`stash      magit-log-stash-re)
-                (`bisect-vis magit-log-bisect-vis-re)
-                (`bisect-log magit-log-bisect-log-re)))
-  (magit-bind-match-strings
-      (hash msg refs graph author date gpg cherry _ refsub side) nil
-    (setq msg (substring-no-properties msg))
-    (when refs
-      (setq refs (substring-no-properties refs)))
-    (let ((align (or (eq style 'cherry)
-                     (not (member "--stat" (cadr magit-refresh-args)))))
-          (non-graph-re (if (eq style 'bisect-vis)
-                            magit-log-bisect-vis-re
-                          magit-log-heading-re)))
-      (magit-delete-line)
-      ;; If the reflog entries have been pruned, the output of `git
-      ;; reflog show' includes a partial line that refers to the hash
-      ;; of the youngest expired reflog entry.
-      (when (and (eq style 'reflog) (not date))
-        (cl-return-from magit-log-wash-rev t))
-      (magit-insert-section section (commit hash)
-        (pcase style
-          (`stash      (oset section type 'stash))
-          (`module     (oset section type 'module-commit))
-          (`bisect-log (setq hash (magit-rev-parse "--short" hash))))
-        (when cherry
-          (when (and (derived-mode-p 'magit-refs-mode)
-                     magit-refs-show-commit-count)
-            (insert (make-string (1- magit-refs-focus-column-width) ?\s)))
-          (insert (propertize cherry 'face (if (string= cherry "-")
-                                               'magit-cherry-equivalent
-                                             'magit-cherry-unmatched)))
-          (insert ?\s))
-        (when side
-          (insert (propertize side 'face (if (string= side "<")
-                                             'magit-cherry-equivalent
-                                           'magit-cherry-unmatched)))
-          (insert ?\s))
-        (when align
-          (insert (propertize hash 'face 'magit-hash) ?\s))
-        (when graph
-          (insert graph))
-        (unless align
-          (insert (propertize hash 'face 'magit-hash) ?\s))
-        (when (and refs (not magit-log-show-refname-after-summary))
-          (insert (magit-format-ref-labels refs) ?\s))
-        (when (eq style 'reflog)
-          (insert (format "%-2s " (1- magit-log-count)))
-          (when refsub
-            (insert (magit-reflog-format-subject
-                     (substring refsub 0 (if (string-match-p ":" refsub) -2 -1))))))
-        (when msg
-          (when gpg
-            (setq msg (propertize msg 'face
-                                  (pcase (aref gpg 0)
-                                    (?G 'magit-signature-good)
-                                    (?B 'magit-signature-bad)
-                                    (?U 'magit-signature-untrusted)
-                                    (?X 'magit-signature-expired)
-                                    (?Y 'magit-signature-expired-key)
-                                    (?R 'magit-signature-revoked)
-                                    (?E 'magit-signature-error)))))
-          (insert (funcall magit-log-format-message-function hash msg)))
-        (when (and refs magit-log-show-refname-after-summary)
-          (insert ?\s)
-          (insert (magit-format-ref-labels refs)))
-        (insert ?\n)
-        (when (memq style '(log reflog stash))
-          (goto-char (line-beginning-position))
-          (when (and refsub
-                     (string-match "\\`\\([^ ]\\) \\+\\(..\\)\\(..\\)" date))
-            (setq date (+ (string-to-number (match-string 1 date))
-                          (* (string-to-number (match-string 2 date)) 60 60)
-                          (* (string-to-number (match-string 3 date)) 60))))
-          (save-excursion
-            (backward-char)
-            (magit-log-format-margin hash author date)))
-        (when (and (eq style 'cherry)
-                   (magit-buffer-margin-p))
-          (save-excursion
-            (backward-char)
-            (apply #'magit-log-format-margin hash
-                   (split-string (magit-rev-format "%aN%x00%ct" hash) "\0"))))
-        (when (and graph
-                   (not (eobp))
-                   (not (looking-at non-graph-re)))
-          (when (looking-at "")
-            (magit-insert-heading)
-            (delete-char 1)
-            (magit-insert-section (commit-header)
-              (forward-line)
-              (magit-insert-heading)
-              (re-search-forward "")
-              (backward-delete-char 1)
-              (forward-char)
-              (insert ?\n))
-            (delete-char 1))
-          (if (looking-at "^\\(---\\|\n\s\\|\ndiff\\)")
-              (let ((limit (save-excursion
-                             (and (re-search-forward non-graph-re nil t)
-                                  (match-beginning 0)))))
-                (unless (oref magit-insert-section--current content)
-                  (magit-insert-heading))
-                (delete-char (if (looking-at "\n") 1 4))
-                (magit-diff-wash-diffs (list "--stat") limit))
-            (when align
-              (setq align (make-string (1+ abbrev) ? )))
-            (when (and (not (eobp)) (not (looking-at non-graph-re)))
-              (when align
-                (setq align (make-string (1+ abbrev) ? )))
-              (while (and (not (eobp)) (not (looking-at non-graph-re)))
-                (when align
-                  (save-excursion (insert align)))
-                (magit-make-margin-overlay)
-                (forward-line))
-              ;; When `--format' is used and its value isn't one of the
-              ;; predefined formats, then `git-log' does not insert a
-              ;; separator line.
-              (save-excursion
-                (forward-line -1)
-                (looking-at "[-_/|\\*o. ]*"))
-              (setq graph (match-string 0))
-              (unless (string-match-p "[/\\]" graph)
-                (insert graph ?\n))))))))
-  t)
-
-(defun magit-log-propertize-keywords (_rev msg)
-  (let ((start 0))
-    (when (string-match "^\\(squash\\|fixup\\)! " msg start)
-      (setq start (match-end 0))
-      (put-text-property (match-beginning 0)
-                         (match-end 0)
-                         'face 'magit-keyword-squash msg))
-    (while (string-match "\\[[^[]*\\]" msg start)
-      (setq start (match-end 0))
-      (when magit-log-highlight-keywords
-        (put-text-property (match-beginning 0)
-                           (match-end 0)
-                           'face 'magit-keyword msg))))
-  msg)
-
-(defun magit-log-maybe-show-more-commits (section)
-  "When point is at the end of a log buffer, insert more commits.
-
-Log buffers end with a button \"Type + to show more history\".
-When the use of a section movement command puts point on that
-button, then automatically show more commits, without the user
-having to press \"+\".
-
-This function is called by `magit-section-movement-hook' and
-exists mostly for backward compatibility reasons."
-  (when (and (eq (oref section type) 'longer)
-             magit-log-auto-more)
-    (magit-log-double-commit-limit)
-    (forward-line -1)
-    (magit-section-forward)))
-
-(defvar magit--update-revision-buffer nil)
-
-(defun magit-log-maybe-update-revision-buffer (&optional _)
-  "When moving in the log buffer, update the revision buffer.
-If there is no revision buffer in the same frame, then do nothing."
-  (when (derived-mode-p 'magit-log-mode)
-    (magit-log-maybe-update-revision-buffer-1)))
-
-(defun magit-log-maybe-update-revision-buffer-1 ()
-  (unless magit--update-revision-buffer
-    (when-let ((commit (magit-section-when 'commit))
-               (buffer (magit-mode-get-buffer 'magit-revision-mode nil t)))
-      (setq magit--update-revision-buffer (list commit buffer))
-      (run-with-idle-timer
-       magit-update-other-window-delay nil
-       (let ((args (magit-show-commit--arguments)))
-         (lambda ()
-           (pcase-let ((`(,rev ,buf) magit--update-revision-buffer))
-             (setq magit--update-revision-buffer nil)
-             (when (buffer-live-p buf)
-               (let ((magit-display-buffer-noselect t))
-                 (apply #'magit-show-commit rev args))))
-           (setq magit--update-revision-buffer nil)))))))
-
-(defvar magit--update-blob-buffer nil)
-
-(defun magit-log-maybe-update-blob-buffer (&optional _)
-  "When moving in the log buffer, update the blob buffer.
-If there is no blob buffer in the same frame, then do nothing."
-  (when (derived-mode-p 'magit-log-mode)
-    (magit-log-maybe-update-blob-buffer-1)))
-
-(defun magit-log-maybe-update-blob-buffer-1 ()
-  (unless magit--update-revision-buffer
-    (when-let ((commit (magit-section-when 'commit))
-               (buffer (--first (with-current-buffer it magit-buffer-revision)
-                                (mapcar #'window-buffer (window-list)))))
-        (setq magit--update-blob-buffer (list commit buffer))
-        (run-with-idle-timer
-         magit-update-other-window-delay nil
-         (lambda ()
-           (pcase-let ((`(,rev ,buf) magit--update-blob-buffer))
-             (setq magit--update-blob-buffer nil)
-             (when (buffer-live-p buf)
-               (save-excursion
-                 (with-selected-window (get-buffer-window buf)
-                   (with-current-buffer buf
-                     (magit-blob-visit (list (magit-rev-parse rev)
-                                             (magit-file-relative-name
-                                              magit-buffer-file-name))
-                                       (line-number-at-pos))))))))))))
-
-(defun magit-log-goto-same-commit (&optional default)
-  (let ((prev magit-previous-section))
-    (when-let ((rev (cond ((and prev (magit-section-match 'commit prev))
-                           (oref prev value))
-                          ((and prev (magit-section-match 'branch prev))
-                           (magit-rev-format "%h" (oref prev value)))
-                          (default (magit-rev-format "%h" default))))
-               (same (--first (equal (oref it value) rev)
-                              (oref magit-root-section children))))
-      (goto-char (oref same start)))))
-
-;;; Log Margin
-
-(defvar-local magit-log-margin-show-shortstat nil)
-
-(defun magit-toggle-log-margin-style ()
-  "Toggle between the regular and the shortstat margin style.
-The shortstat style is experimental and rather slow."
-  (interactive)
-  (setq magit-log-margin-show-shortstat
-        (not magit-log-margin-show-shortstat))
-  (magit-set-buffer-margin nil t))
-
-(defun magit-log-format-margin (rev author date)
-  (when-let ((option (magit-margin-option)))
-    (if magit-log-margin-show-shortstat
-        (magit-log-format-shortstat-margin rev)
-      (pcase-let ((`(,_ ,style ,width ,details ,details-width)
-                   (or magit-buffer-margin
-                       (symbol-value option))))
-        (magit-make-margin-overlay
-         (concat (and details
-                      (concat (propertize (truncate-string-to-width
-                                           (or author "")
-                                           details-width
-                                           nil ?\s (make-string 1 magit-ellipsis))
-                                          'face 'magit-log-author)
-                              " "))
-                 (propertize
-                  (if (stringp style)
-                      (format-time-string
-                       style
-                       (seconds-to-time (string-to-number date)))
-                    (pcase-let* ((abbr (eq style 'age-abbreviated))
-                                 (`(,cnt ,unit) (magit--age date abbr)))
-                      (format (format (if abbr "%%2i%%-%ic" "%%2i %%-%is")
-                                      (- width (if details (1+ details-width) 0)))
-                              cnt unit)))
-                  'face 'magit-log-date)))))))
-
-(defun magit-log-format-shortstat-margin (rev)
-  (magit-make-margin-overlay
-   (if-let ((line (and rev (magit-git-string
-                            "show" "--format=" "--shortstat" rev))))
-       (if (string-match "\
-\\([0-9]+\\) files? changed, \
-\\(?:\\([0-9]+\\) insertions?(\\+)\\)?\
-\\(?:\\(?:, \\)?\\([0-9]+\\) deletions?(-)\\)?\\'" line)
-           (magit-bind-match-strings (files add del) line
-             (format
-              "%5s %5s%4s"
-              (if add
-                  (propertize (format "%s+" add) 'face 'magit-diffstat-added)
-                "")
-              (if del
-                  (propertize (format "%s-" del) 'face 'magit-diffstat-removed)
-                "")
-              files))
-         "")
-     "")))
-
-(defun magit-log-margin-width (style details details-width)
-  (+ (if details (1+ details-width) 0)
-     (if (stringp style)
-         (length (format-time-string style))
-       (+ 2 ; two digits
-          1 ; trailing space
-          (if (eq style 'age-abbreviated)
-              1  ; single character
-            (+ 1 ; gap after digits
-               (apply #'max (--map (max (length (nth 1 it))
-                                        (length (nth 2 it)))
-                                   magit--age-spec))))))))
-
-;;; Select Mode
-
-(defvar magit-log-select-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-log-mode-map)
-    (define-key map "\C-c\C-b" 'undefined)
-    (define-key map "\C-c\C-f" 'undefined)
-    (define-key map "."        'magit-log-select-pick)
-    (define-key map "e"        'magit-log-select-pick)
-    (define-key map "\C-c\C-c" 'magit-log-select-pick)
-    (define-key map "q"        'magit-log-select-quit)
-    (define-key map "\C-c\C-k" 'magit-log-select-quit)
-    map)
-  "Keymap for `magit-log-select-mode'.")
-
-(put 'magit-log-select-pick :advertised-binding [?\C-c ?\C-c])
-(put 'magit-log-select-quit :advertised-binding [?\C-c ?\C-k])
-
-(define-derived-mode magit-log-select-mode magit-log-mode "Magit Select"
-  "Mode for selecting a commit from history.
-
-This mode is documented in info node `(magit)Select from Log'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-visit-thing] or \\[magit-diff-show-or-scroll-up] \
-to visit the commit at point.
-
-\\<magit-log-select-mode-map>\
-Type \\[magit-log-select-pick] to select the commit at point.
-Type \\[magit-log-select-quit] to abort without selecting a commit."
-  :group 'magit-log
-  (hack-dir-local-variables-non-file-buffer))
-
-(defun magit-log-select-refresh-buffer (rev args)
-  (magit-insert-section (logbuf)
-    (magit-insert-log rev args)))
-
-(defvar-local magit-log-select-pick-function nil)
-(defvar-local magit-log-select-quit-function nil)
-
-(defun magit-log-select (pick &optional msg quit branch args initial)
-  (declare (indent defun))
-  (magit-mode-setup #'magit-log-select-mode
-                    (or branch (magit-get-current-branch) "HEAD")
-                    (append args magit-log-select-arguments))
-  (magit-log-goto-same-commit initial)
-  (setq magit-log-select-pick-function pick)
-  (setq magit-log-select-quit-function quit)
-  (when magit-log-select-show-usage
-    (let ((pick (propertize (substitute-command-keys
-                             "\\[magit-log-select-pick]")
-                            'face
-                            'magit-header-line-key))
-          (quit (propertize (substitute-command-keys
-                             "\\[magit-log-select-quit]")
-                            'face
-                            'magit-header-line-key)))
-      (setq msg (format-spec
-                 (if msg
-                     (if (string-suffix-p "," msg)
-                         (concat msg " or %q to abort")
-                       msg)
-                   "Type %p to select commit at point, or %q to abort")
-                 `((?p . ,pick)
-                   (?q . ,quit)))))
-    (add-face-text-property 0 (length msg) 'magit-header-line-log-select t msg)
-    (when (memq magit-log-select-show-usage '(both header-line))
-      (magit-set-header-line-format msg))
-    (when (memq magit-log-select-show-usage '(both echo-area))
-      (message "%s" (substring-no-properties msg)))))
-
-(defun magit-log-select-pick ()
-  "Select the commit at point and act on it.
-Call `magit-log-select-pick-function' with the selected
-commit as argument."
-  (interactive)
-  (let ((fun magit-log-select-pick-function)
-        (rev (magit-commit-at-point)))
-    (magit-mode-bury-buffer 'kill)
-    (funcall fun rev)))
-
-(defun magit-log-select-quit ()
-  "Abort selecting a commit, don't act on any commit."
-  (interactive)
-  (magit-mode-bury-buffer 'kill)
-  (when magit-log-select-quit-function
-    (funcall magit-log-select-quit-function)))
-
-;;; Cherry Mode
-
-(defvar magit-cherry-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    (define-key map "q" 'magit-log-bury-buffer)
-    (define-key map "L" 'magit-margin-popup)
-    map)
-  "Keymap for `magit-cherry-mode'.")
-
-(define-derived-mode magit-cherry-mode magit-mode "Magit Cherry"
-  "Mode for looking at commits not merged upstream.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-visit-thing] or \\[magit-diff-show-or-scroll-up] \
-to visit the commit at point.
-
-Type \\[magit-cherry-pick-popup] to apply the commit at point.
-
-\\{magit-cherry-mode-map}"
-  :group 'magit-log
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-create-index-function
-        'magit-imenu--cherry-create-index-function)
-  (setq-local bookmark-make-record-function
-              'magit-bookmark--cherry-make-record))
-
-;;;###autoload
-(defun magit-cherry (head upstream)
-  "Show commits in a branch that are not merged in the upstream branch."
-  (interactive
-   (let  ((head (magit-read-branch "Cherry head")))
-     (list head (magit-read-other-branch "Cherry upstream" head
-                                         (magit-get-upstream-branch head)))))
-  (require 'magit)
-  (magit-mode-setup #'magit-cherry-mode upstream head))
-
-(defun magit-cherry-refresh-buffer (_upstream _head)
-  (magit-insert-section (cherry)
-    (magit-run-section-hook 'magit-cherry-sections-hook)))
-
-(defun magit-insert-cherry-headers ()
-  "Insert headers appropriate for `magit-cherry-mode' buffers."
-  (magit-insert-head-branch-header (nth 1 magit-refresh-args))
-  (magit-insert-upstream-branch-header (nth 1 magit-refresh-args)
-                                       (nth 0 magit-refresh-args)
-                                       "Upstream: ")
-  (insert ?\n))
-
-(defun magit-insert-cherry-commits ()
-  "Insert commit sections into a `magit-cherry-mode' buffer."
-  (magit-insert-section (cherries)
-    (magit-insert-heading "Cherry commits:")
-    (magit-git-wash (apply-partially 'magit-log-wash-log 'cherry)
-      "cherry" "-v" "--abbrev" magit-refresh-args)))
-
-;;; Reflog Mode
-
-(defvar magit-reflog-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-log-mode-map)
-    (define-key map "L" 'magit-margin-popup)
-    map)
-  "Keymap for `magit-reflog-mode'.")
-
-(define-derived-mode magit-reflog-mode magit-log-mode "Magit Reflog"
-  "Mode for looking at Git reflog.
-
-This mode is documented in info node `(magit)Reflog'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-visit-thing] or \\[magit-diff-show-or-scroll-up] \
-to visit the commit at point.
-
-Type \\[magit-cherry-pick-popup] to apply the commit at point.
-Type \\[magit-reset] to reset `HEAD' to the commit at point.
-
-\\{magit-reflog-mode-map}"
-  :group 'magit-log
-  (hack-dir-local-variables-non-file-buffer)
-  (setq-local bookmark-make-record-function
-              'magit-bookmark--reflog-make-record))
-
-(defun magit-reflog-refresh-buffer (ref args)
-  (magit-set-header-line-format (concat "Reflog for " ref))
-  (magit-insert-section (reflogbuf)
-    (magit-git-wash (apply-partially 'magit-log-wash-log 'reflog)
-      "reflog" "show" "--format=%h%x00%aN%x00%gd%x00%gs" "--date=raw"
-      args ref "--")))
-
-(defvar magit-reflog-labels
-  '(("commit"      . magit-reflog-commit)
-    ("amend"       . magit-reflog-amend)
-    ("merge"       . magit-reflog-merge)
-    ("checkout"    . magit-reflog-checkout)
-    ("branch"      . magit-reflog-checkout)
-    ("reset"       . magit-reflog-reset)
-    ("rebase"      . magit-reflog-rebase)
-    ("cherry-pick" . magit-reflog-cherry-pick)
-    ("initial"     . magit-reflog-commit)
-    ("pull"        . magit-reflog-remote)
-    ("clone"       . magit-reflog-remote)
-    ("autosave"    . magit-reflog-commit)
-    ("restart"     . magit-reflog-reset)))
-
-(defun magit-reflog-format-subject (subject)
-  (let* ((match (string-match magit-reflog-subject-re subject))
-         (command (and match (match-string 1 subject)))
-         (option  (and match (match-string 2 subject)))
-         (type    (and match (match-string 3 subject)))
-         (label (if (string= command "commit")
-                    (or type command)
-                  command))
-         (text (if (string= command "commit")
-                   label
-                 (mapconcat #'identity
-                            (delq nil (list command option type))
-                            " "))))
-    (format "%-16s "
-            (propertize text 'face
-                        (or (cdr (assoc label magit-reflog-labels))
-                            'magit-reflog-other)))))
-
-;;; Log Sections
-;;;; Standard Log Sections
-
-(defvar magit-unpulled-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-diff-dwim)
-    map)
-  "Keymap for `unpulled' sections.")
-
-(magit-define-section-jumper magit-jump-to-unpulled-from-upstream
-  "Unpulled from @{upstream}" unpulled "..@{upstream}")
-
-(defun magit-insert-unpulled-from-upstream ()
-  "Insert commits that haven't been pulled from the upstream yet."
-  (when (magit-git-success "rev-parse" "@{upstream}")
-    (magit-insert-section (unpulled "..@{upstream}" t)
-      (magit-insert-heading
-        (format (propertize "Unpulled from %s:" 'face 'magit-section-heading)
-                (magit-get-upstream-branch)))
-      (magit-insert-log "..@{upstream}" magit-log-section-arguments))))
-
-(magit-define-section-jumper magit-jump-to-unpulled-from-pushremote
-  "Unpulled from <push-remote>" unpulled
-  (concat ".." (magit-get-push-branch)))
-
-(defun magit-insert-unpulled-from-pushremote ()
-  "Insert commits that haven't been pulled from the push-remote yet."
-  (--when-let (magit-get-push-branch)
-    (unless (and (equal (magit-rev-name it)
-                        (magit-rev-name "@{upstream}"))
-                 (or (memq 'magit-insert-unpulled-from-upstream
-                           magit-status-sections-hook)
-                     (memq 'magit-insert-unpulled-from-upstream-or-recent
-                           magit-status-sections-hook)))
-      (magit-insert-section (unpulled (concat ".." it) t)
-        (magit-insert-heading
-          (format (propertize "Unpulled from %s:" 'face 'magit-section-heading)
-                  (propertize it 'face 'magit-branch-remote)))
-        (magit-insert-log (concat ".." it) magit-log-section-arguments)))))
-
-(defvar magit-unpushed-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-diff-dwim)
-    map)
-  "Keymap for `unpushed' sections.")
-
-(magit-define-section-jumper magit-jump-to-unpushed-to-upstream
-  "Unpushed to @{upstream}" unpushed "@{upstream}..")
-
-(defun magit-insert-unpushed-to-upstream-or-recent ()
-  "Insert section showing unpushed or other recent commits.
-If an upstream is configured for the current branch and it is
-behind of the current branch, then show the commits that have
-not yet been pushed into the upstream branch.  If no upstream is
-configured or if the upstream is not behind of the current branch,
-then show the last `magit-log-section-commit-count' commits."
-  (let ((upstream (magit-rev-parse "@{upstream}")))
-    (if (or (not upstream)
-            (magit-rev-ancestor-p "HEAD" upstream))
-        (magit-insert-recent-commits 'unpushed "@{upstream}..")
-      (magit-insert-unpushed-to-upstream))))
-
-(defun magit-insert-unpushed-to-upstream ()
-  "Insert commits that haven't been pushed to the upstream yet."
-  (when (magit-git-success "rev-parse" "@{upstream}")
-    (magit-insert-section (unpushed "@{upstream}..")
-      (magit-insert-heading
-        (format (propertize "Unmerged into %s:" 'face 'magit-section-heading)
-                (magit-get-upstream-branch)))
-      (magit-insert-log "@{upstream}.." magit-log-section-arguments))))
-
-(defun magit-insert-recent-commits (&optional type value)
-  "Insert section showing recent commits.
-Show the last `magit-log-section-commit-count' commits."
-  (let* ((start (format "HEAD~%s" magit-log-section-commit-count))
-         (range (and (magit-rev-verify start)
-                     (concat start "..HEAD"))))
-    (magit-insert-section ((eval (or type 'recent))
-                           (or value range)
-                           t)
-      (magit-insert-heading "Recent commits")
-      (magit-insert-log range
-                        (cons (format "-n%d" magit-log-section-commit-count)
-                              (--remove (string-prefix-p "-n" it)
-                                        magit-log-section-arguments))))))
-
-(magit-define-section-jumper magit-jump-to-unpushed-to-pushremote
-  "Unpushed to <push-remote>" unpushed
-  (concat (magit-get-push-branch) ".."))
-
-(defun magit-insert-unpushed-to-pushremote ()
-  "Insert commits that haven't been pushed to the push-remote yet."
-  (--when-let (magit-get-push-branch)
-    (unless (and (equal (magit-rev-name it)
-                        (magit-rev-name "@{upstream}"))
-                 (or (memq 'magit-insert-unpushed-to-upstream
-                           magit-status-sections-hook)
-                     (memq 'magit-insert-unpushed-to-upstream-or-recent
-                           magit-status-sections-hook)))
-      (magit-insert-section (unpushed (concat it "..") t)
-        (magit-insert-heading
-          (format (propertize "Unpushed to %s:" 'face 'magit-section-heading)
-                  (propertize it 'face 'magit-branch-remote)))
-        (magit-insert-log (concat it "..") magit-log-section-arguments)))))
-
-;;;; Auxiliary Log Sections
-
-(defun magit-insert-unpulled-cherries ()
-  "Insert section showing unpulled commits.
-Like `magit-insert-unpulled-from-upstream' but prefix each commit
-which has not been applied yet (i.e. a commit with a patch-id
-not shared with any local commit) with \"+\", and all others with
-\"-\"."
-  (when (magit-git-success "rev-parse" "@{upstream}")
-    (magit-insert-section (unpulled "..@{upstream}")
-      (magit-insert-heading "Unpulled commits:")
-      (magit-git-wash (apply-partially 'magit-log-wash-log 'cherry)
-        "cherry" "-v" (magit-abbrev-arg)
-        (magit-get-current-branch) "@{upstream}"))))
-
-(defun magit-insert-unpushed-cherries ()
-  "Insert section showing unpushed commits.
-Like `magit-insert-unpushed-to-upstream' but prefix each commit
-which has not been applied to upstream yet (i.e. a commit with
-a patch-id not shared with any upstream commit) with \"+\", and
-all others with \"-\"."
-  (when (magit-git-success "rev-parse" "@{upstream}")
-    (magit-insert-section (unpushed "@{upstream}..")
-      (magit-insert-heading "Unpushed commits:")
-      (magit-git-wash (apply-partially 'magit-log-wash-log 'cherry)
-        "cherry" "-v" (magit-abbrev-arg) "@{upstream}"))))
-
-(provide 'magit-log)
-;;; magit-log.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.elc
deleted file mode 100644
index 3ed302e0034f..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-log.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.el
deleted file mode 100644
index a52c18f4d394..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.el
+++ /dev/null
@@ -1,240 +0,0 @@
-;;; magit-margin.el --- margins in Magit buffers  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for showing additional information
-;; in the margins of Magit buffers.  Currently this is only used for
-;; commits, for which the committer date or age, and optionally the
-;; author name are shown.
-
-;;; Code:
-
-(require 'dash)
-
-(require 'magit-section)
-(require 'magit-mode)
-
-(defgroup magit-margin nil
-  "Information Magit displays in the margin.
-
-You can change the STYLE and AUTHOR-WIDTH of all `magit-*-margin'
-options to the same values by customizing `magit-log-margin'
-*before* `magit' is loaded.  If you do that, then the respective
-values for the other options will default to what you have set
-for that variable.  Likewise if you set `magit-log-margin's INIT
-to nil, then that is used in the default of all other options.  But
-setting it to t, i.e. re-enforcing the default for that option,
-does not carry to other options."
-  :link '(info-link "(magit)Log Margin")
-  :group 'magit-log)
-
-(defvar-local magit-buffer-margin nil)
-(put 'magit-buffer-margin 'permanent-local t)
-
-(defvar-local magit-set-buffer-margin-refresh nil)
-
-(defvar magit--age-spec)
-
-;;; Commands
-
-(magit-define-popup magit-margin-popup
-  "Popup console for changing appearance of the margin."
-  :actions '("Margin"
-             (?L "Toggle visibility" magit-toggle-margin)
-             (?l "Cycle style"       magit-cycle-margin-style)
-             (?d "Toggle details"    magit-toggle-margin-details)
-             (lambda ()
-               (and (with-current-buffer magit-pre-popup-buffer
-                      (derived-mode-p 'magit-refs-mode))
-                    (propertize "Left edge" 'face 'magit-popup-heading)))
-             (?v "Change verbosity" magit-refs-set-show-commit-count))
-  :max-action-columns 1)
-
-(defun magit-toggle-margin ()
-  "Show or hide the Magit margin."
-  (interactive)
-  (unless (magit-margin-option)
-    (user-error "Magit margin isn't supported in this buffer"))
-  (setcar magit-buffer-margin (not (magit-buffer-margin-p)))
-  (magit-set-buffer-margin))
-
-(defun magit-cycle-margin-style ()
-  "Cycle style used for the Magit margin."
-  (interactive)
-  (unless (magit-margin-option)
-    (user-error "Magit margin isn't supported in this buffer"))
-  ;; This is only suitable for commit margins (there are not others).
-  (setf (cadr magit-buffer-margin)
-        (pcase (cadr magit-buffer-margin)
-          (`age 'age-abbreviated)
-          (`age-abbreviated
-           (let ((default (cadr (symbol-value (magit-margin-option)))))
-             (if (stringp default) default "%Y-%m-%d %H:%M ")))
-          (_ 'age)))
-  (magit-set-buffer-margin nil t))
-
-(defun magit-toggle-margin-details ()
-  "Show or hide details in the Magit margin."
-  (interactive)
-  (unless (magit-margin-option)
-    (user-error "Magit margin isn't supported in this buffer"))
-  (setf (nth 3 magit-buffer-margin)
-        (not (nth 3 magit-buffer-margin)))
-  (magit-set-buffer-margin nil t))
-
-;;; Core
-
-(defun magit-buffer-margin-p ()
-  (car magit-buffer-margin))
-
-(defun magit-margin-option ()
-  (pcase major-mode
-    (`magit-cherry-mode     'magit-cherry-margin)
-    (`magit-log-mode        'magit-log-margin)
-    (`magit-log-select-mode 'magit-log-select-margin)
-    (`magit-reflog-mode     'magit-reflog-margin)
-    (`magit-refs-mode       'magit-refs-margin)
-    (`magit-stashes-mode    'magit-stashes-margin)
-    (`magit-status-mode     'magit-status-margin)))
-
-(defun magit-set-buffer-margin (&optional reset refresh)
-  (when-let ((option (magit-margin-option)))
-    (let* ((default (symbol-value option))
-           (default-width (nth 2 default)))
-      (when (or reset (not magit-buffer-margin))
-        (setq magit-buffer-margin (copy-sequence default)))
-      (pcase-let ((`(,enable ,style ,_width ,details ,details-width)
-                   magit-buffer-margin))
-        (when (functionp default-width)
-          (setf (nth 2 magit-buffer-margin)
-                (funcall default-width style details details-width)))
-        (dolist (window (get-buffer-window-list nil nil 0))
-          (with-selected-window window
-            (magit-set-window-margin window)
-            (if enable
-                (add-hook  'window-configuration-change-hook
-                           'magit-set-window-margin nil t)
-              (remove-hook 'window-configuration-change-hook
-                           'magit-set-window-margin t))))
-        (when (and enable (or refresh magit-set-buffer-margin-refresh))
-          (magit-refresh-buffer))))))
-
-(defun magit-set-window-margin (&optional window)
-  (when (or window (setq window (get-buffer-window)))
-    (with-selected-window window
-      (set-window-margins
-       nil (car (window-margins))
-       (and (magit-buffer-margin-p)
-            (if (bound-and-true-p magit-log-margin-show-shortstat)
-                16 ; kludge
-              (nth 2 magit-buffer-margin)))))))
-
-(defun magit-make-margin-overlay (&optional string previous-line)
-  (if previous-line
-      (save-excursion
-        (forward-line -1)
-        (magit-make-margin-overlay string))
-    ;; Don't put the overlay on the complete line to work around #1880.
-    (let ((o (make-overlay (1+ (line-beginning-position))
-                           (line-end-position)
-                           nil t)))
-      (overlay-put o 'evaporate t)
-      (overlay-put o 'before-string
-                   (propertize "o" 'display
-                               (list (list 'margin 'right-margin)
-                                     (or string " ")))))))
-
-(defun magit-maybe-make-margin-overlay ()
-  (when (or (magit-section-match
-             '(unpulled unpushed recent stashes local cherries)
-             magit-insert-section--current)
-            (and (eq major-mode 'magit-refs-mode)
-                 (magit-section-match
-                  '(remote commit tags)
-                  magit-insert-section--current)))
-    (magit-make-margin-overlay nil t)))
-
-;;; Custom Support
-
-(defun magit-margin-set-variable (mode symbol value)
-  (set-default symbol value)
-  (message "Updating margins in %s buffers..." mode)
-  (dolist (buffer (buffer-list))
-    (with-current-buffer buffer
-      (when (eq major-mode mode)
-        (magit-set-buffer-margin t)
-        (magit-refresh))))
-  (message "Updating margins in %s buffers...done" mode))
-
-(defconst magit-log-margin--custom-type
-  '(list (boolean :tag "Show margin initially")
-         (choice  :tag "Show committer"
-                  (string :tag "date using time-format" "%Y-%m-%d %H:%M ")
-                  (const  :tag "date's age" age)
-                  (const  :tag "date's age (abbreviated)" age-abbreviated))
-         (const   :tag "Calculate width using magit-log-margin-width"
-                  magit-log-margin-width)
-         (boolean :tag "Show author name by default")
-         (integer :tag "Show author name using width")))
-
-;;; Time Utilities
-
-(defvar magit--age-spec
-  `((?Y "year"   "years"   ,(round (* 60 60 24 365.2425)))
-    (?M "month"  "months"  ,(round (* 60 60 24 30.436875)))
-    (?w "week"   "weeks"   ,(* 60 60 24 7))
-    (?d "day"    "days"    ,(* 60 60 24))
-    (?h "hour"   "hours"   ,(* 60 60))
-    (?m "minute" "minutes" 60)
-    (?s "second" "seconds" 1))
-  "Time units used when formatting relative commit ages.
-
-The value is a list of time units, beginning with the longest.
-Each element has the form (CHAR UNIT UNITS SECONDS).  UNIT is the
-time unit, UNITS is the plural of that unit.  CHAR is a character
-abbreviation.  And SECONDS is the number of seconds in one UNIT.
-
-This is defined as a variable to make it possible to use time
-units for a language other than English.  It is not defined
-as an option, because most other parts of Magit are always in
-English.")
-
-(defun magit--age (date &optional abbreviate)
-  (cl-labels ((fn (age spec)
-                  (pcase-let ((`(,char ,unit ,units ,weight) (car spec)))
-                    (let ((cnt (round (/ age weight 1.0))))
-                      (if (or (not (cdr spec))
-                              (>= (/ age weight) 1))
-                          (list cnt (cond (abbreviate char)
-                                          ((= cnt 1) unit)
-                                          (t units)))
-                        (fn age (cdr spec)))))))
-    (fn (abs (- (float-time)
-                (if (stringp date)
-                    (string-to-number date)
-                  date)))
-        magit--age-spec)))
-
-(provide 'magit-margin)
-;;; magit-margin.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.elc
deleted file mode 100644
index a3f6d9da27c8..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-margin.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.el
deleted file mode 100644
index dc243418cbde..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.el
+++ /dev/null
@@ -1,279 +0,0 @@
-;;; magit-merge.el --- merge functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements merge commands.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Commands
-
-;;;###autoload (autoload 'magit-merge-popup "magit" nil t)
-(magit-define-popup magit-merge-popup
-  "Popup console for merge commands."
-  :man-page "git-merge"
-  :switches '((?f "Fast-forward only" "--ff-only")
-              (?n "No fast-forward"   "--no-ff"))
-  :options  '((?s "Strategy" "--strategy="))
-  :actions  '((?m "Merge"                  magit-merge)
-              (?p "Preview merge"          magit-merge-preview)
-              (?e "Merge and edit message" magit-merge-editmsg) nil
-              (?n "Merge but don't commit" magit-merge-nocommit)
-              (?s "Squash merge"           magit-merge-squash)
-              (?a "Absorb"                 magit-merge-absorb)
-              (?i "Merge into"             magit-merge-into))
-  :sequence-actions   '((?m "Commit merge" magit-commit)
-                        (?a "Abort merge"  magit-merge-abort))
-  :sequence-predicate 'magit-merge-in-progress-p
-  :default-action 'magit-merge
-  :max-action-columns 2)
-
-;;;###autoload
-(defun magit-merge (rev &optional args nocommit)
-  "Merge commit REV into the current branch; using default message.
-
-Unless there are conflicts or a prefix argument is used create a
-merge commit using a generic commit message and without letting
-the user inspect the result.  With a prefix argument pretend the
-merge failed to give the user the opportunity to inspect the
-merge.
-
-\(git merge --no-edit|--no-commit [ARGS] REV)"
-  (interactive (list (magit-read-other-branch-or-commit "Merge")
-                     (magit-merge-arguments)
-                     current-prefix-arg))
-  (magit-merge-assert)
-  (magit-run-git-async "merge" (if nocommit "--no-commit" "--no-edit") args rev))
-
-;;;###autoload
-(defun magit-merge-editmsg (rev &optional args)
-  "Merge commit REV into the current branch; and edit message.
-Perform the merge and prepare a commit message but let the user
-edit it.
-\n(git merge --edit --no-ff [ARGS] REV)"
-  (interactive (list (magit-read-other-branch-or-commit "Merge")
-                     (magit-merge-arguments)))
-  (magit-merge-assert)
-  (cl-pushnew "--no-ff" args :test #'equal)
-  (apply #'magit-run-git-with-editor "merge" "--edit"
-         (append args (list rev))))
-
-;;;###autoload
-(defun magit-merge-nocommit (rev &optional args)
-  "Merge commit REV into the current branch; pretending it failed.
-Pretend the merge failed to give the user the opportunity to
-inspect the merge and change the commit message.
-\n(git merge --no-commit --no-ff [ARGS] REV)"
-  (interactive (list (magit-read-other-branch-or-commit "Merge")
-                     (magit-merge-arguments)))
-  (magit-merge-assert)
-  (cl-pushnew "--no-ff" args :test #'equal)
-  (magit-run-git-async "merge" "--no-commit" args rev))
-
-;;;###autoload
-(defun magit-merge-into (branch &optional args)
-  "Merge the current branch into BRANCH and remove the former.
-
-Before merging, force push the source branch to its push-remote,
-provided the respective remote branch already exists, ensuring
-that the respective pull-request (if any) won't get stuck on some
-obsolete version of the commits that are being merged.  Finally
-if `magit-branch-pull-request' was used to create the merged
-branch, then also remove the respective remote branch."
-  (interactive
-   (list (magit-read-other-local-branch
-          (format "Merge `%s' into" (magit-get-current-branch))
-          nil
-          (when-let* ((upstream (magit-get-upstream-branch))
-                      (upstream (cdr (magit-split-branch-name upstream))))
-            (and (magit-branch-p upstream) upstream)))
-         (magit-merge-arguments)))
-  (let ((current (magit-get-current-branch)))
-    (when (zerop (magit-call-git "checkout" branch))
-      (magit--merge-absort current args))))
-
-;;;###autoload
-(defun magit-merge-absorb (branch &optional args)
-  "Merge BRANCH into the current branch and remove the former.
-
-Before merging, force push the source branch to its push-remote,
-provided the respective remote branch already exists, ensuring
-that the respective pull-request (if any) won't get stuck on some
-obsolete version of the commits that are being merged.  Finally
-if `magit-branch-pull-request' was used to create the merged
-branch, then also remove the respective remote branch."
-  (interactive (list (magit-read-other-local-branch "Absorb branch")
-                     (magit-merge-arguments)))
-  (magit--merge-absort branch args))
-
-(defun magit--merge-absort (branch args)
-  (when (equal branch "master")
-    (unless (yes-or-no-p
-             "Do you really want to to merge `master' into another branch? ")
-      (user-error "Abort")))
-  (if-let ((target (magit-get-push-branch branch t)))
-      (progn
-        (magit-git-push branch target (list "--force-with-lease"))
-        (set-process-sentinel
-         magit-this-process
-         (lambda (process event)
-           (when (memq (process-status process) '(exit signal))
-             (if (not (zerop (process-exit-status process)))
-                 (magit-process-sentinel process event)
-               (process-put process 'inhibit-refresh t)
-               (magit-process-sentinel process event)
-               (magit--merge-absort-1 branch args))))))
-    (magit--merge-absort-1 branch args)))
-
-(defun magit--merge-absort-1 (branch args)
-  (magit-run-git-async "merge" args "--no-edit" branch)
-  (set-process-sentinel
-   magit-this-process
-   (lambda (process event)
-     (when (memq (process-status process) '(exit signal))
-       (if (> (process-exit-status process) 0)
-           (magit-process-sentinel process event)
-         (process-put process 'inhibit-refresh t)
-         (magit-process-sentinel process event)
-         (magit-branch-maybe-delete-pr-remote branch)
-         (magit-branch-unset-pushRemote branch)
-         (magit-run-git "branch" "-D" branch))))))
-
-;;;###autoload
-(defun magit-merge-squash (rev)
-  "Squash commit REV into the current branch; don't create a commit.
-\n(git merge --squash REV)"
-  (interactive (list (magit-read-other-branch-or-commit "Squash")))
-  (magit-merge-assert)
-  (magit-run-git-async "merge" "--squash" rev))
-
-;;;###autoload
-(defun magit-merge-preview (rev)
-  "Preview result of merging REV into the current branch."
-  (interactive (list (magit-read-other-branch-or-commit "Preview merge")))
-  (magit-mode-setup #'magit-merge-preview-mode rev))
-
-(define-derived-mode magit-merge-preview-mode magit-diff-mode "Magit Merge"
-  "Mode for previewing a merge."
-  :group 'magit-diff
-  (hack-dir-local-variables-non-file-buffer))
-
-(defun magit-merge-preview-refresh-buffer (rev)
-  (let* ((branch (magit-get-current-branch))
-         (head (or branch (magit-rev-verify "HEAD"))))
-    (magit-set-header-line-format (format "Preview merge of %s into %s"
-                                          rev
-                                          (or branch "HEAD")))
-    (magit-insert-section (diffbuf)
-      (magit-git-wash #'magit-diff-wash-diffs
-        "merge-tree" (magit-git-string "merge-base" head rev) head rev))))
-
-;;;###autoload
-(defun magit-merge-abort ()
-  "Abort the current merge operation.
-\n(git merge --abort)"
-  (interactive)
-  (unless (file-exists-p (magit-git-dir "MERGE_HEAD"))
-    (user-error "No merge in progress"))
-  (magit-confirm 'abort-merge)
-  (magit-run-git-async "merge" "--abort"))
-
-(defun magit-checkout-stage (file arg)
-  "During a conflict checkout and stage side, or restore conflict."
-  (interactive
-   (let ((file (magit-completing-read "Checkout file"
-                                      (magit-tracked-files) nil nil nil
-                                      'magit-read-file-hist
-                                      (magit-current-file))))
-     (cond ((member file (magit-unmerged-files))
-            (list file (magit-checkout-read-stage file)))
-           ((yes-or-no-p (format "Restore conflicts in %s? " file))
-            (list file "--merge"))
-           (t
-            (user-error "Quit")))))
-  (pcase (cons arg (cddr (car (magit-file-status file))))
-    ((or `("--ours"   ?D ,_)
-         `("--theirs" ,_ ?D))
-     (magit-run-git "rm" "--" file))
-    (_ (if (equal arg "--merge")
-           ;; This fails if the file was deleted on one
-           ;; side.  And we cannot do anything about it.
-           (magit-run-git "checkout" "--merge" "--" file)
-         (magit-call-git "checkout" arg "--" file)
-         (magit-run-git "add" "-u" "--" file)))))
-
-;;; Utilities
-
-(defun magit-merge-in-progress-p ()
-  (file-exists-p (magit-git-dir "MERGE_HEAD")))
-
-(defun magit--merge-range (&optional head)
-  (unless head
-    (setq head (magit-get-shortname
-                (car (magit-file-lines (magit-git-dir "MERGE_HEAD"))))))
-  (and head
-       (concat (magit-git-string "merge-base" "--octopus" "HEAD" head)
-               ".." head)))
-
-(defun magit-merge-assert ()
-  (or (not (magit-anything-modified-p t))
-      (magit-confirm 'merge-dirty
-        "Merging with dirty worktree is risky.  Continue")))
-
-(defun magit-checkout-read-stage (file)
-  (magit-read-char-case (format "For %s checkout: " file) t
-    (?o "[o]ur stage"   "--ours")
-    (?t "[t]heir stage" "--theirs")
-    (?c "[c]onflict"    "--merge")))
-
-;;; Sections
-
-(defvar magit-unmerged-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-diff-dwim)
-    map)
-  "Keymap for `unmerged' sections.")
-
-(defun magit-insert-merge-log ()
-  "Insert section for the on-going merge.
-Display the heads that are being merged.
-If no merge is in progress, do nothing."
-  (when (magit-merge-in-progress-p)
-    (let* ((heads (mapcar #'magit-get-shortname
-                          (magit-file-lines (magit-git-dir "MERGE_HEAD"))))
-           (range (magit--merge-range (car heads))))
-      (magit-insert-section (unmerged range)
-        (magit-insert-heading
-          (format "Merging %s:" (mapconcat #'identity heads ", ")))
-        (magit-insert-log
-         range
-         (let ((args magit-log-section-arguments))
-           (unless (member "--decorate=full" magit-log-section-arguments)
-             (push "--decorate=full" args))
-           args))))))
-
-(provide 'magit-merge)
-;;; magit-merge.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.elc
deleted file mode 100644
index 977067f7313a..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-merge.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.el
deleted file mode 100644
index ab787f3cde4d..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.el
+++ /dev/null
@@ -1,1384 +0,0 @@
-;;; magit-mode.el --- create and refresh Magit buffers  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements the abstract major-mode `magit-mode' from
-;; which almost all other Magit major-modes derive.  The code in here
-;; is mostly concerned with creating and refreshing Magit buffers.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-
-(require 'magit-section)
-(require 'magit-git)
-(require 'magit-popup)
-
-;; For `magit-display-buffer-fullcolumn-most-v1' from `git-commit'
-(defvar git-commit-mode)
-;; For `magit-xref-insert-buttons' from `magit'
-(defvar magit-diff-show-xref-buttons)
-(defvar magit-revision-show-xref-buttons)
-;; For `magit-refresh' and `magit-refresh-all'
-(declare-function magit-auto-revert-buffers "magit-autorevert" ())
-;; For `magit-refresh-buffer'
-(declare-function magit-process-unset-mode-line-error-status "magit-process" ())
-;; For `magit-mode-setup-internal'
-(declare-function magit-status-goto-initial-section "magit-status" ())
-
-(require 'format-spec)
-(require 'help-mode)
-
-;;; Options
-
-(defcustom magit-mode-hook
-  '(magit-load-config-extensions
-    magit-xref-setup)
-  "Hook run when entering a mode derived from Magit mode."
-  :group 'magit-modes
-  :type 'hook
-  :options '(magit-load-config-extensions
-             magit-xref-setup
-             bug-reference-mode))
-
-(defcustom magit-mode-setup-hook
-  '(magit-maybe-save-repository-buffers
-    magit-set-buffer-margin)
-  "Hook run by `magit-mode-setup'.
-
-This is run right after displaying the buffer and right before
-generating or updating its content.  `magit-mode-hook' and other,
-more specific, `magit-mode-*-hook's on the other hand are run
-right before displaying the buffer.  Usually one of these hooks
-should be used instead of this one."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-modes
-  :type 'hook
-  :options '(magit-maybe-save-repository-buffers
-             magit-set-buffer-margin))
-
-(defcustom magit-pre-refresh-hook '(magit-maybe-save-repository-buffers)
-  "Hook run before refreshing in `magit-refresh'.
-
-This hook, or `magit-post-refresh-hook', should be used
-for functions that are not tied to a particular buffer.
-
-To run a function with a particular buffer current, use
-`magit-refresh-buffer-hook' and use `derived-mode-p'
-inside your function."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-refresh
-  :type 'hook
-  :options '(magit-maybe-save-repository-buffers))
-
-(defcustom magit-post-refresh-hook nil
-  "Hook run after refreshing in `magit-refresh'.
-
-This hook, or `magit-pre-refresh-hook', should be used
-for functions that are not tied to a particular buffer.
-
-To run a function with a particular buffer current, use
-`magit-refresh-buffer-hook' and use `derived-mode-p'
-inside your function."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-refresh
-  :type 'hook)
-
-(defcustom magit-display-buffer-function 'magit-display-buffer-traditional
-  "The function used display a Magit buffer.
-
-All Magit buffers (buffers whose major-modes derive from
-`magit-mode') are displayed using `magit-display-buffer',
-which in turn uses the function specified here."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type '(radio (function-item magit-display-buffer-traditional)
-                (function-item magit-display-buffer-same-window-except-diff-v1)
-                (function-item magit-display-buffer-fullframe-status-v1)
-                (function-item magit-display-buffer-fullframe-status-topleft-v1)
-                (function-item magit-display-buffer-fullcolumn-most-v1)
-                (function-item display-buffer)
-                (function :tag "Function")))
-
-(defcustom magit-pre-display-buffer-hook '(magit-save-window-configuration)
-  "Hook run by `magit-display-buffer' before displaying the buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(magit-save-window-configuration))
-
-(defcustom magit-post-display-buffer-hook '(magit-maybe-set-dedicated)
-  "Hook run by `magit-display-buffer' after displaying the buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(magit-maybe-set-dedicated))
-
-(defcustom magit-generate-buffer-name-function
-  'magit-generate-buffer-name-default-function
-  "The function used to generate the name for a Magit buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type '(radio (function-item magit-generate-buffer-name-default-function)
-                (function :tag "Function")))
-
-(defcustom magit-buffer-name-format "%x%M%v: %t%x"
-  "The format string used to name Magit buffers.
-
-The following %-sequences are supported:
-
-`%m' The name of the major-mode, but with the `-mode' suffix
-     removed.
-
-`%M' Like \"%m\" but abbreviate `magit-status-mode' as `magit'.
-
-`%v' The value the buffer is locked to, in parentheses, or an
-     empty string if the buffer is not locked to a value.
-
-`%V' Like \"%v\", but the string is prefixed with a space, unless
-     it is an empty string.
-
-`%t' The top-level directory of the working tree of the
-     repository, or if `magit-uniquify-buffer-names' is non-nil
-     an abbreviation of that.
-
-`%x' If `magit-uniquify-buffer-names' is nil \"*\", otherwise the
-     empty string.  Due to limitations of the `uniquify' package,
-     buffer names must end with the path.
-
-`%T' Obsolete, use \"%t%x\" instead.  Like \"%t\", but append an
-     asterisk if and only if `magit-uniquify-buffer-names' is nil.
-
-The value should always contain \"%m\" or \"%M\", \"%v\" or
-\"%V\", and \"%t\" (or the obsolete \"%T\").
-
-If `magit-uniquify-buffer-names' is non-nil, then the value must
-end with \"%t\" or \"%t%x\" (or the obsolete \"%T\").  See issue
-#2841.
-
-This is used by `magit-generate-buffer-name-default-function'.
-If another `magit-generate-buffer-name-function' is used, then
-it may not respect this option, or on the contrary it may
-support additional %-sequences."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-buffers
-  :type 'string)
-
-(defcustom magit-uniquify-buffer-names t
-  "Whether to uniquify the names of Magit buffers."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type 'boolean)
-
-(defcustom magit-bury-buffer-function 'magit-restore-window-configuration
-  "The function used to bury or kill the current Magit buffer."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-buffers
-  :type '(radio (function-item quit-window)
-                (function-item magit-mode-quit-window)
-                (function-item magit-restore-window-configuration)
-                (function :tag "Function")))
-
-(defcustom magit-use-sticky-arguments t
-  "How to reuse arguments from existing diff and log buffers.
-
-nil       Always use the default value of the variable
-          `magit-log-arguments' for log commands.  Likewise,
-          always use the default value of the variable
-          `magit-diff-arguments' for diff command calls.
-
-current   If the mode of the current buffer is derived from
-          `magit-log-mode' or `magit-diff-mode', reuse the
-          arguments from that buffer instead of those given by
-          the variable `magit-log-arguments' or
-          `magit-diff-arguments', respectively.
-
-t         Like `current', but if the mode of the current buffer
-          is not derived from `magit-log-mode' or
-          `magit-diff-mode', use the arguments from the current
-          repository's active (i.e. non-locked) `magit-log-mode'
-          or `magit-diff-mode' buffer, respectively, if it
-          exists.
-
-          Note that commands that generate a
-          `magit-revision-mode' or `magit-stash-mode' buffer will
-          also collect their diff arguments from the active
-          `magit-diff-mode' buffer.
-
-In general, there is a separation between the \"sticky\"
-arguments for log and diff buffers, but there is one special
-case: if the current buffer is a log buffer,
-`magit-show-commit' (considered a diff command) uses the file
-filter from the log buffer."
-  :package-version '(magit . "2.11.0")
-  :group 'magit-buffers
-  :type '(choice (const :tag "disabled" nil)
-                 (const :tag "sticky for current" current)
-                 (const :tag "sticky" t)))
-
-(defcustom magit-region-highlight-hook
-  '(magit-section-update-region magit-diff-update-hunk-region)
-  "Functions used to highlight the region.
-
-Each function is run with the current section as only argument
-until one of them returns non-nil.  If all functions return nil,
-then fall back to regular region highlighting."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refresh
-  :type 'hook
-  :options '(magit-section-update-region magit-diff-update-hunk-region))
-
-(defcustom magit-create-buffer-hook nil
-  "Normal hook run after creating a new `magit-mode' buffer."
-  :package-version '(magit . "2.90.0")
-  :group 'magit-refresh
-  :type 'hook)
-
-(defcustom magit-refresh-buffer-hook nil
-  "Normal hook for `magit-refresh-buffer' to run after refreshing."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refresh
-  :type 'hook)
-
-(defcustom magit-refresh-status-buffer t
-  "Whether the status buffer is refreshed after running git.
-
-When this is non-nil, then the status buffer is automatically
-refreshed after running git for side-effects, in addition to the
-current Magit buffer, which is always refreshed automatically.
-
-Only set this to nil after exhausting all other options to
-improve performance."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-refresh
-  :group 'magit-status
-  :type 'boolean)
-
-(defcustom magit-refresh-verbose nil
-  "Whether to revert Magit buffers verbosely."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refresh
-  :type 'boolean)
-
-(defcustom magit-save-repository-buffers t
-  "Whether to save file-visiting buffers when appropriate.
-
-If non-nil, then all modified file-visiting buffers belonging
-to the current repository may be saved before running Magit
-commands and before creating or refreshing Magit buffers.
-If `dontask', then this is done without user intervention, for
-any other non-nil value the user has to confirm each save.
-
-The default is t to avoid surprises, but `dontask' is the
-recommended value."
-  :group 'magit-essentials
-  :group 'magit-buffers
-  :type '(choice (const :tag "Never" nil)
-                 (const :tag "Ask" t)
-                 (const :tag "Save without asking" dontask)))
-
-(defcustom magit-keep-region-overlay nil
-  "Whether to keep the region overlay when there is a valid selection.
-
-By default Magit removes the regular region overlay if, and only
-if, that region constitutes a valid selection as understood by
-Magit commands.  Otherwise it does not remove that overlay, and
-the region looks like it would in other buffers.
-
-There are two types of such valid selections: hunk-internal
-regions and regions that select two or more sibling sections.
-In such cases Magit removes the region overlay and instead
-highlights a slightly larger range.  All text (for hunk-internal
-regions) or the headings of all sections (for sibling selections)
-that are inside that range (not just inside the region) are acted
-on by commands such as the staging command.  This buffer range
-begins at the beginning of the line on which the region begins
-and ends at the end of the line on which the region ends.
-
-Because Magit acts on this larger range and not the region, it is
-actually quite important to visualize that larger range.  If we
-don't do that, then one might think that these commands act on
-the region instead.  If you want to *also* visualize the region,
-then set this option to t.  But please note that when the region
-does *not* constitute a valid selection, then the region is
-*always* visualized as usual, and that it is usually under such
-circumstances that you want to use a non-magit command to act on
-the region.
-
-Besides keeping the region overlay, setting this option to t also
-causes all face properties, except for `:foreground', to be
-ignored for the faces used to highlight headings of selected
-sections.  This avoids the worst conflicts that result from
-displaying the region and the selection overlays at the same
-time.  We are not interested in dealing with other conflicts.
-In fact we *already* provide a way to avoid all of these
-conflicts: *not* changing the value of this option.
-
-It should be clear by now that we consider it a mistake to set
-this to display the region when the Magit selection is also
-visualized, but since it has been requested a few times and
-because it doesn't cost much to offer this option we do so.
-However that might change.  If the existence of this option
-starts complicating other things, then it will be removed."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-miscellaneous
-  :type 'boolean)
-
-;;; Magit Mode
-
-(defvar magit-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map t)
-    (cond ((featurep 'jkl)
-           (define-key map   [return]  'magit-visit-thing)
-           (define-key map [C-return]  'magit-dired-jump)
-           (define-key map   [tab]     'magit-section-toggle)
-           (define-key map [C-tab]     'magit-section-cycle)
-           (define-key map [M-tab]     'magit-section-cycle-diffs)
-           (define-key map [S-tab]     'magit-section-cycle-global)
-           (define-key map (kbd "M-o") 'magit-section-up)
-           (define-key map (kbd   "i") 'magit-section-backward)
-           (define-key map (kbd   "k") 'magit-section-forward)
-           (define-key map (kbd "M-i") 'magit-section-backward-sibling)
-           (define-key map (kbd "M-k") 'magit-section-forward-sibling)
-           (define-key map (kbd   "p") 'magit-push-popup)
-           (define-key map (kbd   ",") 'magit-delete-thing)
-           (define-key map (kbd   ";") 'magit-file-untrack)
-           (define-key map (kbd "C-c C-i") 'magit-gitignore-popup))
-          (t
-           (define-key map [C-return]  'magit-visit-thing)
-           (define-key map (kbd "C-m") 'magit-visit-thing)
-           (define-key map (kbd "C-M-i") 'magit-dired-jump)
-           (define-key map (kbd "C-i") 'magit-section-toggle)
-           (define-key map [C-tab]     'magit-section-cycle)
-           (define-key map [M-tab]     'magit-section-cycle-diffs)
-           ;; [backtab] is the most portable binding for Shift+Tab.
-           (define-key map [backtab]   'magit-section-cycle-global)
-           (define-key map (kbd   "^") 'magit-section-up)
-           (define-key map (kbd   "p") 'magit-section-backward)
-           (define-key map (kbd   "n") 'magit-section-forward)
-           (define-key map (kbd "M-p") 'magit-section-backward-sibling)
-           (define-key map (kbd "M-n") 'magit-section-forward-sibling)
-           (define-key map (kbd   "P") 'magit-push-popup)
-           (define-key map (kbd   "k") 'magit-delete-thing)
-           (define-key map (kbd   "K") 'magit-file-untrack)
-           (define-key map (kbd   "i") 'magit-gitignore)
-           (define-key map (kbd   "I") 'magit-gitignore-popup)))
-    (define-key map (kbd "SPC") 'magit-diff-show-or-scroll-up)
-    (define-key map (kbd "DEL") 'magit-diff-show-or-scroll-down)
-    (define-key map "+"         'magit-diff-more-context)
-    (define-key map "-"         'magit-diff-less-context)
-    (define-key map "0"         'magit-diff-default-context)
-    (define-key map "1"         'magit-section-show-level-1)
-    (define-key map "2"         'magit-section-show-level-2)
-    (define-key map "3"         'magit-section-show-level-3)
-    (define-key map "4"         'magit-section-show-level-4)
-    (define-key map (kbd "M-1") 'magit-section-show-level-1-all)
-    (define-key map (kbd "M-2") 'magit-section-show-level-2-all)
-    (define-key map (kbd "M-3") 'magit-section-show-level-3-all)
-    (define-key map (kbd "M-4") 'magit-section-show-level-4-all)
-    (define-key map "$" 'magit-process-buffer)
-    (define-key map "%" 'magit-worktree-popup)
-    (define-key map "a" 'magit-cherry-apply)
-    (define-key map "A" 'magit-cherry-pick-popup)
-    (define-key map "b" 'magit-branch-popup)
-    (define-key map "B" 'magit-bisect-popup)
-    (define-key map "c" 'magit-commit-popup)
-    (define-key map "d" 'magit-diff-popup)
-    (define-key map "D" 'magit-diff-refresh-popup)
-    (define-key map "e" 'magit-ediff-dwim)
-    (define-key map "E" 'magit-ediff-popup)
-    (define-key map "f" 'magit-fetch-popup)
-    (define-key map "F" 'magit-pull-popup)
-    (define-key map "g" 'magit-refresh)
-    (define-key map "G" 'magit-refresh-all)
-    (define-key map "h" 'magit-dispatch-popup)
-    (define-key map "?" 'magit-dispatch-popup)
-    (define-key map "l" 'magit-log-popup)
-    (define-key map "L" 'magit-log-refresh-popup)
-    (define-key map "m" 'magit-merge-popup)
-    (define-key map "M" 'magit-remote-popup)
-    (define-key map "o" 'magit-submodule-popup)
-    (define-key map "O" 'magit-subtree-popup)
-    (define-key map "q" 'magit-mode-bury-buffer)
-    (define-key map "r" 'magit-rebase-popup)
-    (define-key map "R" 'magit-file-rename)
-    (define-key map "t" 'magit-tag-popup)
-    (define-key map "T" 'magit-notes-popup)
-    (define-key map "s" 'magit-stage-file)
-    (define-key map "S" 'magit-stage-modified)
-    (define-key map "u" 'magit-unstage-file)
-    (define-key map "U" 'magit-unstage-all)
-    (define-key map "v" 'magit-revert-no-commit)
-    (define-key map "V" 'magit-revert-popup)
-    (define-key map "w" 'magit-am-popup)
-    (define-key map "W" 'magit-patch-popup)
-    (define-key map "x" 'magit-reset)
-    (define-key map "X" 'magit-reset-popup)
-    (define-key map "y" 'magit-show-refs-popup)
-    (define-key map "Y" 'magit-cherry)
-    (define-key map "z" 'magit-stash-popup)
-    (define-key map "Z" 'magit-stash-popup)
-    (define-key map ":" 'magit-git-command)
-    (define-key map "!" 'magit-run-popup)
-    (define-key map (kbd "C-c C-b") 'magit-browse-thing)
-    (define-key map (kbd "C-c C-c") 'magit-dispatch-popup)
-    (define-key map (kbd "C-c C-e") 'magit-dispatch-popup)
-    (define-key map (kbd "C-x a")   'magit-add-change-log-entry)
-    (define-key map (kbd "C-x 4 a") 'magit-add-change-log-entry-other-window)
-    (define-key map (kbd "C-w")     'magit-copy-section-value)
-    (define-key map (kbd "M-w")     'magit-copy-buffer-revision)
-    (define-key map [remap evil-previous-line] 'evil-previous-visual-line)
-    (define-key map [remap evil-next-line] 'evil-next-visual-line)
-    map)
-  "Parent keymap for all keymaps of modes derived from `magit-mode'.")
-
-(defun magit-delete-thing ()
-  "This is a placeholder command.
-Where applicable, section-specific keymaps bind another command
-which deletes the thing at point."
-  (interactive)
-  (user-error "There is no thing at point that could be deleted"))
-
-(defun magit-visit-thing ()
-  "This is a placeholder command.
-Where applicable, section-specific keymaps bind another command
-which visits the thing at point."
-  (interactive)
-  (if (eq magit-current-popup 'magit-dispatch-popup)
-      (progn (setq magit-current-popup nil)
-             (call-interactively (key-binding (this-command-keys))))
-    (user-error "There is no thing at point that could be visited")))
-
-(defun magit-edit-thing ()
-  "This is a placeholder command.
-Where applicable, section-specific keymaps bind another command
-which lets you edit the thing at point, likely in another buffer."
-  (interactive)
-  (if (eq magit-current-popup 'magit-dispatch-popup)
-      (progn (setq magit-current-popup nil)
-             (call-interactively (key-binding (this-command-keys))))
-    (user-error "There is no thing at point that could be visited")))
-
-(defun magit-browse-thing ()
-  "This is a placeholder command.
-Where applicable, section-specific keymaps bind another command
-which visits the thing at point using `browse-url'."
-  (interactive)
-  (user-error "There is no thing at point that could be browsed"))
-
-(easy-menu-define magit-mode-menu magit-mode-map
-  "Magit menu"
-  '("Magit"
-    ["Refresh" magit-refresh t]
-    ["Refresh all" magit-refresh-all t]
-    "---"
-    ["Stage" magit-stage t]
-    ["Stage modified" magit-stage-modified t]
-    ["Unstage" magit-unstage t]
-    ["Reset index" magit-reset-index t]
-    ["Commit" magit-commit-popup t]
-    ["Add log entry" magit-commit-add-log t]
-    ["Tag" magit-tag t]
-    "---"
-    ["Diff working tree" magit-diff-working-tree t]
-    ["Diff" magit-diff t]
-    ("Log"
-     ["Log" magit-log t]
-     ["Reflog" magit-reflog t]
-     ["Extended..." magit-log-popup t])
-    "---"
-    ["Cherry pick" magit-cherry-pick t]
-    ["Revert commit" magit-revert-popup t]
-    "---"
-    ["Ignore" magit-gitignore t]
-    ["Ignore locally" magit-gitignore-locally t]
-    ["Discard" magit-discard t]
-    ["Reset head" magit-reset-head t]
-    ["Stash" magit-stash t]
-    ["Snapshot" magit-snapshot t]
-    "---"
-    ["Branch..." magit-checkout t]
-    ["Merge" magit-merge t]
-    ["Ediff resolve" magit-ediff-resolve t]
-    ["Rebase..." magit-rebase-popup t]
-    "---"
-    ["Push" magit-push t]
-    ["Pull" magit-pull t]
-    ["Remote update" magit-fetch-all t]
-    ("Submodule"
-     ["Submodule update" magit-submodule-update t]
-     ["Submodule update and init" magit-submodule-setup t]
-     ["Submodule init" magit-submodule-init t]
-     ["Submodule sync" magit-submodule-sync t])
-    "---"
-    ("Extensions")
-    "---"
-    ["Display Git output" magit-process-buffer t]
-    ["Quit Magit" magit-mode-bury-buffer t]))
-
-(defun magit-load-config-extensions ()
-  "Load Magit extensions that are defined at the Git config layer."
-  (dolist (ext (magit-get-all "magit.extension"))
-    (let ((sym (intern (format "magit-%s-mode" ext))))
-      (when (fboundp sym)
-        (funcall sym 1)))))
-
-(define-derived-mode magit-mode special-mode "Magit"
-  "Parent major mode from which Magit major modes inherit.
-
-Magit is documented in info node `(magit)'."
-  :group 'magit-modes
-  (buffer-disable-undo)
-  (setq truncate-lines t)
-  (setq buffer-read-only t)
-  (setq-local line-move-visual t) ; see #1771
-  (setq show-trailing-whitespace nil)
-  (setq list-buffers-directory (abbreviate-file-name default-directory))
-  (hack-dir-local-variables-non-file-buffer)
-  (make-local-variable 'text-property-default-nonsticky)
-  (push (cons 'keymap t) text-property-default-nonsticky)
-  (add-hook 'post-command-hook #'magit-section-update-highlight t t)
-  (add-hook 'deactivate-mark-hook #'magit-section-update-highlight t t)
-  (setq-local redisplay-highlight-region-function 'magit-highlight-region)
-  (setq-local redisplay-unhighlight-region-function 'magit-unhighlight-region)
-  (when (bound-and-true-p global-linum-mode)
-    (linum-mode -1))
-  (when (and (fboundp 'nlinum-mode)
-             (bound-and-true-p global-nlinum-mode))
-    (nlinum-mode -1))
-  (when (and (fboundp 'display-line-numbers-mode)
-             (bound-and-true-p global-display-line-numbers-mode))
-    (display-line-numbers-mode -1))
-  (add-hook 'kill-buffer-hook 'magit-preserve-section-visibility-cache))
-
-(defvar-local magit-region-overlays nil)
-
-(defun magit-delete-region-overlays ()
-  (mapc #'delete-overlay magit-region-overlays)
-  (setq magit-region-overlays nil))
-
-(defun magit-highlight-region (start end window rol)
-  (magit-delete-region-overlays)
-  (if (and (run-hook-with-args-until-success 'magit-region-highlight-hook
-                                             (magit-current-section))
-           (not magit-keep-region-overlay)
-           (not (= (line-number-at-pos start)
-                   (line-number-at-pos end)))
-           ;; (not (eq (car-safe last-command-event) 'mouse-movement))
-           )
-      (funcall (default-value 'redisplay-unhighlight-region-function) rol)
-    (funcall (default-value 'redisplay-highlight-region-function)
-             start end window rol)))
-
-(defun magit-unhighlight-region (rol)
-  (setq magit-section-highlighted-section nil)
-  (magit-delete-region-overlays)
-  (funcall (default-value 'redisplay-unhighlight-region-function) rol))
-
-(defvar-local magit-refresh-args nil
-  "The arguments used to refresh the current buffer.")
-(put 'magit-refresh-args 'permanent-local t)
-
-(defvar-local magit-previous-section nil)
-(put 'magit-previous-section 'permanent-local t)
-
-(defun magit-mode-setup (mode &rest args)
-  "Setup up a MODE buffer using ARGS to generate its content."
-  (magit-mode-setup-internal mode args))
-
-(defun magit-mode-setup-internal (mode args &optional locked)
-  "Setup up a MODE buffer using ARGS to generate its content.
-When optional LOCKED is non-nil, then create a buffer that is
-locked to its value, which is derived from MODE and ARGS."
-  (let* ((value   (and locked (magit-buffer-lock-value mode args)))
-         (buffer  (magit-mode-get-buffer mode nil nil value))
-         (section (and buffer (magit-current-section)))
-         (created (not buffer)))
-    (unless buffer
-      (setq buffer (magit-with-toplevel
-                     (magit-generate-new-buffer mode value))))
-    (with-current-buffer buffer
-      (setq magit-previous-section section)
-      (setq magit-refresh-args args)
-      (funcall mode)
-      (when created
-        (magit-status-goto-initial-section)
-        (run-hooks 'magit-create-buffer-hook)))
-    (magit-display-buffer buffer)
-    (with-current-buffer buffer
-      (run-hooks 'magit-mode-setup-hook)
-      (magit-refresh-buffer))))
-
-(defvar magit-display-buffer-noselect nil
-  "If non-nil, then `magit-display-buffer' doesn't call `select-window'.")
-
-(defun magit-display-buffer (buffer)
-  "Display BUFFER in some window and maybe select it.
-
-Display the buffer using `magit-display-buffer-function' and
-then, unless `magit-display-buffer-noselect' is non-nil, select
-the window which was used to display the buffer.
-
-Also run the hooks `magit-pre-display-buffer-hook'
-and `magit-post-display-buffer-hook'."
-  (with-current-buffer buffer
-    (run-hooks 'magit-pre-display-buffer-hook))
-  (let ((window (funcall magit-display-buffer-function buffer)))
-    (unless magit-display-buffer-noselect
-      (select-frame-set-input-focus
-       (window-frame
-        (select-window window)))))
-  (with-current-buffer buffer
-    (run-hooks 'magit-post-display-buffer-hook)))
-
-(defun magit-display-buffer-traditional (buffer)
-  "Display BUFFER the way this has traditionally been done."
-  (display-buffer
-   buffer (if (and (derived-mode-p 'magit-mode)
-                   (not (memq (with-current-buffer buffer major-mode)
-                              '(magit-process-mode
-                                magit-revision-mode
-                                magit-diff-mode
-                                magit-stash-mode
-                                magit-status-mode))))
-              '(display-buffer-same-window)
-            nil))) ; display in another window
-
-(defun magit-display-buffer-same-window-except-diff-v1 (buffer)
-  "Display BUFFER in the selected window except for some modes.
-If a buffer's `major-mode' derives from `magit-diff-mode' or
-`magit-process-mode', display it in another window.  Display all
-other buffers in the selected window."
-  (display-buffer
-   buffer (if (with-current-buffer buffer
-                (derived-mode-p 'magit-diff-mode 'magit-process-mode))
-              nil  ; display in another window
-            '(display-buffer-same-window))))
-
-(defun magit--display-buffer-fullframe (buffer alist)
-  (when-let ((window (or (display-buffer-reuse-window buffer alist)
-                         (display-buffer-same-window buffer alist)
-                         (display-buffer-pop-up-window buffer alist)
-                         (display-buffer-use-some-window buffer alist))))
-    (delete-other-windows window)
-    window))
-
-(defun magit-display-buffer-fullframe-status-v1 (buffer)
-  "Display BUFFER, filling entire frame if BUFFER is a status buffer.
-Otherwise, behave like `magit-display-buffer-traditional'."
-  (if (eq (with-current-buffer buffer major-mode)
-          'magit-status-mode)
-      (display-buffer buffer '(magit--display-buffer-fullframe))
-    (magit-display-buffer-traditional buffer)))
-
-(defun magit--display-buffer-topleft (buffer alist)
-  (or (display-buffer-reuse-window buffer alist)
-      (when-let ((window2 (display-buffer-pop-up-window buffer alist)))
-        (let ((window1 (get-buffer-window))
-              (buffer1 (current-buffer))
-              (buffer2 (window-buffer window2))
-              (w2-quit-restore (window-parameter window2 'quit-restore)))
-          (set-window-buffer window1 buffer2)
-          (set-window-buffer window2 buffer1)
-          (select-window window2)
-          ;; Swap some window state that `magit-mode-quit-window' and
-          ;; `quit-restore-window' inspect.
-          (set-window-prev-buffers window2 (cdr (window-prev-buffers window1)))
-          (set-window-prev-buffers window1 nil)
-          (set-window-parameter window2 'magit-dedicated
-                                (window-parameter window1 'magit-dedicated))
-          (set-window-parameter window1 'magit-dedicated t)
-          (set-window-parameter window1 'quit-restore
-                                (list 'window 'window
-                                      (nth 2 w2-quit-restore)
-                                      (nth 3 w2-quit-restore)))
-          (set-window-parameter window2 'quit-restore nil)
-          window1))))
-
-(defun magit-display-buffer-fullframe-status-topleft-v1 (buffer)
-  "Display BUFFER, filling entire frame if BUFFER is a status buffer.
-When BUFFER derives from `magit-diff-mode' or
-`magit-process-mode', try to display BUFFER to the top or left of
-the current buffer rather than to the bottom or right, as
-`magit-display-buffer-fullframe-status-v1' would.  Whether the
-split is made vertically or horizontally is determined by
-`split-window-preferred-function'."
-  (display-buffer
-   buffer
-   (cond ((eq (with-current-buffer buffer major-mode)
-              'magit-status-mode)
-          '(magit--display-buffer-fullframe))
-         ((with-current-buffer buffer
-            (derived-mode-p 'magit-diff-mode 'magit-process-mode))
-          '(magit--display-buffer-topleft))
-         (t
-          '(display-buffer-same-window)))))
-
-(defun magit--display-buffer-fullcolumn (buffer alist)
-  (when-let ((window (or (display-buffer-reuse-window buffer alist)
-                         (display-buffer-same-window buffer alist)
-                         (display-buffer-below-selected buffer alist))))
-    (delete-other-windows-vertically window)
-    window))
-
-(defun magit-display-buffer-fullcolumn-most-v1 (buffer)
-  "Display BUFFER using the full column except in some cases.
-For most cases where BUFFER's `major-mode' derives from
-`magit-mode', display it in the selected window and grow that
-window to the full height of the frame, deleting other windows in
-that column as necessary.  However, display BUFFER in another
-window if 1) BUFFER's mode derives from `magit-process-mode', or
-2) BUFFER's mode derives from `magit-diff-mode', provided that
-the mode of the current buffer derives from `magit-log-mode' or
-`magit-cherry-mode'."
-  (display-buffer
-   buffer
-   (cond ((and (or git-commit-mode
-                   (derived-mode-p 'magit-log-mode 'magit-cherry-mode))
-               (with-current-buffer buffer
-                 (derived-mode-p 'magit-diff-mode)))
-          nil)
-         ((with-current-buffer buffer
-            (derived-mode-p 'magit-process-mode))
-          nil)
-         (t
-          '(magit--display-buffer-fullcolumn)))))
-
-(defun magit-maybe-set-dedicated ()
-  "Mark the selected window as dedicated if appropriate.
-
-If a new window was created to display the buffer, then remember
-that fact.  That information is used by `magit-mode-quit-window',
-to determine whether the window should be deleted when its last
-Magit buffer is buried."
-  (let ((window (get-buffer-window (current-buffer))))
-    (when (and (window-live-p window)
-               (not (window-prev-buffers window)))
-      (set-window-parameter window 'magit-dedicated t))))
-
-(defvar-local magit--default-directory nil
-  "Value of `default-directory' when buffer is generated.
-This exists to prevent a let-bound `default-directory' from
-tricking `magit-mode-get-buffer' or `magit-mode-get-buffers' into
-thinking a buffer belongs to a repo that it doesn't.")
-(put 'magit--default-directory 'permanent-local t)
-
-(defun magit-mode-get-buffers ()
-  (let ((topdir (magit-toplevel)))
-    (--filter (with-current-buffer it
-                (and (derived-mode-p 'magit-mode)
-                     (equal magit--default-directory topdir)))
-              (buffer-list))))
-
-(defvar-local magit-buffer-locked-p nil)
-(put 'magit-buffer-locked-p 'permanent-local t)
-
-(defun magit-mode-get-buffer (mode &optional create frame value)
-  (when create
-    (error "`magit-mode-get-buffer's CREATE argument is obsolete"))
-  (if-let ((topdir (magit-toplevel)))
-      (--first (with-current-buffer it
-                 (and (eq major-mode mode)
-                      (equal magit--default-directory topdir)
-                      (if value
-                          (and magit-buffer-locked-p
-                               (equal (magit-buffer-lock-value) value))
-                        (not magit-buffer-locked-p))))
-               (if frame
-                   (mapcar #'window-buffer
-                           (window-list (unless (eq frame t) frame)))
-                 (buffer-list)))
-    (magit--not-inside-repository-error)))
-
-(defun magit-generate-new-buffer (mode &optional value)
-  (let* ((name (funcall magit-generate-buffer-name-function mode value))
-         (buffer (generate-new-buffer name)))
-    (with-current-buffer buffer
-      (setq magit--default-directory default-directory)
-      (setq magit-buffer-locked-p (and value t))
-      (magit-restore-section-visibility-cache mode))
-    (when magit-uniquify-buffer-names
-      (add-to-list 'uniquify-list-buffers-directory-modes mode)
-      (with-current-buffer buffer
-        (setq list-buffers-directory (abbreviate-file-name default-directory)))
-      (let ((uniquify-buffer-name-style
-             (if (memq uniquify-buffer-name-style '(nil forward))
-                 'post-forward-angle-brackets
-               uniquify-buffer-name-style)))
-        (uniquify-rationalize-file-buffer-names
-         name (file-name-directory (directory-file-name default-directory))
-         buffer)))
-    buffer))
-
-(defun magit-generate-buffer-name-default-function (mode &optional value)
-  "Generate buffer name for a MODE buffer in the current repository.
-The returned name is based on `magit-buffer-name-format' and
-takes `magit-uniquify-buffer-names' and VALUE, if non-nil, into
-account."
-  (let ((m (substring (symbol-name mode) 0 -5))
-        (v (and value (format "%s" (if (listp value) value (list value)))))
-        (n (if magit-uniquify-buffer-names
-               (file-name-nondirectory
-                (directory-file-name default-directory))
-             (abbreviate-file-name default-directory))))
-    (format-spec
-     magit-buffer-name-format
-     `((?m . ,m)
-       (?M . ,(if (eq mode 'magit-status-mode) "magit" m))
-       (?v . ,(or v ""))
-       (?V . ,(if v (concat " " v) ""))
-       (?t . ,n)
-       (?x . ,(if magit-uniquify-buffer-names "" "*"))
-       (?T . ,(if magit-uniquify-buffer-names n (concat n "*")))))))
-
-(defun magit-toggle-buffer-lock ()
-  "Lock the current buffer to its value or unlock it.
-
-Locking a buffer to its value prevents it from being reused to
-display another value.  The name of a locked buffer contains its
-value, which allows telling it apart from other locked buffers
-and the unlocked buffer.
-
-Not all Magit buffers can be locked to their values, for example
-it wouldn't make sense to lock a status buffer.
-
-There can only be a single unlocked buffer using a certain
-major-mode per repository.  So when a buffer is being unlocked
-and another unlocked buffer already exists for that mode and
-repository, then the former buffer is instead deleted and the
-latter is displayed in its place."
-  (interactive)
-  (if magit-buffer-locked-p
-      (if-let ((unlocked (magit-mode-get-buffer major-mode)))
-          (let ((locked (current-buffer)))
-            (switch-to-buffer unlocked nil t)
-            (kill-buffer locked))
-        (setq magit-buffer-locked-p nil)
-        (rename-buffer (funcall magit-generate-buffer-name-function
-                                major-mode)))
-    (if-let ((value (magit-buffer-lock-value)))
-        (if-let ((locked (magit-mode-get-buffer major-mode nil nil value)))
-            (let ((unlocked (current-buffer)))
-              (switch-to-buffer locked nil t)
-              (kill-buffer unlocked))
-          (setq magit-buffer-locked-p t)
-          (rename-buffer (funcall magit-generate-buffer-name-function
-                                  major-mode value)))
-      (user-error "Buffer has no value it could be locked to"))))
-
-(defvar magit-buffer-lock-functions nil
-  "Provide buffer-locking support for third-party modes.
-An alist of symbols to functions.
-
-The symbol must be the major-mode the locked buffer will have.
-
-The function must take a single argument, a list of refresh
-arguments (the value of `magit-refresh-args') and return a
-value that identifies the buffer (i.e., its 'lock value').
-If the third-party mode is invoked as
-
-    (magit-mode-setup-internal #\\='my-mode \\='(1 2 3) t)
-
-the function will be invoked as
-
-    (funcall lock-func \\='(1 2 3))
-
-if the cons (my-mode . lock-func) is in this list.
-
-This variable is intended for third-party extensions;
-`magit-buffer-lock-value' implements all built-in behavior.
-
-See also `magit-toggle-buffer-lock'.")
-
-(cl-defun magit-buffer-lock-value
-    (&optional (mode major-mode)
-               (args magit-refresh-args))
-  "Find an appropriate buffer lock value for MODE under ARGS.
-See also `magit-buffer-lock-functions'."
-  (cl-case mode
-    (magit-cherry-mode
-     (pcase-let ((`(,upstream ,head) args))
-       (concat head ".." upstream)))
-    (magit-diff-mode
-     (pcase-let ((`(,rev-or-range ,const ,_args ,files) args))
-       (nconc (cons (or rev-or-range
-                        (if (member "--cached" const)
-                            (progn (setq const (delete "--cached" const))
-                                   'staged)
-                          'unstaged))
-                    const)
-              (and files (cons "--" files)))))
-    (magit-log-mode
-     (pcase-let ((`(,revs ,_args ,files) args))
-       (if (and revs files)
-           (append revs (cons "--" files))
-         (append revs files))))
-    (magit-refs-mode
-     (pcase-let ((`(,ref ,args) args))
-       (cons (or ref "HEAD") args)))
-    (magit-revision-mode
-     (pcase-let ((`(,rev ,_const ,_args ,files) args))
-       (if files (cons rev files) (list rev))))
-    ((magit-reflog-mode   ; (ref ~args)
-      magit-stash-mode    ; (stash _const _args _files)
-      magit-stashes-mode) ; (ref)
-     (car args))
-    (t
-     (--when-let (cdr (assq mode magit-buffer-lock-functions))
-       (funcall it args)))))
-
-(defun magit-mode-bury-buffer (&optional kill-buffer)
-  "Bury the current buffer.
-With a prefix argument, kill the buffer instead.
-This is done using `magit-bury-buffer-function'."
-  (interactive "P")
-  (funcall magit-bury-buffer-function kill-buffer))
-
-(defun magit-mode-quit-window (kill-buffer)
-  "Quit the selected window and bury its buffer.
-
-This behaves similar to `quit-window', but when the window
-was originally created to display a Magit buffer and the
-current buffer is the last remaining Magit buffer that was
-ever displayed in the selected window, then delete that
-window."
-  (if (or (one-window-p)
-          (--first (let ((buffer (car it)))
-                     (and (not (eq buffer (current-buffer)))
-                          (buffer-live-p buffer)
-                          (or (not (window-parameter nil 'magit-dedicated))
-                              (with-current-buffer buffer
-                                (derived-mode-p 'magit-mode
-                                                'magit-process-mode)))))
-                   (window-prev-buffers)))
-      (quit-window kill-buffer)
-    (let ((window (selected-window)))
-      (quit-window kill-buffer)
-      (when (window-live-p window)
-        (delete-window window)))))
-
-;;; Refresh Magit Buffers
-
-(defvar inhibit-magit-refresh nil)
-
-(defun magit-refresh ()
-  "Refresh some buffers belonging to the current repository.
-
-Refresh the current buffer if its major mode derives from
-`magit-mode', and refresh the corresponding status buffer.
-
-Run hooks `magit-pre-refresh-hook' and `magit-post-refresh-hook'."
-  (interactive)
-  (unless inhibit-magit-refresh
-    (unwind-protect
-        (let ((start (current-time))
-              (magit--refresh-cache (or magit--refresh-cache
-                                        (list (cons 0 0)))))
-          (when magit-refresh-verbose
-            (message "Refreshing magit..."))
-          (magit-run-hook-with-benchmark 'magit-pre-refresh-hook)
-          (when (derived-mode-p 'magit-mode)
-            (magit-refresh-buffer))
-          (--when-let (and magit-refresh-status-buffer
-                           (not (derived-mode-p 'magit-status-mode))
-                           (magit-mode-get-buffer 'magit-status-mode))
-            (with-current-buffer it
-              (magit-refresh-buffer)))
-          (magit-auto-revert-buffers)
-          (magit-run-hook-with-benchmark 'magit-post-refresh-hook)
-          (when magit-refresh-verbose
-            (message "Refreshing magit...done (%.3fs, cached %s/%s)"
-                     (float-time (time-subtract (current-time) start))
-                     (caar magit--refresh-cache)
-                     (+ (caar magit--refresh-cache)
-                        (cdar magit--refresh-cache)))))
-      (run-hooks 'magit-unwind-refresh-hook))))
-
-(defun magit-refresh-all ()
-  "Refresh all buffers belonging to the current repository.
-
-Refresh all Magit buffers belonging to the current repository,
-and revert buffers that visit files located inside the current
-repository.
-
-Run hooks `magit-pre-refresh-hook' and `magit-post-refresh-hook'."
-  (interactive)
-  (magit-run-hook-with-benchmark 'magit-pre-refresh-hook)
-  (dolist (buffer (magit-mode-get-buffers))
-    (with-current-buffer buffer (magit-refresh-buffer)))
-  (magit-auto-revert-buffers)
-  (magit-run-hook-with-benchmark 'magit-post-refresh-hook))
-
-(defvar-local magit-refresh-start-time nil)
-
-(defun magit-refresh-buffer ()
-  "Refresh the current Magit buffer."
-  (setq magit-refresh-start-time (current-time))
-  (let ((refresh (intern (format "%s-refresh-buffer"
-                                 (substring (symbol-name major-mode) 0 -5))))
-        (magit--refresh-cache (or magit--refresh-cache (list (cons 0 0)))))
-    (when (functionp refresh)
-      (when magit-refresh-verbose
-        (message "Refreshing buffer `%s'..." (buffer-name)))
-      (let* ((buffer (current-buffer))
-             (windows
-              (--mapcat (with-selected-window it
-                          (with-current-buffer buffer
-                            (when-let ((section (magit-current-section)))
-                              (list
-                               (nconc (list it section)
-                                      (magit-refresh-get-relative-position))))))
-                        (or (get-buffer-window-list buffer nil t)
-                            (list (selected-window))))))
-        (deactivate-mark)
-        (setq magit-section-highlight-overlays nil)
-        (setq magit-section-highlighted-section nil)
-        (setq magit-section-highlighted-sections nil)
-        (setq magit-section-unhighlight-sections nil)
-        (magit-process-unset-mode-line-error-status)
-        (let ((inhibit-read-only t))
-          (erase-buffer)
-          (save-excursion
-            (apply refresh magit-refresh-args)))
-        (dolist (window windows)
-          (with-selected-window (car window)
-            (with-current-buffer buffer
-              (apply #'magit-section-goto-successor (cdr window)))))
-        (run-hooks 'magit-refresh-buffer-hook)
-        (magit-section-update-highlight)
-        (set-buffer-modified-p nil))
-      (when magit-refresh-verbose
-        (message "Refreshing buffer `%s'...done (%.3fs)" (buffer-name)
-                 (float-time (time-subtract (current-time)
-                                            magit-refresh-start-time)))))))
-
-(defun magit-refresh-get-relative-position ()
-  (when-let ((section (magit-current-section)))
-    (let ((start (oref section start)))
-      (list (count-lines start (point))
-            (- (point) (line-beginning-position))
-            (and (magit-hunk-section-p section)
-                 (region-active-p)
-                 (progn (goto-char (line-beginning-position))
-                        (when  (looking-at "^[-+]") (forward-line))
-                        (while (looking-at "^[ @]") (forward-line))
-                        (let ((beg (point)))
-                          (cond ((looking-at "^[-+]")
-                                 (forward-line)
-                                 (while (looking-at "^[-+]") (forward-line))
-                                 (while (looking-at "^ ")    (forward-line))
-                                 (forward-line -1)
-                                 (regexp-quote (buffer-substring-no-properties
-                                                beg (line-end-position))))
-                                (t t)))))))))
-
-;;; Save File-Visiting Buffers
-
-(defvar disable-magit-save-buffers nil)
-
-(defun magit-pre-command-hook ()
-  (setq disable-magit-save-buffers nil))
-(add-hook 'pre-command-hook #'magit-pre-command-hook)
-
-(defvar magit-after-save-refresh-buffers nil)
-
-(defun magit-after-save-refresh-buffers ()
-  (dolist (buffer magit-after-save-refresh-buffers)
-    (when (buffer-live-p buffer)
-      (with-current-buffer buffer
-        (magit-refresh-buffer))))
-  (setq magit-after-save-refresh-buffers nil)
-  (remove-hook 'post-command-hook 'magit-after-save-refresh-buffers))
-
-(defun magit-after-save-refresh-status ()
-  "Refresh the status buffer of the current repository.
-
-This function is intended to be added to `after-save-hook'.
-
-If the status buffer does not exist or the file being visited in
-the current buffer isn't inside the working tree of a repository,
-then do nothing.
-
-Note that refreshing a Magit buffer is done by re-creating its
-contents from scratch, which can be slow in large repositories.
-If you are not satisfied with Magit's performance, then you
-should obviously not add this function to that hook."
-  (when (and (not disable-magit-save-buffers)
-             (magit-inside-worktree-p t))
-    (--when-let (ignore-errors (magit-mode-get-buffer 'magit-status-mode))
-      (add-to-list 'magit-after-save-refresh-buffers it)
-      (add-hook 'post-command-hook 'magit-after-save-refresh-buffers))))
-
-(defun magit-maybe-save-repository-buffers ()
-  "Maybe save file-visiting buffers belonging to the current repository.
-Do so if `magit-save-repository-buffers' is non-nil.  You should
-not remove this from any hooks, instead set that variable to nil
-if you so desire."
-  (when (and magit-save-repository-buffers
-             (not disable-magit-save-buffers))
-    (setq disable-magit-save-buffers t)
-    (let ((msg (current-message)))
-      (magit-save-repository-buffers
-       (eq magit-save-repository-buffers 'dontask))
-      (when (and msg
-                 (current-message)
-                 (not (equal msg (current-message))))
-        (message "%s" msg)))))
-
-(add-hook 'magit-pre-refresh-hook #'magit-maybe-save-repository-buffers)
-(add-hook 'magit-pre-call-git-hook #'magit-maybe-save-repository-buffers)
-(add-hook 'magit-pre-start-git-hook #'magit-maybe-save-repository-buffers)
-
-(defvar-local magit-inhibit-refresh-save nil)
-
-(defun magit-save-repository-buffers (&optional arg)
-  "Save file-visiting buffers belonging to the current repository.
-After any buffer where `buffer-save-without-query' is non-nil
-is saved without asking, the user is asked about each modified
-buffer which visits a file in the current repository.  Optional
-argument (the prefix) non-nil means save all with no questions."
-  (interactive "P")
-  (when-let ((topdir (magit-rev-parse-safe "--show-toplevel")))
-    (let ((remote (file-remote-p topdir))
-          (save-some-buffers-action-alist
-           `((?Y (lambda (buffer)
-                   (with-current-buffer buffer
-                     (setq buffer-save-without-query t)
-                     (save-buffer)))
-                 "to save the current buffer and remember choice")
-             (?N (lambda (buffer)
-                   (with-current-buffer buffer
-                     (setq magit-inhibit-refresh-save t)))
-                 "to skip the current buffer and remember choice")
-             ,@save-some-buffers-action-alist)))
-      (save-some-buffers
-       arg (lambda ()
-             (and (not magit-inhibit-refresh-save)
-                  buffer-file-name
-                  (file-exists-p (file-name-directory buffer-file-name))
-                  ;; Avoid needlessly connecting to unrelated remotes.
-                  (equal (file-remote-p buffer-file-name)
-                         remote)
-                  (string-prefix-p topdir (file-truename buffer-file-name))
-                  (equal (magit-rev-parse-safe "--show-toplevel")
-                         topdir)))))))
-
-;;; Restore Window Configuration
-
-(defvar magit-inhibit-save-previous-winconf nil)
-
-(defvar-local magit-previous-window-configuration nil)
-(put 'magit-previous-window-configuration 'permanent-local t)
-
-(defun magit-save-window-configuration ()
-  "Save the current window configuration.
-
-Later, when the buffer is buried, it may be restored by
-`magit-restore-window-configuration'."
-  (if magit-inhibit-save-previous-winconf
-      (when (eq magit-inhibit-save-previous-winconf 'unset)
-        (setq magit-previous-window-configuration nil))
-    (unless (get-buffer-window (current-buffer) (selected-frame))
-      (setq magit-previous-window-configuration
-            (current-window-configuration)))))
-
-(defun magit-restore-window-configuration (&optional kill-buffer)
-  "Bury or kill the current buffer and restore previous window configuration."
-  (let ((winconf magit-previous-window-configuration)
-        (buffer (current-buffer))
-        (frame (selected-frame)))
-    (quit-window kill-buffer (selected-window))
-    (when (and winconf (equal frame (window-configuration-frame winconf)))
-      (set-window-configuration winconf)
-      (when (buffer-live-p buffer)
-        (with-current-buffer buffer
-          (setq magit-previous-window-configuration nil))))))
-
-;;; Buffer History
-
-(defun magit-go-backward ()
-  "Move backward in current buffer's history."
-  (interactive)
-  (if help-xref-stack
-      (help-xref-go-back (current-buffer))
-    (user-error "No previous entry in buffer's history")))
-
-(defun magit-go-forward ()
-  "Move forward in current buffer's history."
-  (interactive)
-  (if help-xref-forward-stack
-      (help-xref-go-forward (current-buffer))
-    (user-error "No next entry in buffer's history")))
-
-(defun magit-insert-xref-buttons (&optional _)
-  "Insert xref buttons."
-  (when (or help-xref-stack help-xref-forward-stack)
-    (when help-xref-stack
-      (magit-xref-insert-button help-back-label 'magit-xref-backward))
-    (when help-xref-forward-stack
-      (when help-xref-stack
-        (insert " "))
-      (magit-xref-insert-button help-forward-label 'magit-xref-forward))))
-
-(defun magit-xref-insert-button (label type)
-  (magit-insert-section (button label)
-    (insert-text-button label 'type type
-                        'help-args (list (current-buffer)))))
-
-(define-button-type 'magit-xref-backward
-  :supertype 'help-back
-  'mouse-face 'magit-section-highlight
-  'help-echo (purecopy "mouse-2, RET: go back to previous history entry"))
-
-(define-button-type 'magit-xref-forward
-  :supertype 'help-forward
-  'mouse-face 'magit-section-highlight
-  'help-echo (purecopy "mouse-2, RET: go back to next history entry"))
-
-(defun magit-xref-setup ()
-  "Insert backward/forward buttons if the major-mode supports it.
-Currently `magit-log-mode', `magit-reflog-mode',
-`magit-diff-mode', and `magit-revision-mode' support it"
-  (when (memq major-mode '(magit-log-mode
-                           magit-reflog-mode
-                           magit-diff-mode
-                           magit-revision-mode))
-    (when help-xref-stack-item
-      (push (cons (point) help-xref-stack-item) help-xref-stack)
-      (setq help-xref-forward-stack nil))
-    (when (called-interactively-p 'interactive)
-      (--when-let (nthcdr 10 help-xref-stack)
-        (setcdr it nil)))
-    (setq help-xref-stack-item
-          `(magit-xref-restore ,default-directory ,@magit-refresh-args))))
-
-(defun magit-xref-restore (&rest args)
-  (magit-xref-setup)
-  (setq default-directory  (car args))
-  (setq magit-refresh-args (cdr args))
-  (magit-refresh-buffer))
-
-;;; Repository-Local Cache
-
-(defvar magit-repository-local-cache nil
-  "Alist mapping `magit-toplevel' paths to alists of key/value pairs.")
-
-(defun magit-repository-local-repository ()
-  "Return the key for the current repository."
-  (or (bound-and-true-p magit--default-directory)
-      (magit-toplevel)))
-
-(defun magit-repository-local-set (key value &optional repository)
-  "Set the repository-local VALUE for KEY.
-
-Unless specified, REPOSITORY is the current buffer's repository.
-
-If REPOSITORY is nil (meaning there is no current repository),
-then the value is not cached, and we return nil."
-  (let* ((repokey (or repository (magit-repository-local-repository)))
-         (cache (assoc repokey magit-repository-local-cache)))
-    ;; Don't cache values for a nil REPOSITORY, as the 'set' and 'get'
-    ;; calls for some KEY may happen in unrelated contexts.
-    (when repokey
-      (if cache
-          (let ((keyvalue (assoc key (cdr cache))))
-            (if keyvalue
-                ;; Update pre-existing value for key.
-                (setcdr keyvalue value)
-              ;; No such key in repository-local cache.
-              (push (cons key value) (cdr cache))))
-        ;; No cache for this repository.
-        (push (cons repokey (list (cons key value)))
-              magit-repository-local-cache)))))
-
-(defun magit-repository-local-exists-p (key &optional repository)
-  "Non-nil when a repository-local value exists for KEY.
-
-Returns a (KEY . value) cons cell.
-
-The KEY is matched using `equal'.
-
-Unless specified, REPOSITORY is the current buffer's repository."
-  (let* ((repokey (or repository (magit-repository-local-repository)))
-         (cache (assoc repokey magit-repository-local-cache)))
-    (and cache
-         (assoc key (cdr cache)))))
-
-(defun magit-repository-local-get (key &optional default repository)
-  "Return the repository-local value for KEY.
-
-Return DEFAULT if no value for KEY exists.
-
-The KEY is matched using `equal'.
-
-Unless specified, REPOSITORY is the current buffer's repository."
-  (let ((keyvalue (magit-repository-local-exists-p key repository)))
-    (if keyvalue
-        (cdr keyvalue)
-      default)))
-
-(defun magit-repository-local-delete (key &optional repository)
-  "Delete the repository-local value for KEY.
-
-Unless specified, REPOSITORY is the current buffer's repository."
-  (let* ((repokey (or repository (magit-repository-local-repository)))
-         (cache (assoc repokey magit-repository-local-cache)))
-    (when cache
-      ;; There is no `assoc-delete-all'.
-      (setf (cdr cache)
-            (cl-delete key (cdr cache) :key #'car :test #'equal)))))
-
-(defun magit-zap-caches ()
-  "Zap caches for the current repository.
-Remove the repository's entry from `magit-repository-local-cache'
-and set `magit-section-visibility-cache' to nil in all of the
-repository's Magit buffers."
-  (interactive)
-  (magit-with-toplevel
-    (setq magit-repository-local-cache
-          (cl-delete default-directory
-                     magit-repository-local-cache
-                     :key #'car :test #'equal)))
-  (dolist (buffer (magit-mode-get-buffers))
-    (with-current-buffer buffer
-      (setq magit-section-visibility-cache nil))))
-
-;;; Utilities
-
-(defun magit-run-hook-with-benchmark (hook)
-  (when hook
-    (if magit-refresh-verbose
-        (let ((start (current-time)))
-          (message "Running %s..." hook)
-          (run-hooks hook)
-          (message "Running %s...done (%.3fs)" hook
-                   (float-time (time-subtract (current-time) start))))
-      (run-hooks hook))))
-
-(provide 'magit-mode)
-;;; magit-mode.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.elc
deleted file mode 100644
index 5c6ae790f014..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-mode.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.el
deleted file mode 100644
index 79b2fa531427..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.el
+++ /dev/null
@@ -1,201 +0,0 @@
-;;; magit-notes.el --- notes support  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for `git-notes'.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Popup
-
-;;;###autoload (autoload 'magit-notes-popup "magit" nil t)
-(magit-define-popup magit-notes-popup
-  "Popup console for notes commands."
-  :man-page "git-notes"
-  :variables '("Configure local settings"
-               (?c "core.notesRef"
-                   magit-set-core.notesRef
-                   magit-format-core.notesRef)
-               (?d "notes.displayRef"
-                   magit-set-notes.displayRef
-                   magit-format-notes.displayRef)
-               "Configure global settings"
-               (?C "core.notesRef"
-                   magit-set-global-core.notesRef
-                   magit-format-global-core.notesRef)
-               (?D "notes.displayRef"
-                   magit-set-global-notes.displayRef
-                   magit-format-global-notes.displayRef))
-  :switches '("Switch for prune"
-              (?n "Dry run"          "--dry-run"))
-  :options  '("Option for edit and remove"
-              (?r "Manipulate ref"   "--ref=" magit-notes-popup-read-ref)
-              "Option for merge"
-              (?s "Merge strategy"   "--strategy="))
-  :actions  '((?T "Edit"             magit-notes-edit)
-              (?r "Remove"           magit-notes-remove)
-              (?m "Merge"            magit-notes-merge)
-              (?p "Prune"            magit-notes-prune))
-  :sequence-actions '((?c "Commit merge" magit-notes-merge-commit)
-                      (?a "Abort merge"  magit-notes-merge-abort))
-  :sequence-predicate 'magit-notes-merging-p
-  :default-action 'magit-notes-edit)
-
-(defun magit-notes-merging-p ()
-  (let ((dir (magit-git-dir "NOTES_MERGE_WORKTREE")))
-    (and (file-directory-p dir)
-         (directory-files dir nil "^[^.]"))))
-
-(defun magit-format-core.notesRef ()
-  (magit--format-popup-variable:value "core.notesRef" 22))
-
-(defun magit-format-notes.displayRef ()
-  (magit--format-popup-variable:values "notes.displayRef" 22))
-
-(defun magit-format-global-core.notesRef ()
-  (magit--format-popup-variable:value "core.notesRef" 22 t))
-
-(defun magit-format-global-notes.displayRef ()
-  (magit--format-popup-variable:values "notes.displayRef" 22 t))
-
-;;; Commands
-
-(defun magit-notes-edit (commit &optional ref)
-  "Edit the note attached to COMMIT.
-REF is the notes ref used to store the notes.
-
-Interactively or when optional REF is nil use the value of Git
-variable `core.notesRef' or \"refs/notes/commits\" if that is
-undefined."
-  (interactive (magit-notes-read-args "Edit notes"))
-  (magit-run-git-with-editor "notes" (and ref (concat "--ref=" ref))
-                             "edit" commit))
-
-(defun magit-notes-remove (commit &optional ref)
-  "Remove the note attached to COMMIT.
-REF is the notes ref from which the note is removed.
-
-Interactively or when optional REF is nil use the value of Git
-variable `core.notesRef' or \"refs/notes/commits\" if that is
-undefined."
-  (interactive (magit-notes-read-args "Remove notes"))
-  (magit-run-git-with-editor "notes" (and ref (concat "--ref=" ref))
-                             "remove" commit))
-
-(defun magit-notes-merge (ref)
-  "Merge the notes ref REF into the current notes ref.
-
-The current notes ref is the value of Git variable
-`core.notesRef' or \"refs/notes/commits\" if that is undefined.
-
-When there are conflicts, then they have to be resolved in the
-temporary worktree \".git/NOTES_MERGE_WORKTREE\".  When
-done use `magit-notes-merge-commit' to finish.  To abort
-use `magit-notes-merge-abort'."
-  (interactive (list (magit-read-string-ns "Merge reference")))
-  (magit-run-git-with-editor "notes" "merge" ref))
-
-(defun magit-notes-merge-commit ()
-  "Commit the current notes ref merge.
-Also see `magit-notes-merge'."
-  (interactive)
-  (magit-run-git-with-editor "notes" "merge" "--commit"))
-
-(defun magit-notes-merge-abort ()
-  "Abort the current notes ref merge.
-Also see `magit-notes-merge'."
-  (interactive)
-  (magit-run-git-with-editor "notes" "merge" "--abort"))
-
-(defun magit-notes-prune (&optional dry-run)
-  "Remove notes about unreachable commits."
-  (interactive (list (and (member "--dry-run" (magit-notes-arguments)) t)))
-  (when dry-run
-    (magit-process-buffer))
-  (magit-run-git-with-editor "notes" "prune" (and dry-run "--dry-run")))
-
-(defun magit-set-core.notesRef (ref)
-  "Set the local value of `core.notesRef' to REF."
-  (interactive (list (magit-notes-read-ref "Set local core.notesRef")))
-  (magit-set ref "core.notesRef")
-  (magit-with-pre-popup-buffer
-    (magit-refresh)))
-
-(defun magit-set-global-core.notesRef (ref)
-  "Set the global value of `core.notesRef' to REF."
-  (interactive (list (magit-notes-read-ref "Set global core.notesRef")))
-  (magit-set ref "--global" "core.notesRef")
-  (magit-with-pre-popup-buffer
-    (magit-refresh)))
-
-(defun magit-set-notes.displayRef (refs)
-  "Set the local values of `notes.displayRef' to REFS."
-  (interactive (list (magit-notes-read-refs "Set local notes.displayRef")))
-  (magit-set-all refs "notes.displayRef")
-  (magit-with-pre-popup-buffer
-    (magit-refresh)))
-
-(defun magit-set-global-notes.displayRef (refs)
-  "Set the global values of `notes.displayRef' to REFS."
-  (interactive (list (magit-notes-read-refs "Set global notes.displayRef")))
-  (magit-set-all refs "--global" "notes.displayRef")
-  (magit-with-pre-popup-buffer
-    (magit-refresh)))
-
-(defun magit-notes-read-ref (prompt)
-  (--when-let (magit-completing-read
-               prompt (magit-list-notes-refnames) nil nil
-               (--when-let (magit-get "core.notesRef")
-                 (if (string-prefix-p "refs/notes/" it)
-                     (substring it 11)
-                   it)))
-    (if (string-prefix-p "refs/" it)
-        it
-      (concat "refs/notes/" it))))
-
-(defun magit-notes-read-refs (prompt)
-  (mapcar (lambda (ref)
-            (if (string-prefix-p "refs/" ref)
-                ref
-              (concat "refs/notes/" ref)))
-          (completing-read-multiple
-           (concat prompt ": ")
-           (magit-list-notes-refnames) nil nil
-           (mapconcat (lambda (ref)
-                        (if (string-prefix-p "refs/notes/" ref)
-                            (substring ref 11)
-                          ref))
-                      (magit-get-all "notes.displayRef")
-                      ","))))
-
-(defun magit-notes-read-args (prompt)
- (list (magit-read-branch-or-commit prompt (magit-stash-at-point))
-       (--when-let (--first (string-match "^--ref=\\(.+\\)" it)
-                            (magit-notes-arguments))
-         (match-string 1 it))))
-
-(provide 'magit-notes)
-;;; magit-notes.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.elc
deleted file mode 100644
index 763dcff44f58..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-notes.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.el
deleted file mode 100644
index 57ab7c090f48..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; magit-obsolete.el --- obsolete definitions  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library defines aliases for obsolete variables and functions.
-
-;;; Code:
-
-(require 'magit)
-
-(provide 'magit-obsolete)
-;;; magit-obsolete.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.elc
deleted file mode 100644
index a53f23629c46..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-obsolete.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-pkg.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-pkg.el
deleted file mode 100644
index 0f232fe5579f..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-pkg.el
+++ /dev/null
@@ -1,11 +0,0 @@
-(define-package "magit" "20180913.1247" "A Git porcelain inside Emacs."
-  '((emacs "25.1")
-    (async "20180527")
-    (dash "20180413")
-    (ghub "20180417")
-    (git-commit "20180602")
-    (magit-popup "20180509")
-    (with-editor "20180414")))
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.el
deleted file mode 100644
index 5daa0c2804b0..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.el
+++ /dev/null
@@ -1,1121 +0,0 @@
-;;; magit-process.el --- process functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements the tools used to run Git for side-effects.
-
-;; Note that the functions used to run Git and then consume its
-;; output, are defined in `magit-git.el'.  There's a bit of overlap
-;; though.
-
-;;; Code:
-
-(require 'ansi-color)
-(require 'cl-lib)
-(require 'dash)
-
-(require 'with-editor)
-(require 'magit-utils)
-(require 'magit-section)
-(require 'magit-git)
-(require 'magit-mode)
-
-(declare-function auth-source-search "auth-source"
-                  (&rest spec &key max require create delete &allow-other-keys))
-
-;;; Options
-
-(defcustom magit-process-connection-type (not (eq system-type 'cygwin))
-  "Connection type used for the Git process.
-
-If nil, use pipes: this is usually more efficient, and works on Cygwin.
-If t, use ptys: this enables Magit to prompt for passphrases when needed."
-  :group 'magit-process
-  :type '(choice (const :tag "pipe" nil)
-                 (const :tag "pty" t)))
-
-(defcustom magit-need-cygwin-noglob
-  (and (eq system-type 'windows-nt)
-       (with-temp-buffer
-         (let ((process-environment
-                (append magit-git-environment process-environment)))
-           (condition-case e
-               (process-file magit-git-executable
-                             nil (current-buffer) nil
-                             "-c" "alias.echo=!echo" "echo" "x{0}")
-             (file-error
-              (lwarn 'magit-process :warning
-                     "Could not run Git: %S" e))))
-         (equal "x0\n" (buffer-string))))
-  "Whether to use a workaround for Cygwin's globbing behavior.
-
-If non-nil, add environment variables to `process-environment' to
-prevent the git.exe distributed by Cygwin and MSYS2 from
-attempting to perform glob expansion when called from a native
-Windows build of Emacs.  See #2246."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-process
-  :type '(choice (const :tag "Yes" t)
-                 (const :tag "No" nil)))
-
-(defcustom magit-process-popup-time -1
-  "Popup the process buffer if a command takes longer than this many seconds."
-  :group 'magit-process
-  :type '(choice (const :tag "Never" -1)
-                 (const :tag "Immediately" 0)
-                 (integer :tag "After this many seconds")))
-
-(defcustom magit-process-log-max 32
-  "Maximum number of sections to keep in a process log buffer.
-When adding a new section would go beyond the limit set here,
-then the older half of the sections are remove.  Sections that
-belong to processes that are still running are never removed.
-When this is nil, no sections are ever removed."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-process
-  :type '(choice (const :tag "Never remove old sections" nil) integer))
-
-(defcustom magit-process-error-tooltip-max-lines 20
-  "The number of lines for `magit-process-error-lines' to return.
-
-These are displayed in a tooltip for `mode-line-process' errors.
-
-If `magit-process-error-tooltip-max-lines' is nil, the tooltip
-displays the text of `magit-process-error-summary' instead."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-process
-  :type '(choice (const :tag "Use summary line" nil)
-                 integer))
-
-(defcustom magit-credential-cache-daemon-socket
-  (--some (pcase-let ((`(,prog . ,args) (split-string it)))
-            (if (and prog
-                     (string-match-p
-                      "\\`\\(?:\\(?:/.*/\\)?git-credential-\\)?cache\\'" prog))
-                (or (cl-loop for (opt val) on args
-                             if (string= opt "--socket")
-                             return val)
-                    (expand-file-name "~/.git-credential-cache/socket"))))
-          ;; Note: `magit-process-file' is not yet defined when
-          ;; evaluating this form, so we use `process-lines'.
-          (ignore-errors
-            (let ((process-environment
-                   (append magit-git-environment process-environment)))
-              (process-lines magit-git-executable
-                             "config" "--get-all" "credential.helper"))))
-  "If non-nil, start a credential cache daemon using this socket.
-
-When using Git's cache credential helper in the normal way, Emacs
-sends a SIGHUP to the credential daemon after the git subprocess
-has exited, causing the daemon to also quit.  This can be avoided
-by starting the `git-credential-cache--daemon' process directly
-from Emacs.
-
-The function `magit-maybe-start-credential-cache-daemon' takes
-care of starting the daemon if necessary, using the value of this
-option as the socket.  If this option is nil, then it does not
-start any daemon.  Likewise if another daemon is already running,
-then it starts no new daemon.  This function has to be a member
-of the hook variable `magit-credential-hook' for this to work.
-If an error occurs while starting the daemon, most likely because
-the necessary executable is missing, then the function removes
-itself from the hook, to avoid further futile attempts."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-process
-  :type '(choice (file  :tag "Socket")
-                 (const :tag "Don't start a cache daemon" nil)))
-
-(defcustom magit-process-yes-or-no-prompt-regexp
-  " [\[(]\\([Yy]\\(?:es\\)?\\)[/|]\\([Nn]o?\\)[\])] ?[?:] ?$"
-  "Regexp matching Yes-or-No prompts of Git and its subprocesses."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-process
-  :type 'regexp)
-
-(defcustom magit-process-password-prompt-regexps
-  '("^\\(Enter \\)?[Pp]assphrase\\( for \\(RSA \\)?key '.*'\\)?: ?$"
-    ;; match-group 99 is used to identify a host
-    "^\\(Enter \\)?[Pp]assword\\( for '\\(?99:.*\\)'\\)?: ?$"
-    "^.*'s password: ?$"
-    "^Yubikey for .*: ?$"
-    "^Enter PIN for .*: ?$")
-  "List of regexps matching password prompts of Git and its subprocesses.
-Also see `magit-process-find-password-functions'."
-  :package-version '(magit . "2.8.0")
-  :group 'magit-process
-  :type '(repeat (regexp)))
-
-(defcustom magit-process-find-password-functions nil
-  "List of functions to try in sequence to get a password.
-
-These functions may be called when git asks for a password, which
-is detected using `magit-process-password-prompt-regexps'.  They
-are called if and only if matching the prompt resulted in the
-value of the 99th submatch to be non-nil.  Therefore users can
-control for which prompts these functions should be called by
-putting the host name in the 99th submatch, or not.
-
-If the functions are called, then they are called in the order
-given, with the host name as only argument, until one of them
-returns non-nil.  If they are not called or none of them returns
-non-nil, then the password is read from the user instead."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-process
-  :type 'hook
-  :options '(magit-process-password-auth-source))
-
-(defcustom magit-process-username-prompt-regexps
-  '("^Username for '.*': ?$")
-  "List of regexps matching username prompts of Git and its subprocesses."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-process
-  :type '(repeat (regexp)))
-
-(defcustom magit-process-ensure-unix-line-ending t
-  "Whether Magit should ensure a unix coding system when talking to Git."
-  :package-version '(magit . "2.6.0")
-  :group 'magit-process
-  :type 'boolean)
-
-(defcustom magit-process-display-mode-line-error t
-  "Whether Magit should retain and highlight process errors in the mode line."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-process
-  :type 'boolean)
-
-(defface magit-process-ok
-  '((t :inherit magit-section-heading :foreground "green"))
-  "Face for zero exit-status."
-  :group 'magit-faces)
-
-(defface magit-process-ng
-  '((t :inherit magit-section-heading :foreground "red"))
-  "Face for non-zero exit-status."
-  :group 'magit-faces)
-
-(defface magit-mode-line-process
-  '((t :inherit mode-line-emphasis))
-  "Face for `mode-line-process' status when Git is running for side-effects."
-  :group 'magit-faces)
-
-(defface magit-mode-line-process-error
-  '((t :inherit error))
-  "Face for `mode-line-process' error status.
-
-Used when `magit-process-display-mode-line-error' is non-nil."
-  :group 'magit-faces)
-
-;;; Process Mode
-
-(defvar magit-process-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    map)
-  "Keymap for `magit-process-mode'.")
-
-(define-derived-mode magit-process-mode magit-mode "Magit Process"
-  "Mode for looking at Git process output."
-  :group 'magit-process
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-prev-index-position-function
-        'magit-imenu--process-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        'magit-imenu--process-extract-index-name-function))
-
-(defun magit-process-buffer (&optional nodisplay)
-  "Display the current repository's process buffer.
-
-If that buffer doesn't exist yet, then create it.
-Non-interactively return the buffer and unless
-optional NODISPLAY is non-nil also display it."
-  (interactive)
-  (let ((topdir (magit-toplevel)))
-    (unless topdir
-      (magit--with-safe-default-directory nil
-        (setq topdir default-directory)
-        (let (prev)
-          (while (not (equal topdir prev))
-            (setq prev topdir)
-            (setq topdir (file-name-directory (directory-file-name topdir)))))))
-    (let ((buffer (or (--first (with-current-buffer it
-                                 (and (eq major-mode 'magit-process-mode)
-                                      (equal default-directory topdir)))
-                               (buffer-list))
-                      (let ((default-directory topdir))
-                        (magit-generate-new-buffer 'magit-process-mode)))))
-      (with-current-buffer buffer
-        (if magit-root-section
-            (when magit-process-log-max
-              (magit-process-truncate-log))
-          (magit-process-mode)
-          (let ((inhibit-read-only t)
-                (magit-insert-section--parent  nil)
-                (magit-insert-section--oldroot nil))
-            (make-local-variable 'text-property-default-nonsticky)
-            (magit-insert-section (processbuf)
-              (insert "\n")))))
-      (unless nodisplay
-        (magit-display-buffer buffer))
-      buffer)))
-
-(defun magit-process-kill ()
-  "Kill the process at point."
-  (interactive)
-  (magit-section-when process
-    (let ((process (oref it value)))
-      (unless (eq (process-status process) 'run)
-        (user-error "Process isn't running"))
-      (magit-confirm 'kill-process)
-      (kill-process process))))
-
-;;; Synchronous Processes
-
-(defvar magit-process-raise-error nil)
-
-(defun magit-git (&rest args)
-  "Call Git synchronously in a separate process, for side-effects.
-
-Option `magit-git-executable' specifies the Git executable.
-The arguments ARGS specify arguments to Git, they are flattened
-before use.
-
-Process output goes into a new section in the buffer returned by
-`magit-process-buffer'.  If Git exits with a non-zero status,
-then raise an error."
-  (let ((magit-process-raise-error t))
-    (magit-call-git args)))
-
-(defun magit-run-git (&rest args)
-  "Call Git synchronously in a separate process, and refresh.
-
-Option `magit-git-executable' specifies the Git executable and
-option `magit-git-global-arguments' specifies constant arguments.
-The arguments ARGS specify arguments to Git, they are flattened
-before use.
-
-After Git returns, the current buffer (if it is a Magit buffer)
-as well as the current repository's status buffer are refreshed.
-
-Process output goes into a new section in the buffer returned by
-`magit-process-buffer'."
-  (let ((magit--refresh-cache (list (cons 0 0))))
-    (magit-call-git args)
-    (when (member (car args) '("init" "clone"))
-      ;; Creating a new repository invalidates the cache.
-      (setq magit--refresh-cache nil))
-    (magit-refresh)))
-
-(defvar magit-pre-call-git-hook nil)
-
-(defun magit-call-git (&rest args)
-  "Call Git synchronously in a separate process.
-
-Option `magit-git-executable' specifies the Git executable and
-option `magit-git-global-arguments' specifies constant arguments.
-The arguments ARGS specify arguments to Git, they are flattened
-before use.
-
-Process output goes into a new section in the buffer returned by
-`magit-process-buffer'."
-  (run-hooks 'magit-pre-call-git-hook)
-  (let ((default-process-coding-system (magit--process-coding-system)))
-    (apply #'magit-call-process magit-git-executable
-           (magit-process-git-arguments args))))
-
-(defun magit-call-process (program &rest args)
-  "Call PROGRAM synchronously in a separate process.
-Process output goes into a new section in the buffer returned by
-`magit-process-buffer'."
-  (pcase-let ((`(,process-buf . ,section)
-               (magit-process-setup program args)))
-    (magit-process-finish
-     (let ((inhibit-read-only t))
-       (apply #'magit-process-file program nil process-buf nil args))
-     process-buf (current-buffer) default-directory section)))
-
-(defun magit-process-file (process &optional infile buffer display &rest args)
-  "Process files synchronously in a separate process.
-Identical to `process-file' but temporarily enable Cygwin's
-\"noglob\" option during the call and ensure unix eol
-conversion."
-  (let ((process-environment (magit-process-environment))
-        (default-process-coding-system (magit--process-coding-system)))
-    (apply #'process-file process infile buffer display args)))
-
-(defun magit-process-environment ()
-  ;; The various w32 hacks are only applicable when running on the
-  ;; local machine.  As of Emacs 25.1, a local binding of
-  ;; process-environment different from the top-level value affects
-  ;; the environment used in
-  ;; tramp-sh-handle-{start-file-process,process-file}.
-  (let ((local (not (file-remote-p default-directory))))
-    (append magit-git-environment
-            (and local
-                 (cdr (assoc magit-git-executable magit-git-w32-path-hack)))
-            (and local magit-need-cygwin-noglob
-                 (mapcar (lambda (var)
-                           (concat var "=" (--if-let (getenv var)
-                                               (concat it " noglob")
-                                             "noglob")))
-                         '("CYGWIN" "MSYS")))
-            process-environment)))
-
-(defvar magit-this-process nil)
-
-(defun magit-run-git-with-input (&rest args)
-  "Call Git in a separate process.
-ARGS is flattened and then used as arguments to Git.
-
-The current buffer's content is used as the process' standard
-input.
-
-Option `magit-git-executable' specifies the Git executable and
-option `magit-git-global-arguments' specifies constant arguments.
-The remaining arguments ARGS specify arguments to Git, they are
-flattened before use."
-  (declare (indent 1))
-  (when (eq system-type 'windows-nt)
-    ;; On w32, git expects UTF-8 encoded input, ignore any user
-    ;; configuration telling us otherwise (see #3250).
-    (encode-coding-region (point-min) (point-max) 'utf-8-unix))
-  (if (file-remote-p default-directory)
-      ;; We lack `process-file-region', so fall back to asynch +
-      ;; waiting in remote case.
-      (progn
-        (magit-start-git (current-buffer) args)
-        (while (and magit-this-process
-                    (eq (process-status magit-this-process) 'run))
-          (sleep-for 0.005)))
-    (run-hooks 'magit-pre-call-git-hook)
-    (pcase-let* ((process-environment (magit-process-environment))
-                 (default-process-coding-system (magit--process-coding-system))
-                 (flat-args (magit-process-git-arguments args))
-                 (`(,process-buf . ,section)
-                  (magit-process-setup magit-git-executable flat-args))
-                 (inhibit-read-only t))
-      (magit-process-finish
-       (apply #'call-process-region (point-min) (point-max)
-              magit-git-executable nil process-buf nil flat-args)
-       process-buf nil default-directory section))))
-
-(defun magit-run-git-with-logfile (file &rest args)
-  "Call Git in a separate process and log its output to FILE.
-This function might have a short halflive."
-  (apply #'magit-process-file magit-git-executable nil `(:file ,file) nil
-         (magit-process-git-arguments args))
-  (magit-refresh))
-
-;;; Asynchronous Processes
-
-(defun magit-run-git-async (&rest args)
-  "Start Git, prepare for refresh, and return the process object.
-ARGS is flattened and then used as arguments to Git.
-
-Display the command line arguments in the echo area.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer
-and still alive), as well as the respective Magit status buffer.
-
-See `magit-start-process' for more information."
-  (message "Running %s %s" magit-git-executable
-           (let ((m (mapconcat #'identity (-flatten args) " ")))
-             (remove-list-of-text-properties 0 (length m) '(face) m)
-             m))
-  (magit-start-git nil args))
-
-(defun magit-run-git-with-editor (&rest args)
-  "Export GIT_EDITOR and start Git.
-Also prepare for refresh and return the process object.
-ARGS is flattened and then used as arguments to Git.
-
-Display the command line arguments in the echo area.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer
-and still alive), as well as the respective Magit status buffer.
-
-See `magit-start-process' and `with-editor' for more information."
-  (magit--record-separated-gitdir)
-  (magit-with-editor (magit-run-git-async args)))
-
-(defun magit-run-git-sequencer (&rest args)
-  "Export GIT_EDITOR and start Git.
-Also prepare for refresh and return the process object.
-ARGS is flattened and then used as arguments to Git.
-
-Display the command line arguments in the echo area.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer
-and still alive), as well as the respective Magit status buffer.
-If the sequence stops at a commit, make the section representing
-that commit the current section by moving `point' there.
-
-See `magit-start-process' and `with-editor' for more information."
-  (apply #'magit-run-git-with-editor args)
-  (set-process-sentinel magit-this-process #'magit-sequencer-process-sentinel)
-  magit-this-process)
-
-(defvar magit-pre-start-git-hook nil)
-
-(defun magit-start-git (input &rest args)
-  "Start Git, prepare for refresh, and return the process object.
-
-If INPUT is non-nil, it has to be a buffer or the name of an
-existing buffer.  The buffer content becomes the processes
-standard input.
-
-Option `magit-git-executable' specifies the Git executable and
-option `magit-git-global-arguments' specifies constant arguments.
-The remaining arguments ARGS specify arguments to Git, they are
-flattened before use.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer
-and still alive), as well as the respective Magit status buffer.
-
-See `magit-start-process' for more information."
-  (run-hooks 'magit-pre-start-git-hook)
-  (let ((default-process-coding-system (magit--process-coding-system)))
-    (apply #'magit-start-process magit-git-executable input
-           (magit-process-git-arguments args))))
-
-(defun magit-start-process (program &optional input &rest args)
-  "Start PROGRAM, prepare for refresh, and return the process object.
-
-If optional argument INPUT is non-nil, it has to be a buffer or
-the name of an existing buffer.  The buffer content becomes the
-processes standard input.
-
-The process is started using `start-file-process' and then setup
-to use the sentinel `magit-process-sentinel' and the filter
-`magit-process-filter'.  Information required by these functions
-is stored in the process object.  When this function returns the
-process has not started to run yet so it is possible to override
-the sentinel and filter.
-
-After the process returns, `magit-process-sentinel' refreshes the
-buffer that was current when `magit-start-process' was called (if
-it is a Magit buffer and still alive), as well as the respective
-Magit status buffer."
-  (pcase-let*
-      ((`(,process-buf . ,section)
-        (magit-process-setup program args))
-       (process
-        (let ((process-connection-type
-               ;; Don't use a pty, because it would set icrnl
-               ;; which would modify the input (issue #20).
-               (and (not input) magit-process-connection-type))
-              (process-environment (magit-process-environment))
-              (default-process-coding-system (magit--process-coding-system)))
-          (apply #'start-file-process
-                 (file-name-nondirectory program)
-                 process-buf program args))))
-    (with-editor-set-process-filter process #'magit-process-filter)
-    (set-process-sentinel process #'magit-process-sentinel)
-    (set-process-buffer   process process-buf)
-    (when (eq system-type 'windows-nt)
-      ;; On w32, git expects UTF-8 encoded input, ignore any user
-      ;; configuration telling us otherwise.
-      (set-process-coding-system process 'utf-8-unix))
-    (process-put process 'section section)
-    (process-put process 'command-buf (current-buffer))
-    (process-put process 'default-dir default-directory)
-    (when inhibit-magit-refresh
-      (process-put process 'inhibit-refresh t))
-    (oset section process process)
-    (with-current-buffer process-buf
-      (set-marker (process-mark process) (point)))
-    (when input
-      (with-current-buffer input
-        (process-send-region process (point-min) (point-max))
-        (process-send-eof    process)))
-    (setq magit-this-process process)
-    (oset section value process)
-    (magit-process-display-buffer process)
-    process))
-
-(defun magit-parse-git-async (&rest args)
-  (setq args (magit-process-git-arguments args))
-  (let ((command-buf (current-buffer))
-        (process-buf (generate-new-buffer " *temp*"))
-        (toplevel (magit-toplevel)))
-    (with-current-buffer process-buf
-      (setq default-directory toplevel)
-      (let ((process
-             (let ((process-connection-type nil)
-                   (process-environment (magit-process-environment))
-                   (default-process-coding-system
-                     (magit--process-coding-system)))
-               (apply #'start-file-process "git" process-buf
-                      magit-git-executable args))))
-        (process-put process 'command-buf command-buf)
-        (process-put process 'parsed (point))
-        (setq magit-this-process process)
-        process))))
-
-;;; Process Internals
-
-(defun magit-process-setup (program args)
-  (magit-process-set-mode-line program args)
-  (let ((pwd default-directory)
-        (buf (magit-process-buffer t)))
-    (cons buf (with-current-buffer buf
-                (prog1 (magit-process-insert-section pwd program args nil nil)
-                  (backward-char 1))))))
-
-(defun magit-process-insert-section (pwd program args &optional errcode errlog)
-  (let ((inhibit-read-only t)
-        (magit-insert-section--parent magit-root-section)
-        (magit-insert-section--oldroot nil))
-    (goto-char (1- (point-max)))
-    (magit-insert-section (process)
-      (insert (if errcode
-                  (format "%3s " (propertize (number-to-string errcode)
-                                             'face 'magit-process-ng))
-                "run "))
-      (unless (equal (expand-file-name pwd)
-                     (expand-file-name default-directory))
-        (insert (file-relative-name pwd default-directory) ?\s))
-      (cond
-       ((and args (equal program magit-git-executable))
-        (setq args (-split-at (length magit-git-global-arguments) args))
-        (insert (propertize (file-name-nondirectory program)
-                            'face 'magit-section-heading) " ")
-        (insert (propertize (char-to-string magit-ellipsis)
-                            'face 'magit-section-heading
-                            'help-echo (mapconcat #'identity (car args) " ")))
-        (insert " ")
-        (insert (propertize (mapconcat #'shell-quote-argument (cadr args) " ")
-                            'face 'magit-section-heading)))
-       ((and args (equal program shell-file-name))
-        (insert (propertize (cadr args) 'face 'magit-section-heading)))
-       (t
-        (insert (propertize (file-name-nondirectory program)
-                            'face 'magit-section-heading) " ")
-        (insert (propertize (mapconcat #'shell-quote-argument args " ")
-                            'face 'magit-section-heading))))
-      (magit-insert-heading)
-      (when errlog
-        (insert-file-contents errlog)
-        (goto-char (1- (point-max))))
-      (insert "\n"))))
-
-(defun magit-process-truncate-log ()
-  (let* ((head nil)
-         (tail (oref magit-root-section children))
-         (count (length tail)))
-    (when (> (1+ count) magit-process-log-max)
-      (while (and (cdr tail)
-                  (> count (/ magit-process-log-max 2)))
-        (let* ((inhibit-read-only t)
-               (section (car tail))
-               (process (oref section process)))
-          (cond ((not process))
-                ((memq (process-status process) '(exit signal))
-                 (delete-region (oref section start)
-                                (1+ (oref section end)))
-                 (cl-decf count))
-                (t
-                 (push section head))))
-        (pop tail))
-      (oset magit-root-section children
-            (nconc (reverse head) tail)))))
-
-(defun magit-process-sentinel (process event)
-  "Default sentinel used by `magit-start-process'."
-  (when (memq (process-status process) '(exit signal))
-    (setq event (substring event 0 -1))
-    (when (string-match "^finished" event)
-      (message (concat (capitalize (process-name process)) " finished")))
-    (magit-process-finish process)
-    (when (eq process magit-this-process)
-      (setq magit-this-process nil))
-    (unless (process-get process 'inhibit-refresh)
-      (let ((command-buf (process-get process 'command-buf)))
-        (if (buffer-live-p command-buf)
-            (with-current-buffer command-buf
-              (magit-refresh))
-          (with-temp-buffer
-            (setq default-directory (process-get process 'default-dir))
-            (magit-refresh)))))))
-
-(defun magit-sequencer-process-sentinel (process event)
-  "Special sentinel used by `magit-run-git-sequencer'."
-  (when (memq (process-status process) '(exit signal))
-    (magit-process-sentinel process event)
-    (when-let ((process-buf (process-buffer process)))
-      (when (buffer-live-p process-buf)
-        (when-let ((status-buf (with-current-buffer process-buf
-                                 (magit-mode-get-buffer 'magit-status-mode))))
-          (with-current-buffer status-buf
-            (--when-let
-                (magit-get-section
-                 `((commit . ,(magit-rev-parse "HEAD"))
-                   (,(pcase (car (cadr (-split-at
-                                        (1+ (length magit-git-global-arguments))
-                                        (process-command process))))
-                       ((or "rebase" "am")   'rebase-sequence)
-                       ((or "cherry-pick" "revert") 'sequence)))
-                   (status)))
-              (goto-char (oref it start))
-              (magit-section-update-highlight))))))))
-
-(defun magit-process-filter (proc string)
-  "Default filter used by `magit-start-process'."
-  (with-current-buffer (process-buffer proc)
-    (let ((inhibit-read-only t))
-      (magit-process-yes-or-no-prompt proc string)
-      (magit-process-username-prompt  proc string)
-      (magit-process-password-prompt  proc string)
-      (goto-char (process-mark proc))
-      (setq string (propertize string 'magit-section
-                               (process-get proc 'section)))
-      ;; Find last ^M in string.  If one was found, ignore
-      ;; everything before it and delete the current line.
-      (let ((ret-pos (length string)))
-        (while (and (>= (cl-decf ret-pos) 0)
-                    (/= ?\r (aref string ret-pos))))
-        (if (< ret-pos 0)
-            (insert string)
-          (delete-region (line-beginning-position) (point))
-          (insert (substring string (1+ ret-pos)))))
-      (set-marker (process-mark proc) (point)))))
-
-(defmacro magit-process-kill-on-abort (proc &rest body)
-  (declare (indent 1) (debug (form body)))
-  (let ((map (cl-gensym)))
-    `(let ((,map (make-sparse-keymap)))
-       (set-keymap-parent ,map minibuffer-local-map)
-       (define-key ,map "\C-g"
-         (lambda ()
-           (interactive)
-           (ignore-errors (kill-process ,proc))
-           (abort-recursive-edit)))
-       (let ((minibuffer-local-map ,map))
-         ,@body))))
-
-(defun magit-process-yes-or-no-prompt (process string)
-  "Forward Yes-or-No prompts to the user."
-  (when-let ((beg (string-match magit-process-yes-or-no-prompt-regexp string)))
-    (let ((max-mini-window-height 30))
-      (process-send-string
-       process
-       (downcase
-        (concat
-         (match-string
-          (if (save-match-data
-                (magit-process-kill-on-abort process
-                  (yes-or-no-p (substring string 0 beg)))) 1 2)
-          string)
-         "\n"))))))
-
-(defun magit-process-password-auth-source (key)
-  "Use `auth-source-search' to get a password.
-If found, return the password.  Otherwise, return nil.
-
-To use this function add it to the appropriate hook
-  (add-hook 'magit-process-find-password-functions
-            'magit-process-password-auth-source)
-
-KEY typically derives from a prompt such as:
-  Password for 'https://tarsius@bitbucket.org'
-in which case it would be the string
-  tarsius@bitbucket.org
-which matches the ~/.authinfo.gpg entry
-  machine bitbucket.org login tarsius password 12345
-or iff that is undefined, for backward compatibility
-  machine tarsius@bitbucket.org password 12345"
-  (message "key: %S" key)
-  (require 'auth-source)
-  (let ((secret
-         (plist-get
-          (car (or (and (string-match "\\([^@]+\\)@\\([^@]+\\)" key)
-                        (auth-source-search :max 1
-                                            :host (match-string 2 key)
-                                            :login (match-string 1 key)))
-                   (auth-source-search :max 1 :host key)))
-          :secret)))
-    (if (functionp secret)
-        (funcall secret)
-      secret)))
-
-(defun magit-process-password-prompt (process string)
-  "Find a password based on prompt STRING and send it to git.
-Use `magit-process-password-prompt-regexps' to find a known
-prompt.  If and only if one is found, then call functions in
-`magit-process-find-password-functions' until one of them returns
-the password.  If all function return nil, then read the password
-from the user."
-  (--when-let (magit-process-match-prompt
-               magit-process-password-prompt-regexps string)
-    (process-send-string
-     process (magit-process-kill-on-abort process
-               (concat (or (--when-let (match-string 99 string)
-                             (run-hook-with-args-until-success
-                              'magit-process-find-password-functions it))
-                           (read-passwd it))
-                       "\n")))))
-
-(defun magit-process-username-prompt (process string)
-  "Forward username prompts to the user."
-  (--when-let (magit-process-match-prompt
-               magit-process-username-prompt-regexps string)
-    (process-send-string
-     process (magit-process-kill-on-abort process
-               (concat (read-string it nil nil (user-login-name)) "\n")))))
-
-(defun magit-process-match-prompt (prompts string)
-  "Match STRING against PROMPTS and set match data.
-Return the matched string suffixed with \": \", if needed."
-  (when (--any-p (string-match it string) prompts)
-    (let ((prompt (match-string 0 string)))
-      (cond ((string-suffix-p ": " prompt) prompt)
-            ((string-suffix-p ":"  prompt) (concat prompt " "))
-            (t                             (concat prompt ": "))))))
-
-(defun magit--process-coding-system ()
-  (let ((fro (or magit-git-output-coding-system
-                 (car default-process-coding-system)))
-        (to (cdr default-process-coding-system)))
-    (if magit-process-ensure-unix-line-ending
-        (cons (coding-system-change-eol-conversion fro 'unix)
-              (coding-system-change-eol-conversion to 'unix))
-      (cons fro to))))
-
-(defvar magit-credential-hook nil
-  "Hook run before Git needs credentials.")
-
-(defvar magit-credential-cache-daemon-process nil)
-
-(defun magit-maybe-start-credential-cache-daemon ()
-  "Maybe start a `git-credential-cache--daemon' process.
-
-If such a process is already running or if the value of option
-`magit-credential-cache-daemon-socket' is nil, then do nothing.
-Otherwise start the process passing the value of that options
-as argument."
-  (unless (or (not magit-credential-cache-daemon-socket)
-              (process-live-p magit-credential-cache-daemon-process)
-              (memq magit-credential-cache-daemon-process
-                    (list-system-processes)))
-    (setq magit-credential-cache-daemon-process
-          (or (--first (let* ((attr (process-attributes it))
-                              (comm (cdr (assq 'comm attr)))
-                              (user (cdr (assq 'user attr))))
-                         (and (string= comm "git-credential-cache--daemon")
-                              (string= user user-login-name)))
-                       (list-system-processes))
-              (condition-case nil
-                  (start-process "git-credential-cache--daemon"
-                                 " *git-credential-cache--daemon*"
-                                 magit-git-executable
-                                 "credential-cache--daemon"
-                                 magit-credential-cache-daemon-socket)
-                ;; Some Git implementations (e.g. Windows) won't have
-                ;; this program; if we fail the first time, stop trying.
-                ((debug error)
-                 (remove-hook 'magit-credential-hook
-                              #'magit-maybe-start-credential-cache-daemon)))))))
-
-(add-hook 'magit-credential-hook #'magit-maybe-start-credential-cache-daemon)
-
-(defun tramp-sh-handle-start-file-process--magit-tramp-process-environment
-    (fn name buffer program &rest args)
-  (if magit-tramp-process-environment
-      (apply fn name buffer
-             (car magit-tramp-process-environment)
-             (append (cdr magit-tramp-process-environment)
-                     (cons program args)))
-    (apply fn name buffer program args)))
-
-(advice-add 'tramp-sh-handle-start-file-process :around
-            'tramp-sh-handle-start-file-process--magit-tramp-process-environment)
-
-(defun tramp-sh-handle-process-file--magit-tramp-process-environment
-    (fn program &optional infile destination display &rest args)
-  (if magit-tramp-process-environment
-      (apply fn "env" infile destination display
-             (append magit-tramp-process-environment
-                     (cons program args)))
-    (apply fn program infile destination display args)))
-
-(advice-add 'tramp-sh-handle-process-file :around
-            'tramp-sh-handle-process-file--magit-tramp-process-environment)
-
-(defvar magit-mode-line-process-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "<mode-line> <mouse-1>")
-      'magit-process-buffer)
-    map)
-  "Keymap for `mode-line-process'.")
-
-(defun magit-process-set-mode-line (program args)
-  "Display the git command (sans arguments) in the mode line."
-  (when (equal program magit-git-executable)
-    (setq args (nthcdr (length magit-git-global-arguments) args)))
-  (let ((str (concat " " (propertize
-                          (concat (file-name-nondirectory program)
-                                  (and args (concat " " (car args))))
-                          'mouse-face 'highlight
-                          'keymap magit-mode-line-process-map
-                          'help-echo "mouse-1: Show process buffer"
-                          'face 'magit-mode-line-process))))
-    (magit-repository-local-set 'mode-line-process str)
-    (dolist (buf (magit-mode-get-buffers))
-      (with-current-buffer buf
-        (setq mode-line-process str)))
-    (force-mode-line-update t)))
-
-(defun magit-process-set-mode-line-error-status (&optional error str)
-  "Apply an error face to the string set by `magit-process-set-mode-line'.
-
-If ERROR is supplied, include it in the `mode-line-process' tooltip.
-
-If STR is supplied, it replaces the `mode-line-process' text."
-  (setq str (or str (magit-repository-local-get 'mode-line-process)))
-  (when str
-    (setq error (format "%smouse-1: Show process buffer"
-                        (if (stringp error)
-                            (concat error "\n\n")
-                          "")))
-    (setq str (concat " " (propertize
-                           (substring-no-properties str 1)
-                           'mouse-face 'highlight
-                           'keymap magit-mode-line-process-map
-                           'help-echo error
-                           'face 'magit-mode-line-process-error)))
-    (magit-repository-local-set 'mode-line-process str)
-    (dolist (buf (magit-mode-get-buffers))
-      (with-current-buffer buf
-        (setq mode-line-process str)))
-    (force-mode-line-update t)
-    ;; We remove any error status from the mode line when a magit
-    ;; buffer is refreshed (see `magit-refresh-buffer'), but we must
-    ;; ensure that we ignore any refreshes during the remainder of the
-    ;; current command -- otherwise a newly-set error status would be
-    ;; removed before it was seen.  We set a flag which prevents the
-    ;; status from being removed prior to the next command, so that
-    ;; the error status is guaranteed to remain visible until then.
-    (let ((repokey (magit-repository-local-repository)))
-      ;; The following closure captures the repokey value, and is
-      ;; added to `pre-command-hook'.
-      (cl-labels ((enable-magit-process-unset-mode-line
-                   () ;; Remove ourself from the hook variable, so
-                      ;; that we only run once.
-                   (remove-hook 'pre-command-hook
-                                #'enable-magit-process-unset-mode-line)
-                   ;; Clear the inhibit flag for the repository in
-                   ;; which we set it.
-                   (magit-repository-local-set
-                    'inhibit-magit-process-unset-mode-line nil repokey)))
-        ;; Set the inhibit flag until the next command is invoked.
-        (magit-repository-local-set
-         'inhibit-magit-process-unset-mode-line t repokey)
-        (add-hook 'pre-command-hook
-                  #'enable-magit-process-unset-mode-line)))))
-
-(defun magit-process-unset-mode-line-error-status ()
-  "Remove any current error status from the mode line."
-  (let ((status (or mode-line-process
-                    (magit-repository-local-get 'mode-line-process))))
-    (when (and status
-               (eq (get-text-property 1 'face status)
-                   'magit-mode-line-process-error))
-      (magit-process-unset-mode-line))))
-
-(defun magit-process-unset-mode-line ()
-  "Remove the git command from the mode line."
-  (unless (magit-repository-local-get 'inhibit-magit-process-unset-mode-line)
-    (magit-repository-local-set 'mode-line-process nil)
-    (dolist (buf (magit-mode-get-buffers))
-      (with-current-buffer buf (setq mode-line-process nil)))
-    (force-mode-line-update t)))
-
-(defvar magit-process-error-message-regexps
-  (list "^\\*ERROR\\*: Canceled by user$"
-        "^\\(?:error\\|fatal\\|git\\): \\(.*\\)$"
-        "^\\(Cannot rebase:.*\\)$"))
-
-(define-error 'magit-git-error "Git error")
-
-(defun magit-process-error-summary (process-buf section)
-  "A one-line error summary from the given SECTION."
-  (or (and (buffer-live-p process-buf)
-           (with-current-buffer process-buf
-             (and (oref section content)
-                  (save-excursion
-                    (goto-char (oref section end))
-                    (run-hook-wrapped
-                     'magit-process-error-message-regexps
-                     (lambda (re)
-                       (save-excursion
-                         (and (re-search-backward
-                               re (oref section start) t)
-                              (or (match-string-no-properties 1)
-                                  (and (not magit-process-raise-error)
-                                       'suppressed))))))))))
-      "Git failed"))
-
-(defun magit-process-error-tooltip (process-buf section)
-  "Returns the text from SECTION of the PROCESS-BUF buffer.
-
-Limited by `magit-process-error-tooltip-max-lines'."
-  (and (integerp magit-process-error-tooltip-max-lines)
-       (> magit-process-error-tooltip-max-lines 0)
-       (buffer-live-p process-buf)
-       (with-current-buffer process-buf
-         (save-excursion
-           (goto-char (or (oref section content)
-                          (oref section start)))
-           (buffer-substring-no-properties
-            (point)
-            (save-excursion
-              (forward-line magit-process-error-tooltip-max-lines)
-              (goto-char
-               (if (> (point) (oref section end))
-                   (oref section end)
-                 (point)))
-              ;; Remove any trailing whitespace.
-              (when (re-search-backward "[^[:space:]\n]"
-                                        (oref section start) t)
-                (forward-char 1))
-              (point)))))))
-
-(defvar-local magit-this-error nil)
-
-(defvar magit-process-finish-apply-ansi-colors nil)
-
-(defun magit-process-finish (arg &optional process-buf command-buf
-                                 default-dir section)
-  (unless (integerp arg)
-    (setq process-buf (process-buffer arg))
-    (setq command-buf (process-get arg 'command-buf))
-    (setq default-dir (process-get arg 'default-dir))
-    (setq section     (process-get arg 'section))
-    (setq arg         (process-exit-status arg)))
-  (when (fboundp 'dired-uncache)
-    (dired-uncache default-dir))
-  (when (buffer-live-p process-buf)
-    (with-current-buffer process-buf
-      (let ((inhibit-read-only t)
-            (marker (oref section start)))
-        (goto-char marker)
-        (save-excursion
-          (delete-char 3)
-          (set-marker-insertion-type marker nil)
-          (insert (propertize (format "%3s" arg)
-                              'magit-section section
-                              'face (if (= arg 0)
-                                        'magit-process-ok
-                                      'magit-process-ng)))
-          (set-marker-insertion-type marker t))
-        (when magit-process-finish-apply-ansi-colors
-          (ansi-color-apply-on-region (oref section content)
-                                      (oref section end)))
-        (if (= (oref section end)
-               (+ (line-end-position) 2))
-            (save-excursion
-              (goto-char (1+ (line-end-position)))
-              (delete-char -1)
-              (oset section content nil))
-          (let ((buf (magit-process-buffer t)))
-            (when (and (= arg 0)
-                       (not (--any-p (eq (window-buffer it) buf)
-                                     (window-list))))
-              (magit-section-hide section)))))))
-  (if (= arg 0)
-      ;; Unset the `mode-line-process' value upon success.
-      (magit-process-unset-mode-line)
-    ;; Otherwise process the error.
-    (let ((msg (magit-process-error-summary process-buf section)))
-      ;; Change `mode-line-process' to an error face upon failure.
-      (if magit-process-display-mode-line-error
-          (magit-process-set-mode-line-error-status
-           (or (magit-process-error-tooltip process-buf section)
-               msg))
-        (magit-process-unset-mode-line))
-      ;; Either signal the error, or else display the error summary in
-      ;; the status buffer and with a message in the echo area.
-      (cond
-       (magit-process-raise-error
-        (signal 'magit-git-error (list (format "%s (in %s)" msg default-dir))))
-       ((not (eq msg 'suppressed))
-        (when (buffer-live-p process-buf)
-          (with-current-buffer process-buf
-            (when-let ((status-buf (magit-mode-get-buffer 'magit-status-mode)))
-              (with-current-buffer status-buf
-                (setq magit-this-error msg)))))
-        (message "%s ... [%s buffer %s for details]" msg
-                 (if-let ((key (and (buffer-live-p command-buf)
-                                    (with-current-buffer command-buf
-                                      (car (where-is-internal
-                                            'magit-process-buffer))))))
-                     (format "Hit %s to see" (key-description key))
-                   "See")
-                 (buffer-name process-buf))))))
-  arg)
-
-(defun magit-process-display-buffer (process)
-  (when (process-live-p process)
-    (let ((buf (process-buffer process)))
-      (cond ((not (buffer-live-p buf)))
-            ((= magit-process-popup-time 0)
-             (if (minibufferp)
-                 (switch-to-buffer-other-window buf)
-               (pop-to-buffer buf)))
-            ((> magit-process-popup-time 0)
-             (run-with-timer magit-process-popup-time nil
-                             (lambda (p)
-                               (when (eq (process-status p) 'run)
-                                 (let ((buf (process-buffer p)))
-                                   (when (buffer-live-p buf)
-                                     (if (minibufferp)
-                                         (switch-to-buffer-other-window buf)
-                                       (pop-to-buffer buf))))))
-                             process))))))
-
-(defun magit--log-action (summary line list)
-  (let (heading lines)
-    (if (cdr list)
-        (progn (setq heading (funcall summary list))
-               (setq lines (mapcar line list)))
-      (setq heading (funcall line (car list))))
-    (with-current-buffer (magit-process-buffer t)
-      (goto-char (1- (point-max)))
-      (let ((inhibit-read-only t))
-        (magit-insert-section (message)
-          (magit-insert-heading (concat "  * " heading))
-          (when lines
-            (dolist (line lines)
-              (insert line "\n"))
-            (insert "\n"))))
-      (let ((inhibit-message t))
-        (when heading
-          (setq lines (cons heading lines)))
-        (message (mapconcat #'identity lines "\n"))))))
-
-(provide 'magit-process)
-;;; magit-process.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.elc
deleted file mode 100644
index 251ac82b16a9..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-process.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.el
deleted file mode 100644
index b18cc27c2a3e..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.el
+++ /dev/null
@@ -1,748 +0,0 @@
-;;; magit-refs.el --- listing references  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for listing references in a buffer.
-
-;;; Code:
-
-(require 'magit)
-
-(defvar bookmark-make-record-function)
-
-;;; Options
-
-(defgroup magit-refs nil
-  "Inspect and manipulate Git branches and tags."
-  :link '(info-link "(magit)References Buffer")
-  :group 'magit-modes)
-
-(defcustom magit-refs-mode-hook nil
-  "Hook run after entering Magit-Refs mode."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refs
-  :type 'hook)
-
-(defcustom magit-refs-sections-hook
-  '(magit-insert-error-header
-    magit-insert-branch-description
-    magit-insert-local-branches
-    magit-insert-remote-branches
-    magit-insert-tags)
-  "Hook run to insert sections into a references buffer."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refs
-  :type 'hook)
-
-(defcustom magit-refs-show-commit-count nil
-  "Whether to show commit counts in Magit-Refs mode buffers.
-
-all    Show counts for branches and tags.
-branch Show counts for branches only.
-nil    Never show counts.
-
-To change the value in an existing buffer use the command
-`magit-refs-show-commit-count'"
-  :package-version '(magit . "2.1.0")
-  :group 'magit-refs
-  :safe (lambda (val) (memq val '(all branch nil)))
-  :type '(choice (const all    :tag "For branches and tags")
-                 (const branch :tag "For branches only")
-                 (const nil    :tag "Never")))
-(put 'magit-refs-show-commit-count 'safe-local-variable 'symbolp)
-(put 'magit-refs-show-commit-count 'permanent-local t)
-
-(defcustom magit-refs-pad-commit-counts nil
-  "Whether to pad all counts on all sides in `magit-refs-mode' buffers.
-
-If this is nil, then some commit counts are displayed right next
-to one of the branches that appear next to the count, without any
-space in between.  This might look bad if the branch name faces
-look too similar to `magit-dimmed'.
-
-If this is non-nil, then spaces are placed on both sides of all
-commit counts."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-refs
-  :type 'boolean)
-
-(defvar magit-refs-show-push-remote nil
-  "Whether to show the push-remotes of local branches.
-Also show the commits that the local branch is ahead and behind
-the push-target.  Unfortunately there is a bug in Git that makes
-this useless (the commits ahead and behind the upstream are
-shown), so this isn't enabled yet.")
-
-(defcustom magit-refs-show-remote-prefix nil
-  "Whether to show the remote prefix in lists of remote branches.
-
-This is redundant because the name of the remote is already shown
-in the heading preceeding the list of its branches."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-refs
-  :type 'boolean)
-
-(defcustom magit-refs-margin
-  (list nil
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width nil
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-refs-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-refs
-  :group 'magit-margin
-  :safe (lambda (val) (memq val '(all branch nil)))
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-refs-mode))
-
-(defcustom magit-refs-margin-for-tags nil
-  "Whether to show information about tags in the margin.
-
-This is disabled by default because it is slow if there are many
-tags."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-refs
-  :group 'magit-margin
-  :type 'boolean)
-
-(defcustom magit-refs-primary-column-width (cons 16 32)
-  "Width of the focus column in `magit-refs-mode' buffers.
-
-The primary column is the column that contains the name of the
-branch that the current row is about.
-
-If this is an integer, then the column is that many columns wide.
-Otherwise it has to be a cons-cell of two integers.  The first
-specifies the minimal width, the second the maximal width.  In that
-case the actual width is determined using the length of the names
-of the shown local branches.  (Remote branches and tags are not
-taken into account when calculating to optimal width.)"
-  :package-version '(magit . "2.12.0")
-  :group 'magit-refs
-  :type '(choice (integer :tag "Constant wide")
-                 (cons    :tag "Wide constrains"
-                          (integer :tag "Minimum")
-                          (integer :tag "Maximum"))))
-
-(defcustom magit-refs-focus-column-width 5
-  "Width of the focus column in `magit-refs-mode' buffers.
-
-The focus column is the first column, which marks one
-branch (usually the current branch) as the focused branch using
-\"*\" or \"@\".  For each other reference, this column optionally
-shows how many commits it is ahead of the focused branch and \"<\", or
-if it isn't ahead then the commits it is behind and \">\", or if it
-isn't behind either, then a \"=\".
-
-This column may also display only \"*\" or \"@\" for the focused
-branch, in which case this option is ignored.  Use \"L v\" to
-change the verbosity of this column."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-refs
-  :type 'integer)
-
-(defcustom magit-refs-filter-alist nil
-  "Alist controlling which refs are omitted from `magit-refs-mode' buffers.
-
-All keys are tried in order until one matches.  Then its value
-is used and subsequent elements are ignored.  If the value is
-non-nil, then the reference is displayed, otherwise it is not.
-If no element matches, then the reference is displayed.
-
-A key can either be a regular expression that the refname has
-to match, or a function that takes the refname as only argument
-and returns a boolean.  Contrary to how they are displayed in
-the buffer, for comparison each tag begins with \"tags/\" and
-each remote branch with \"<remote>/\"."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-refs
-  :type '(alist :key-type   (choice  :tag "Key" regexp function)
-                :value-type (boolean :tag "Value"
-                                     :on  "show (non-nil)"
-                                     :off "omit (nil)")))
-
-(defcustom magit-visit-ref-behavior nil
-  "Control how `magit-visit-ref' behaves in `magit-refs-mode' buffers.
-
-By default `magit-visit-ref' behaves like `magit-show-commit',
-in all buffers, including `magit-refs-mode' buffers.  When the
-type of the section at point is `commit' then \"RET\" is bound to
-`magit-show-commit', and when the type is either `branch' or
-`tag' then it is bound to `magit-visit-ref'.
-
-\"RET\" is one of Magit's most essential keys and at least by
-default it should behave consistently across all of Magit,
-especially because users quickly learn that it does something
-very harmless; it shows more information about the thing at point
-in another buffer.
-
-However \"RET\" used to behave differently in `magit-refs-mode'
-buffers, doing surprising things, some of which cannot really be
-described as \"visit this thing\".  If you have grown accustomed
-to such inconsistent, but to you useful, behavior, then you can
-restore that by adding one or more of the below symbols to the
-value of this option.  But keep in mind that by doing so you
-don't only introduce inconsistencies, you also lose some
-functionality and might have to resort to `M-x magit-show-commit'
-to get it back.
-
-`magit-visit-ref' looks for these symbols in the order in which
-they are described here.  If the presence of a symbol applies to
-the current situation, then the symbols that follow do not affect
-the outcome.
-
-`focus-on-ref'
-
-  With a prefix argument update the buffer to show commit counts
-  and lists of cherry commits relative to the reference at point
-  instead of relative to the current buffer or `HEAD'.
-
-  Instead of adding this symbol, consider pressing \"C-u y o RET\".
-
-`create-branch'
-
-  If point is on a remote branch, then create a new local branch
-  with the same name, use the remote branch as its upstream, and
-  then check out the local branch.
-
-  Instead of adding this symbol, consider pressing \"b c RET RET\",
-  like you would do in other buffers.
-
-`checkout-any'
-
-  Check out the reference at point.  If that reference is a tag
-  or a remote branch, then this results in a detached `HEAD'.
-
-  Instead of adding this symbol, consider pressing \"b b RET\",
-  like you would do in other buffers.
-
-`checkout-branch'
-
-  Check out the local branch at point.
-
-  Instead of adding this symbol, consider pressing \"b b RET\",
-  like you would do in other buffers."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-refs
-  :group 'magit-commands
-  :options '(focus-on-ref create-branch checkout-any checkout-branch)
-  :type '(list :convert-widget custom-hook-convert-widget))
-
-;;; Mode
-
-(defvar magit-refs-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    (define-key map "\C-y" 'magit-refs-set-show-commit-count)
-    (define-key map "L"    'magit-margin-popup)
-    map)
-  "Keymap for `magit-refs-mode'.")
-
-(define-derived-mode magit-refs-mode magit-mode "Magit Refs"
-  "Mode which lists and compares references.
-
-This mode is documented in info node `(magit)References Buffer'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-section-toggle] to expand or hide the section at point.
-Type \\[magit-visit-thing] or \\[magit-diff-show-or-scroll-up] \
-to visit the commit or branch at point.
-
-Type \\[magit-branch-popup] to see available branch commands.
-Type \\[magit-merge-popup] to merge the branch or commit at point.
-Type \\[magit-cherry-pick-popup] to apply the commit at point.
-Type \\[magit-reset] to reset `HEAD' to the commit at point.
-
-\\{magit-refs-mode-map}"
-  :group 'magit-refs
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-create-index-function
-        #'magit-imenu--refs-create-index-function)
-  (setq-local bookmark-make-record-function
-              #'magit-bookmark--refs-make-record))
-
-(defun magit-refs-refresh-buffer (ref &optional args)
-  (setq magit-set-buffer-margin-refresh (not (magit-buffer-margin-p)))
-  (unless ref
-    (setq ref "HEAD"))
-  (unless (magit-rev-verify ref)
-    (setq magit-refs-show-commit-count nil))
-  (magit-set-header-line-format
-   (format "%s %s" ref (mapconcat #'identity args " ")))
-  (magit-insert-section (branchbuf)
-    (magit-run-section-hook 'magit-refs-sections-hook))
-  (add-hook 'kill-buffer-hook 'magit-preserve-section-visibility-cache))
-
-;;; Commands
-
-(defcustom magit-show-refs-arguments nil
-  "The arguments used in `magit-refs-mode' buffers."
-  :group 'magit-git-arguments
-  :group 'magit-refs
-  :type '(repeat (string :tag "Argument")))
-
-(defvar magit-show-refs-popup
-  (list
-   :variable 'magit-show-refs-arguments
-   :man-page "git-branch"
-   :switches '((?m "Merged to HEAD"            "--merged")
-               (?M "Merged to master"          "--merged=master")
-               (?n "Not merged to HEAD"        "--no-merged")
-               (?N "Not merged to master"      "--no-merged=master"))
-   :options  '((?c "Contains"   "--contains="  magit-read-branch-or-commit)
-               (?m "Merged"     "--merged="    magit-read-branch-or-commit)
-               (?n "Not merged" "--no-merged=" magit-read-branch-or-commit)
-               (?s "Sort"       "--sort="      magit-read-ref-sort))
-   :actions  '((?y "Show refs, comparing them with HEAD"
-                   magit-show-refs-head)
-               (?c "Show refs, comparing them with current branch"
-                   magit-show-refs-current)
-               (?o "Show refs, comparing them with other branch"
-                   magit-show-refs))
-   :default-action 'magit-show-refs-head
-   :max-action-columns 1
-   :use-prefix (lambda ()
-                 (if (derived-mode-p 'magit-refs-mode)
-                     (if current-prefix-arg 'popup 'default)
-                   'popup))))
-
-(magit-define-popup-keys-deferred 'magit-show-refs-popup)
-
-(defun magit-read-ref-sort (prompt initial-input)
-  (magit-completing-read prompt
-                         '("-committerdate" "-authordate"
-                           "committerdate" "authordate")
-                         nil nil initial-input))
-
-(defun magit-show-refs-get-buffer-args ()
-  (cond ((and magit-use-sticky-arguments
-              (derived-mode-p 'magit-refs-mode))
-         (cadr magit-refresh-args))
-        ((and (eq magit-use-sticky-arguments t)
-              (--when-let (magit-mode-get-buffer 'magit-refs-mode)
-                (with-current-buffer it
-                  (cadr magit-refresh-args)))))
-        (t
-         (default-value 'magit-show-refs-arguments))))
-
-(defun magit-show-refs-arguments ()
-  (if (eq magit-current-popup 'magit-show-refs-popup)
-      magit-current-popup-args
-    (magit-show-refs-get-buffer-args)))
-
-;;;###autoload
-(defun magit-show-refs-popup (&optional arg)
-  "Popup console for `magit-show-refs'."
-  (interactive "P")
-  (let ((magit-show-refs-arguments (magit-show-refs-get-buffer-args)))
-    (magit-invoke-popup 'magit-show-refs-popup nil arg)))
-
-;;;###autoload
-(defun magit-show-refs-head (&optional args)
-  "List and compare references in a dedicated buffer.
-Refs are compared with `HEAD'."
-  (interactive (list (magit-show-refs-arguments)))
-  (magit-show-refs nil args))
-
-;;;###autoload
-(defun magit-show-refs-current (&optional args)
-  "List and compare references in a dedicated buffer.
-Refs are compared with the current branch or `HEAD' if
-it is detached."
-  (interactive (list (magit-show-refs-arguments)))
-  (magit-show-refs (magit-get-current-branch) args))
-
-;;;###autoload
-(defun magit-show-refs (&optional ref args)
-  "List and compare references in a dedicated buffer.
-Refs are compared with a branch read from the user."
-  (interactive (list (magit-read-other-branch "Compare with")
-                     (magit-show-refs-arguments)))
-  (magit-mode-setup #'magit-refs-mode ref args))
-
-(defun magit-refs-set-show-commit-count ()
-  "Change for which refs the commit count is shown."
-  (interactive)
-  (setq-local magit-refs-show-commit-count
-              (magit-read-char-case "Show commit counts for " nil
-                (?a "[a]ll refs" 'all)
-                (?b "[b]ranches only" t)
-                (?n "[n]othing" nil)))
-  (magit-refresh))
-
-(defun magit-visit-ref ()
-  "Visit the reference or revision at point in another buffer.
-If there is no revision at point or with a prefix argument prompt
-for a revision.
-
-This command behaves just like `magit-show-commit', except if
-point is on a reference in a `magit-refs-mode' buffer (a buffer
-listing branches and tags), in which case the behavior may be
-different, but only if you have customized the option
-`magit-visit-ref-behavior' (which see)."
-  (interactive)
-  (if (and (derived-mode-p 'magit-refs-mode)
-           (magit-section-match '(branch tag)))
-      (let ((ref (oref (magit-current-section) value)))
-        (cond (current-prefix-arg
-               (cond ((memq 'focus-on-ref magit-visit-ref-behavior)
-                      (magit-show-refs ref))
-                     (magit-visit-ref-behavior
-                      ;; Don't prompt for commit to visit.
-                      (let ((current-prefix-arg nil))
-                        (call-interactively #'magit-show-commit)))))
-              ((and (memq 'create-branch magit-visit-ref-behavior)
-                    (magit-section-match [branch remote]))
-               (let ((branch (cdr (magit-split-branch-name ref))))
-                 (if (magit-branch-p branch)
-                     (if (magit-rev-eq branch ref)
-                         (magit-call-git "checkout" branch)
-                       (setq branch (propertize branch 'face 'magit-branch-local))
-                       (setq ref (propertize ref 'face 'magit-branch-remote))
-                       (pcase (prog1 (read-char-choice (format (propertize "\
-Branch %s already exists.
-  [c]heckout %s as-is
-  [r]reset %s to %s and checkout %s
-  [a]bort " 'face 'minibuffer-prompt) branch branch branch ref branch)
-                                                       '(?c ?r ?a))
-                                (message "")) ; otherwise prompt sticks
-                         (?c (magit-call-git "checkout" branch))
-                         (?r (magit-call-git "checkout" "-B" branch ref))
-                         (?a (user-error "Abort"))))
-                   (magit-call-git "checkout" "-b" branch ref))
-                 (setcar magit-refresh-args branch)
-                 (magit-refresh)))
-              ((or (memq 'checkout-any magit-visit-ref-behavior)
-                   (and (memq 'checkout-branch magit-visit-ref-behavior)
-                        (magit-section-match [branch local])))
-               (magit-call-git "checkout" ref)
-               (setcar magit-refresh-args ref)
-               (magit-refresh))
-              (t
-               (call-interactively #'magit-show-commit))))
-    (call-interactively #'magit-show-commit)))
-
-;;; Sections
-
-(defvar magit-remote-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-delete-thing] 'magit-remote-remove)
-    (define-key map "R"                        'magit-remote-rename)
-    map)
-  "Keymap for `remote' sections.")
-
-(defvar magit-branch-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]  'magit-visit-ref)
-    (define-key map [remap magit-delete-thing] 'magit-branch-delete)
-    (define-key map "R"                        'magit-branch-rename)
-    map)
-  "Keymap for `branch' sections.")
-
-(defvar magit-tag-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]  'magit-visit-ref)
-    (define-key map [remap magit-delete-thing] 'magit-tag-delete)
-    map)
-  "Keymap for `tag' sections.")
-
-(defun magit-insert-branch-description ()
-  "Insert header containing the description of the current branch.
-Insert a header line with the name and description of the
-current branch.  The description is taken from the Git variable
-`branch.<NAME>.description'; if that is undefined then no header
-line is inserted at all."
-  (when-let ((branch (magit-get-current-branch))
-             (desc (magit-get "branch" branch "description"))
-             (desc (split-string desc "\n")))
-    (when (equal (car (last desc)) "")
-      (setq desc (butlast desc)))
-    (magit-insert-section (branchdesc branch t)
-      (magit-insert-heading branch ": " (car desc))
-      (when (cdr desc)
-        (insert (mapconcat 'identity (cdr desc) "\n"))
-        (insert "\n\n")))))
-
-(defun magit-insert-tags ()
-  "Insert sections showing all tags."
-  (when-let ((tags (magit-git-lines "tag" "--list" "-n"
-                                    (cadr magit-refresh-args))))
-    (let ((_head (magit-rev-parse "HEAD")))
-      (magit-insert-section (tags)
-        (magit-insert-heading "Tags:")
-        (dolist (tag tags)
-          (string-match "^\\([^ \t]+\\)[ \t]+\\([^ \t\n].*\\)?" tag)
-          (let ((tag (match-string 1 tag))
-                (msg (match-string 2 tag)))
-            (when (magit-refs--insert-refname-p tag)
-              (magit-insert-section section (tag tag t)
-                (magit-insert-heading
-                  (magit-refs--format-focus-column tag 'tag)
-                  (propertize tag 'face 'magit-tag)
-                  (make-string (max 1 (- magit-refs-primary-column-width
-                                         (length tag)))
-                               ?\s)
-                  (and msg (magit-log-propertize-keywords nil msg)))
-                (when (and magit-refs-margin-for-tags (magit-buffer-margin-p))
-                  (magit-refs--format-margin tag))
-                (magit-refs--insert-cherry-commits tag section)))))
-        (insert ?\n)
-        (magit-make-margin-overlay nil t)))))
-
-(defun magit-insert-remote-branches ()
-  "Insert sections showing all remote-tracking branches."
-  (dolist (remote (magit-list-remotes))
-    (magit-insert-section (remote remote)
-      (magit-insert-heading
-        (let ((pull (magit-get "remote" remote "url"))
-              (push (magit-get "remote" remote "pushurl")))
-          (format (propertize "Remote %s (%s):" 'face 'magit-section-heading)
-                  (propertize remote 'face 'magit-branch-remote)
-                  (concat pull (and pull push ", ") push))))
-      (let (head)
-        (dolist (line (magit-git-lines "for-each-ref" "--format=\
-%(symref:short)%00%(refname:short)%00%(subject)"
-                                       (concat "refs/remotes/" remote)
-                                       (cadr magit-refresh-args)))
-          (pcase-let ((`(,head-branch ,branch ,msg)
-                       (-replace "" nil (split-string line "\0"))))
-            (if head-branch
-                (progn (cl-assert (equal branch (concat remote "/HEAD")))
-                       (setq head head-branch))
-              (when (magit-refs--insert-refname-p branch)
-                (magit-insert-section section (branch branch t)
-                  (let ((headp (equal branch head))
-                        (abbrev (if magit-refs-show-remote-prefix
-                                    branch
-                                  (substring branch (1+ (length remote))))))
-                    (magit-insert-heading
-                      (magit-refs--format-focus-column branch)
-                      (propertize abbrev 'face
-                                  (if headp
-                                      'magit-branch-remote-head
-                                    'magit-branch-remote))
-                      (make-string (max 1 (- magit-refs-primary-column-width
-                                             (length abbrev)))
-                                   ?\s)
-                      (and msg (magit-log-propertize-keywords nil msg))))
-                  (when (magit-buffer-margin-p)
-                    (magit-refs--format-margin branch))
-                  (magit-refs--insert-cherry-commits branch section)))))))
-      (insert ?\n)
-      (magit-make-margin-overlay nil t))))
-
-(defun magit-insert-local-branches ()
-  "Insert sections showing all local branches."
-  (magit-insert-section (local nil)
-    (magit-insert-heading "Branches:")
-    (dolist (line (magit-refs--format-local-branches))
-      (pcase-let ((`(,branch . ,strings) line))
-        (magit-insert-section section
-          ((eval (if branch 'branch 'commit))
-           (or branch (magit-rev-parse "HEAD"))
-           t)
-          (apply #'magit-insert-heading strings)
-          (when (magit-buffer-margin-p)
-            (magit-refs--format-margin branch))
-          (magit-refs--insert-cherry-commits branch section))))
-    (insert ?\n)
-    (magit-make-margin-overlay nil t)))
-
-(defun magit-refs--format-local-branches ()
-  (let ((lines (-keep 'magit-refs--format-local-branch
-                      (magit-git-lines
-                       "for-each-ref"
-                       (concat "--format=\
-%(HEAD)%00%(refname:short)%00\
-%(upstream:short)%00%(upstream)%00%(upstream:track)%00"
-                               (if magit-refs-show-push-remote "\
-%(push:remotename)%00%(push)%00%(push:track)%00%(subject)"
-                                 "%00%00%00%(subject)"))
-                       "refs/heads"
-                       (cadr magit-refresh-args)))))
-    (unless (magit-get-current-branch)
-      (push (magit-refs--format-local-branch
-             (concat "*\0\0\0\0\0\0\0" (magit-rev-format "%s")))
-            lines))
-    (setq-local magit-refs-primary-column-width
-                (let ((def (default-value 'magit-refs-primary-column-width)))
-                  (if (atom def)
-                      def
-                    (pcase-let ((`(,min . ,max) def))
-                      (min max (apply #'max min (mapcar #'car lines)))))))
-    (mapcar (pcase-lambda (`(,_ ,branch ,focus ,branch-desc ,u:ahead ,p:ahead
-                                ,u:behind ,upstream ,p:behind ,push ,msg))
-              (list branch focus branch-desc u:ahead p:ahead
-                    (make-string (max 1 (- magit-refs-primary-column-width
-                                           (length (concat branch-desc
-                                                           u:ahead
-                                                           p:ahead
-                                                           u:behind))))
-                                 ?\s)
-                    u:behind upstream p:behind push
-                    msg))
-            lines)))
-
-(defun magit-refs--format-local-branch (line)
-  (pcase-let ((`(,head ,branch ,upstream ,u:ref ,u:track
-                       ,push ,p:ref ,p:track ,msg)
-               (-replace "" nil (split-string line "\0"))))
-    (when (or (not branch)
-              (magit-refs--insert-refname-p branch))
-      (let* ((headp (equal head "*"))
-             (pushp (and push
-                         magit-refs-show-push-remote
-                         (magit-rev-verify p:ref)
-                         (not (equal p:ref u:ref))))
-             (branch-desc (propertize (or branch "(detached)")
-                                      'face (if (and headp branch)
-                                                'magit-branch-current
-                                              'magit-branch-local)))
-             (u:ahead  (and u:track
-                            (string-match "ahead \\([0-9]+\\)" u:track)
-                            (propertize
-                             (concat (and magit-refs-pad-commit-counts " ")
-                                     (match-string 1 u:track)
-                                     ">")
-                             'face 'magit-dimmed)))
-             (u:behind (and u:track
-                            (string-match "behind \\([0-9]+\\)" u:track)
-                            (propertize
-                             (concat "<"
-                                     (match-string 1 u:track)
-                                     (and magit-refs-pad-commit-counts " "))
-                             'face 'magit-dimmed)))
-             (p:ahead  (and pushp p:track
-                            (string-match "ahead \\([0-9]+\\)" p:track)
-                            (propertize
-                             (concat (match-string 1 p:track)
-                                     ">"
-                                     (and magit-refs-pad-commit-counts " "))
-                             'face 'magit-branch-remote)))
-             (p:behind (and pushp p:track
-                            (string-match "behind \\([0-9]+\\)" p:track)
-                            (propertize
-                             (concat "<"
-                                     (match-string 1 p:track)
-                                     (and magit-refs-pad-commit-counts " "))
-                             'face 'magit-dimmed))))
-        (list (1+ (length (concat branch-desc u:ahead p:ahead u:behind)))
-              branch
-              (magit-refs--format-focus-column branch headp)
-              branch-desc u:ahead p:ahead u:behind
-              (and upstream
-                   (concat (propertize
-                            upstream 'face
-                            (cond ((equal u:track "[gone]")
-                                   'error)
-                                  ((string-prefix-p "refs/heads/" u:ref)
-                                   'magit-branch-local)
-                                  (t
-                                   'magit-branch-remote)))
-                           " "))
-              (and pushp
-                   (concat p:behind
-                           (propertize push 'face 'magit-branch-remote)
-                           " "))
-              (and msg (magit-log-propertize-keywords nil msg)))))))
-
-(defun magit-refs--format-focus-column (ref &optional type)
-  (let ((focus (car magit-refresh-args))
-        (width (if magit-refs-show-commit-count
-                   magit-refs-focus-column-width
-                 1)))
-    (format
-     (format "%%%ss " width)
-     (cond ((or (equal ref focus)
-                (and (eq type t)
-                     (eq focus nil)))
-            (propertize (concat (if focus "@" "*")
-                                (make-string (1- width) ?\s))
-                        'face 'magit-section-heading))
-           ((if (eq type 'tag)
-                (eq magit-refs-show-commit-count 'all)
-              magit-refs-show-commit-count)
-            (pcase-let ((`(,behind ,ahead)
-                         (magit-rev-diff-count
-                          (or (car magit-refresh-args) "HEAD")
-                          ref)))
-              (propertize
-               (cond ((> ahead  0) (concat "<" (number-to-string ahead)))
-                     ((> behind 0) (concat (number-to-string behind) ">"))
-                     (t "="))
-               'face 'magit-dimmed)))
-           (t "")))))
-
-(defun magit-refs--insert-refname-p (refname)
-  (--if-let (-first (pcase-lambda (`(,key . ,_))
-                      (if (functionp key)
-                          (funcall key refname)
-                        (string-match-p key refname)))
-                    magit-refs-filter-alist)
-      (cdr it)
-    t))
-
-(defun magit-refs--insert-cherry-commits (ref section)
-  (if (oref section hidden)
-      (oset section washer
-            (apply-partially #'magit-refs--insert-cherry-commits-1 ref section))
-    (magit-refs--insert-cherry-commits-1 ref section)))
-
-(defun magit-refs--insert-cherry-commits-1 (ref _section)
-  (let ((start (point))
-        (magit-insert-section--current nil))
-    (magit-git-wash (apply-partially 'magit-log-wash-log 'cherry)
-      "cherry" "-v" (magit-abbrev-arg)
-      (or (car magit-refresh-args) "HEAD")
-      ref magit-refresh-args)
-    (unless (= (point) start)
-      (magit-make-margin-overlay nil t))))
-
-(defun magit-refs--format-margin (commit)
-  (save-excursion
-    (goto-char (line-beginning-position 0))
-    (let ((line (magit-rev-format "%ct%cN" commit)))
-      (magit-log-format-margin commit
-                               (substring line 10)
-                               (substring line 0 10)))))
-
-(provide 'magit-refs)
-;;; magit-refs.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.elc
deleted file mode 100644
index 47436e54aa84..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-refs.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.el
deleted file mode 100644
index 7541f6e2705d..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.el
+++ /dev/null
@@ -1,1052 +0,0 @@
-;;; magit-remote.el --- transfer Git commits  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2008-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for interacting with remote
-;; repositories.  Commands for cloning, fetching, pulling, and
-;; pushing are defined here.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Options
-
-(defcustom magit-fetch-modules-jobs 4
-  "Number of submodules to fetch in parallel.
-Ignored for Git versions before v2.8.0."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-commands
-  :type '(choice (const :tag "one at a time" nil) number))
-
-;;; Clone
-
-(defcustom magit-clone-set-remote-head nil
-  "Whether cloning creates the symbolic-ref `<remote>/HEAD'."
-  :package-version '(magit . "2.4.2")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defcustom magit-clone-set-remote.pushDefault 'ask
-  "Whether to set the value of `remote.pushDefault' after cloning.
-
-If t, then set without asking.  If nil, then don't set.  If
-`ask', then ask."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-commands
-  :type '(choice (const :tag "set" t)
-                 (const :tag "ask" ask)
-                 (const :tag "don't set" nil)))
-
-;;;###autoload
-(defun magit-clone (repository directory)
-  "Clone the REPOSITORY to DIRECTORY.
-Then show the status buffer for the new repository."
-  (interactive
-   (let  ((url (magit-read-string-ns "Clone repository")))
-     (list url (read-directory-name
-                "Clone to: " nil nil nil
-                (and (string-match "\\([^/:]+?\\)\\(/?\\.git\\)?$" url)
-                     (match-string 1 url))))))
-  (setq directory (file-name-as-directory (expand-file-name directory)))
-  (magit-run-git-async "clone" repository
-                       (magit-convert-filename-for-git directory))
-  ;; Don't refresh the buffer we're calling from.
-  (process-put magit-this-process 'inhibit-refresh t)
-  (set-process-sentinel
-   magit-this-process
-   (lambda (process event)
-     (when (memq (process-status process) '(exit signal))
-       (let ((magit-process-raise-error t))
-         (magit-process-sentinel process event)))
-     (when (and (eq (process-status process) 'exit)
-                (= (process-exit-status process) 0))
-       (let ((default-directory directory))
-         (when (or (eq  magit-clone-set-remote.pushDefault t)
-                   (and magit-clone-set-remote.pushDefault
-                        (y-or-n-p "Set `remote.pushDefault' to \"origin\"? ")))
-           (setf (magit-get "remote.pushDefault") "origin"))
-         (unless magit-clone-set-remote-head
-           (magit-remote-unset-head "origin")))
-       (with-current-buffer (process-get process 'command-buf)
-         (magit-status-internal directory))))))
-
-;;; Remote
-;;;; Options
-
-(defcustom magit-remote-add-set-remote.pushDefault 'ask-if-unset
-  "Whether to set the value of `remote.pushDefault' after adding a remote.
-
-If `ask', then always ask.  If `ask-if-unset', then ask, but only
-if the variable isn't set already.  If nil, then don't ever set.
-If the value is a string, then set without asking, provided that
-the name of the added remote is equal to that string and the
-variable isn't already set."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-commands
-  :type '(choice (const  :tag "ask if unset" ask-if-unset)
-                 (const  :tag "always ask" ask)
-                 (string :tag "set if named")
-                 (const  :tag "don't set")))
-
-(defcustom magit-remote-popup-show-variables t
-  "Whether the `magit-remote-popup' shows Git variables.
-When set to nil, no variables are displayed directly in this
-popup, instead the sub-popup `magit-remote-config-popup' has
-to be used to view and change remote related variables."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-;;;; Popup
-
-(defvar magit-remote-config-variables)
-
-;;;###autoload (autoload 'magit-remote-popup "magit-remote" nil t)
-(magit-define-popup magit-remote-popup
-  "Popup console for remote commands."
-  :man-page "git-remote"
-  :default-arguments '("-f")
-  :variables (lambda ()
-               (and magit-remote-popup-show-variables
-                    magit-remote-config-variables))
-  :switches '("Switches for add"
-              (?f "Fetch after add" "-f"))
-  :actions  '((?a "Add"                  magit-remote-add)
-              (?C "Configure..."         magit-remote-config-popup)
-              (?r "Rename"               magit-remote-rename)
-              (?p "Prune stale branches" magit-remote-prune)
-              (?k "Remove"               magit-remote-remove)
-              (?P "Prune stale refspecs" magit-remote-prune-refspecs))
-  :max-action-columns 2)
-
-;;;; Commands
-
-(defun magit-read-url (prompt &optional initial-input)
-  (let ((url (magit-read-string-ns prompt initial-input)))
-    (if (string-prefix-p "~" url)
-        (expand-file-name url)
-      url)))
-
-;;;###autoload
-(defun magit-remote-add (remote url &optional args)
-  "Add a remote named REMOTE and fetch it."
-  (interactive (list (magit-read-string-ns "Remote name")
-                     (magit-read-url "Remote url")
-                     (magit-remote-arguments)))
-  (if (pcase (list magit-remote-add-set-remote.pushDefault
-                   (magit-get "remote.pushDefault"))
-        (`(,(pred stringp) ,_) t)
-        ((or `(ask ,_) `(ask-if-unset nil))
-         (y-or-n-p (format "Set `remote.pushDefault' to \"%s\"? " remote))))
-      (progn (magit-call-git "remote" "add" args remote url)
-             (setf (magit-get "remote.pushDefault") remote)
-             (magit-refresh))
-    (magit-run-git-async "remote" "add" args remote url)))
-
-;;;###autoload
-(defun magit-remote-rename (old new)
-  "Rename the remote named OLD to NEW."
-  (interactive
-   (let  ((remote (magit-read-remote "Rename remote")))
-     (list remote (magit-read-string-ns (format "Rename %s to" remote)))))
-  (unless (string= old new)
-    (magit-call-git "remote" "rename" old new)
-    (magit-remote--cleanup-push-variables old new)
-    (magit-refresh)))
-
-;;;###autoload
-(defun magit-remote-remove (remote)
-  "Delete the remote named REMOTE."
-  (interactive (list (magit-read-remote "Delete remote")))
-  (magit-call-git "remote" "rm" remote)
-  (magit-remote--cleanup-push-variables remote)
-  (magit-refresh))
-
-(defun magit-remote--cleanup-push-variables (remote &optional new-name)
-  (magit-with-toplevel
-    (when (equal (magit-get "remote.pushDefault") remote)
-      (magit-set new-name "remote.pushDefault"))
-    (dolist (var (magit-git-lines "config" "--name-only"
-                                  "--get-regexp" "^branch\.[^.]*\.pushRemote"
-                                  (format "^%s$" remote)))
-      (magit-call-git "config" (and (not new-name) "--unset") var new-name))))
-
-(defconst magit--refspec-re "\\`\\(\\+\\)?\\([^:]+\\):\\(.*\\)\\'")
-
-;;;###autoload
-(defun magit-remote-prune (remote)
-  "Remove stale remote-tracking branches for REMOTE."
-  (interactive (list (magit-read-remote "Prune stale branches of remote")))
-  (magit-run-git-async "remote" "prune" remote))
-
-;;;###autoload
-(defun magit-remote-prune-refspecs (remote)
-  "Remove stale refspecs for REMOTE.
-
-A refspec is stale if there no longer exists at least one branch
-on the remote that would be fetched due to that refspec.  A stale
-refspec is problematic because its existence causes Git to refuse
-to fetch according to the remaining non-stale refspecs.
-
-If only stale refspecs remain, then offer to either delete the
-remote or to replace the stale refspecs with the default refspec.
-
-Also remove the remote-tracking branches that were created due to
-the now stale refspecs.  Other stale branches are not removed."
-  (interactive (list (magit-read-remote "Prune refspecs of remote")))
-  (let* ((tracking-refs (magit-list-remote-branches remote))
-         (remote-refs (magit-remote-list-refs remote))
-         (variable (format "remote.%s.fetch" remote))
-         (refspecs (magit-get-all variable))
-         stale)
-    (dolist (refspec refspecs)
-      (when (string-match magit--refspec-re refspec)
-        (let ((theirs (match-string 2 refspec))
-              (ours   (match-string 3 refspec)))
-          (unless (if (string-match "\\*" theirs)
-                      (let ((re (replace-match ".*" t t theirs)))
-                        (--some (string-match-p re it) remote-refs))
-                    (member theirs remote-refs))
-            (push (cons refspec
-                        (if (string-match "\\*" ours)
-                            (let ((re (replace-match ".*" t t ours)))
-                              (--filter (string-match-p re it) tracking-refs))
-                          (list (car (member ours tracking-refs)))))
-                  stale)))))
-    (if (not stale)
-        (message "No stale refspecs for remote %S" remote)
-      (if (= (length stale)
-             (length refspecs))
-          (magit-read-char-case
-              (format "All of %s's refspecs are stale.  " remote) nil
-            (?s "replace with [d]efault refspec"
-                (magit-set-all
-                 (list (format "+refs/heads/*:refs/remotes/%s/*" remote))
-                 variable))
-            (?r "[r]emove remote"
-                (magit-call-git "remote" "rm" remote))
-            (?a "or [a]abort"
-                (user-error "Abort")))
-        (if (if (= (length stale) 1)
-                (pcase-let ((`(,refspec . ,refs) (car stale)))
-                  (magit-confirm 'prune-stale-refspecs
-                    (format "Prune stale refspec %s and branch %%s" refspec)
-                    (format "Prune stale refspec %s and %%i branches" refspec)
-                    nil refs))
-              (magit-confirm 'prune-stale-refspecs nil
-                (format "Prune %%i stale refspecs and %i branches"
-                        (length (cl-mapcan (lambda (s) (copy-sequence (cdr s)))
-                                           stale)))
-                nil
-                (mapcar (pcase-lambda (`(,refspec . ,refs))
-                          (concat refspec "\n"
-                                  (mapconcat (lambda (b) (concat "  " b))
-                                             refs "\n")))
-                        stale)))
-            (pcase-dolist (`(,refspec . ,refs) stale)
-              (magit-call-git "config" "--unset" variable
-                              (regexp-quote refspec))
-              (magit--log-action
-               (lambda (refs)
-                 (format "Deleting %i branches" (length refs)))
-               (lambda (ref)
-                 (format "Deleting branch %s (was %s)" ref
-                         (magit-rev-parse "--short" ref)))
-               refs)
-              (dolist (ref refs)
-                (magit-call-git "update-ref" "-d" ref)))
-          (user-error "Abort")))
-      (magit-refresh))))
-
-;;;###autoload
-(defun magit-remote-set-head (remote &optional branch)
-  "Set the local representation of REMOTE's default branch.
-Query REMOTE and set the symbolic-ref refs/remotes/<remote>/HEAD
-accordingly.  With a prefix argument query for the branch to be
-used, which allows you to select an incorrect value if you fancy
-doing that."
-  (interactive
-   (let  ((remote (magit-read-remote "Set HEAD for remote")))
-     (list remote
-           (and current-prefix-arg
-                (magit-read-remote-branch (format "Set %s/HEAD to" remote)
-                                          remote nil nil t)))))
-  (magit-run-git "remote" "set-head" remote (or branch "--auto")))
-
-;;;###autoload
-(defun magit-remote-unset-head (remote)
-  "Unset the local representation of REMOTE's default branch.
-Delete the symbolic-ref \"refs/remotes/<remote>/HEAD\"."
-  (interactive (list (magit-read-remote "Unset HEAD for remote")))
-  (magit-run-git "remote" "set-head" remote "--delete"))
-
-;;;; Config Popup
-
-(defvar magit-remote-config--remote nil)
-
-;;;###autoload
-(defun magit-remote-config-popup (remote)
-  "Popup console for setting remote variables."
-  (interactive
-   (list (if (or current-prefix-arg
-                 (and (eq magit-current-popup 'magit-remote-popup)
-                      magit-remote-popup-show-variables))
-             (magit-read-remote "Configure remote")
-           (magit-remote-config--remote-1))))
-  (let ((magit-remote-config--remote remote))
-    (magit-invoke-popup 'magit-remote-config-popup nil nil)))
-
-(defvar magit-remote-config-variables
-  '((lambda ()
-      (concat
-       (propertize "Configure " 'face 'magit-popup-heading)
-       (propertize (magit-remote-config--remote) 'face 'magit-branch-remote)))
-    (?u "remote.%s.url"
-        magit-set-remote*url
-        magit-format-remote*url)
-    (?U "remote.%s.fetch"
-        magit-set-remote*fetch
-        magit-format-remote*fetch)
-    (?s "remote.%s.pushurl"
-        magit-set-remote*pushurl
-        magit-format-remote*pushurl)
-    (?S "remote.%s.push"
-        magit-set-remote*push
-        magit-format-remote*push)
-    (?O "remote.%s.tagOpt"
-        magit-cycle-remote*tagOpt
-        magit-format-remote*tagOpt)))
-
-(defvar magit-remote-config-popup
-  `(:man-page "git-remote"
-    :variables ,magit-remote-config-variables
-    :setup-function magit-remote-config-popup-setup))
-
-(defun magit-remote-config-popup-setup (val def)
-  (magit-popup-default-setup val def)
-  (setq-local magit-remote-config--remote magit-remote-config--remote))
-
-(defun magit-remote-config--remote (&optional prompt)
-  (if prompt
-      (or (and (not current-prefix-arg)
-               (or magit-remote-config--remote
-                   (magit-remote-config--remote-1)))
-          (magit-read-remote prompt))
-    (or magit-remote-config--remote
-        (magit-remote-config--remote-1)
-        "<name>")))
-
-(defun magit-remote-config--remote-1 ()
-  (let ((remote (magit-get-upstream-remote)))
-    (if (or (not remote)
-            (equal remote "."))
-        (and (magit-remote-p "origin") "origin")
-      remote)))
-
-;;;; Config Commands and Inserters
-
-(defun magit-set-remote*url (remote urls)
-  "Set the variable `url' for the remote named REMOTE to URLS."
-  (interactive (magit-remote-config--read-args "url" "Urls: "))
-  (magit-remote-config--set-url remote "url" urls))
-
-(defun magit-set-remote*fetch (remote values)
-  "Set the variable `fetch' for the remote named REMOTE to VALUES."
-  (interactive (magit-remote-config--read-args "fetch" "Fetch specs: "))
-  (magit-set-all values "remote" remote "fetch")
-  (magit-refresh))
-
-(defun magit-set-remote*pushurl (remote urls)
-  "Set the variable `pushurl' for the remote named REMOTE to URLS."
-  (interactive (magit-remote-config--read-args "pushurl" "Urls: "))
-  (magit-remote-config--set-url remote "pushurl" urls "--push"))
-
-(defun magit-set-remote*push (remote values)
-  "Set the variable `push' for the remote named REMOTE to VALUES."
-  (interactive (magit-remote-config--read-args "push" "Push specs: "))
-  (magit-set-all values "remote" remote "push")
-  (magit-refresh))
-
-(defun magit-cycle-remote*tagOpt (remote)
-  (interactive (list (magit-remote-config--remote)))
-  (magit--set-popup-variable (format "remote.%s.tagOpt" remote)
-                             '("--no-tags" "--tags") nil))
-
-(defun magit-format-remote*url ()
-  (magit-remote-config--format-variable "url"))
-
-(defun magit-format-remote*fetch ()
-  (magit-remote-config--format-variable "fetch"))
-
-(defun magit-format-remote*pushurl ()
-  (magit-remote-config--format-variable "pushurl"))
-
-(defun magit-format-remote*push ()
-  (magit-remote-config--format-variable "push"))
-
-(defun magit-format-remote*tagOpt ()
-  (let ((remote (magit-remote-config--remote)))
-    (magit--format-popup-variable:choices
-     (format "remote.%s.tagOpts" remote)
-     '("--no-tags" "--tags") nil nil
-     (+ (length remote) 16))))
-
-(defun magit-remote-config--read-args (var prompt)
-  (let* ((remote (magit-remote-config--remote (format "Set `%s' of remote" var)))
-         (value (magit-get-all "remote" remote var)))
-    (list remote
-          (mapcar (lambda (url)
-                    (if (string-prefix-p "~" url)
-                        (expand-file-name url)
-                      url))
-                  (completing-read-multiple
-                   prompt nil nil nil
-                   (and value (mapconcat #'identity value ",")))))))
-
-(defun magit-remote-config--set-url (remote var values &optional arg)
-  (let ((old (magit-get-all "remote" remote var)))
-    (dolist (v (-difference values old))
-      (magit-call-git "remote" "set-url" arg "--add" remote v))
-    (dolist (v (-difference old values))
-      (magit-call-git "remote" "set-url" arg "--delete" remote
-                      (concat "^" (regexp-quote v) "$"))))
-  (magit-refresh))
-
-(defun magit-remote-config--format-variable (variable)
-  (magit--format-popup-variable:values
-   (format "remote.%s.%s" (magit-remote-config--remote) variable)
-   25))
-
-;;; Fetch
-
-;;;###autoload (autoload 'magit-fetch-popup "magit-remote" nil t)
-(magit-define-popup magit-fetch-popup
-  "Popup console for fetch commands."
-  :man-page "git-fetch"
-  :switches '((?p "Prune deleted branches" "--prune"))
-  :actions  '("Configure"
-              (?C "variables..."           magit-branch-config-popup)
-              "Fetch from"
-              (?p magit-get-push-remote    magit-fetch-from-pushremote)
-              (?u magit-get-remote         magit-fetch-from-upstream)
-              (?e "elsewhere"              magit-fetch)
-              (?a "all remotes"            magit-fetch-all)
-              "Fetch"
-              (?o "another branch"         magit-fetch-branch)
-              (?r "explicit refspec"       magit-fetch-refspec)
-              (?m "submodules"             magit-fetch-modules))
-  :default-action 'magit-fetch
-  :max-action-columns 1)
-
-(defun magit-git-fetch (remote args)
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "fetch" remote args))
-
-;;;###autoload
-(defun magit-fetch-from-pushremote (args)
-  "Fetch from the push-remote of the current branch."
-  (interactive (list (magit-fetch-arguments)))
-  (--if-let (magit-get-push-remote)
-      (magit-git-fetch it args)
-    (--if-let (magit-get-current-branch)
-        (user-error "No push-remote is configured for %s" it)
-      (user-error "No branch is checked out"))))
-
-;;;###autoload
-(defun magit-fetch-from-upstream (args)
-  "Fetch from the upstream repository of the current branch."
-  (interactive (list (magit-fetch-arguments)))
-  (--if-let (magit-get-remote)
-      (magit-git-fetch it args)
-    (--if-let (magit-get-current-branch)
-        (user-error "No upstream is configured for %s" it)
-      (user-error "No branch is checked out"))))
-
-;;;###autoload
-(defun magit-fetch (remote args)
-  "Fetch from another repository."
-  (interactive (list (magit-read-remote "Fetch remote")
-                     (magit-fetch-arguments)))
-  (magit-git-fetch remote args))
-
-;;;###autoload
-(defun magit-fetch-branch (remote branch args)
-  "Fetch a BRANCH from a REMOTE."
-  (interactive
-   (let ((remote (magit-read-remote-or-url "Fetch from remote or url")))
-     (list remote
-           (magit-read-remote-branch "Fetch branch" remote)
-           (magit-fetch-arguments))))
-  (magit-git-fetch remote (cons branch args)))
-
-;;;###autoload
-(defun magit-fetch-refspec (remote refspec args)
-  "Fetch a REFSPEC from a REMOTE."
-  (interactive
-   (let ((remote (magit-read-remote-or-url "Fetch from remote or url")))
-     (list remote
-           (magit-read-refspec "Fetch using refspec" remote)
-           (magit-fetch-arguments))))
-  (magit-git-fetch remote (cons refspec args)))
-
-;;;###autoload
-(defun magit-fetch-all (args)
-  "Fetch from all remotes."
-  (interactive (list (cl-intersection (magit-fetch-arguments)
-                                      (list "--verbose" "--prune")
-                                      :test #'equal)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "remote" "update" args))
-
-;;;###autoload
-(defun magit-fetch-all-prune ()
-  "Fetch from all remotes, and prune.
-Prune remote tracking branches for branches that have been
-removed on the respective remote."
-  (interactive)
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "remote" "update" "--prune"))
-
-;;;###autoload
-(defun magit-fetch-all-no-prune ()
-  "Fetch from all remotes."
-  (interactive)
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "remote" "update"))
-
-;;;###autoload
-(defun magit-fetch-modules (&optional all)
-  "Fetch all submodules.
-
-Option `magit-fetch-modules-jobs' controls how many submodules
-are being fetched in parallel.  Also fetch the super-repository,
-because `git-fetch' does not support not doing that.  With a
-prefix argument fetch all remotes."
-  (interactive "P")
-  (magit-with-toplevel
-    (magit-run-git-async
-     "fetch" "--verbose" "--recurse-submodules"
-     (and magit-fetch-modules-jobs
-          (version<= "2.8.0" (magit-git-version))
-          (list "-j" (number-to-string magit-fetch-modules-jobs)))
-     (and all "--all"))))
-
-;;; Pull
-
-;;;###autoload (autoload 'magit-pull-popup "magit-remote" nil t)
-(magit-define-popup magit-pull-popup
-  "Popup console for pull commands."
-  :man-page "git-pull"
-  :variables '("Configure"
-               (?r "branch.%s.rebase"
-                   magit-cycle-branch*rebase
-                   magit-pull-format-branch*rebase)
-               (?C "variables..." magit-branch-config-popup))
-  :actions '((lambda ()
-               (--if-let (magit-get-current-branch)
-                   (concat
-                    (propertize "Pull into " 'face 'magit-popup-heading)
-                    (propertize it           'face 'magit-branch-local)
-                    (propertize " from"      'face 'magit-popup-heading))
-                 (propertize "Pull from" 'face 'magit-popup-heading)))
-             (?p magit-get-push-branch     magit-pull-from-pushremote)
-             (?u magit-get-upstream-branch magit-pull-from-upstream)
-             (?e "elsewhere"               magit-pull))
-  :default-action 'magit-pull
-  :max-action-columns 1)
-
-;;;###autoload (autoload 'magit-pull-and-fetch-popup "magit-remote" nil t)
-(magit-define-popup magit-pull-and-fetch-popup
-  "Popup console for pull and fetch commands.
-
-This popup is intended as a replacement for the separate popups
-`magit-pull-popup' and `magit-fetch-popup'.  To use it, add this
-to your init file:
-
-  (with-eval-after-load \\='magit-remote
-    (define-key magit-mode-map \"f\" \\='magit-pull-and-fetch-popup)
-    (define-key magit-mode-map \"F\" nil))
-
-The combined popup does not offer all commands and arguments
-available from the individual popups.  Instead of the argument
-`--prune' and the command `magit-fetch-all' it uses two commands
-`magit-fetch-prune' and `magit-fetch-no-prune'.  And the commands
-`magit-fetch-from-pushremote' and `magit-fetch-from-upstream' are
-missing.  To add them use something like:
-
-  (with-eval-after-load \\='magit-remote
-    (magit-define-popup-action \\='magit-pull-and-fetch-popup ?U
-      \\='magit-get-upstream-branch
-      \\='magit-fetch-from-upstream-remote ?F)
-    (magit-define-popup-action \\='magit-pull-and-fetch-popup ?P
-      \\='magit-get-push-branch
-      \\='magit-fetch-from-push-remote ?F))"
-  :man-page "git-pull"
-  :variables '("Configure"
-               (?r "branch.%s.rebase"
-                   magit-cycle-branch*rebase
-                   magit-pull-format-branch*rebase)
-               (?C "variables..." magit-branch-config-popup))
-  :actions '((lambda ()
-               (--if-let (magit-get-current-branch)
-                   (concat
-                    (propertize "Pull into " 'face 'magit-popup-heading)
-                    (propertize it           'face 'magit-branch-local)
-                    (propertize " from"      'face 'magit-popup-heading))
-                 (propertize "Pull from" 'face 'magit-popup-heading)))
-             (?p magit-get-push-branch     magit-pull-from-pushremote)
-             (?u magit-get-upstream-branch magit-pull-from-upstream)
-             (?e "elsewhere"               magit-pull)
-             "Fetch from"
-             (?f "remotes"           magit-fetch-all-no-prune)
-             (?F "remotes and prune" magit-fetch-all-prune)
-             "Fetch"
-             (?o "another branch"    magit-fetch-branch)
-             (?s "explicit refspec"  magit-fetch-refspec)
-             (?m "submodules"        magit-fetch-modules))
-  :default-action 'magit-fetch
-  :max-action-columns 1)
-
-(defun magit-pull-format-branch*rebase ()
-  (magit--format-popup-variable:choices
-   (format "branch.%s.rebase" (or (magit-get-current-branch) "<name>"))
-   '("true" "false")
-   "false" "pull.rebase"))
-
-(defun magit-git-pull (source args)
-  (run-hooks 'magit-credential-hook)
-  (pcase-let ((`(,remote . ,branch)
-               (magit-split-branch-name source)))
-    (magit-run-git-with-editor "pull" args remote branch)))
-
-;;;###autoload
-(defun magit-pull-from-pushremote (args)
-  "Pull from the push-remote of the current branch."
-  (interactive (list (magit-pull-arguments)))
-  (--if-let (magit-get-push-branch)
-      (magit-git-pull it args)
-    (--if-let (magit-get-current-branch)
-        (user-error "No push-remote is configured for %s" it)
-      (user-error "No branch is checked out"))))
-
-;;;###autoload
-(defun magit-pull-from-upstream (args)
-  "Pull from the upstream of the current branch."
-  (interactive (list (magit-pull-arguments)))
-  (--if-let (magit-get-upstream-branch)
-      (progn (run-hooks 'magit-credential-hook)
-             (magit-run-git-with-editor
-              "pull" args (car (magit-split-branch-name it))))
-    (--if-let (magit-get-current-branch)
-        (user-error "No upstream is configured for %s" it)
-      (user-error "No branch is checked out"))))
-
-;;;###autoload
-(defun magit-pull (source args)
-  "Pull from a branch read in the minibuffer."
-  (interactive (list (magit-read-remote-branch "Pull" nil nil nil t)
-                     (magit-pull-arguments)))
-  (magit-git-pull source args))
-
-;;; Push
-
-(defcustom magit-push-current-set-remote-if-missing t
-  "Whether to configure missing remotes before pushing.
-
-When nil, then the command `magit-push-current-to-pushremote' and
-`magit-push-current-to-upstream' do not appear in the push popup
-if the push-remote resp. upstream is not configured.  If the user
-invokes one of these commands anyway, then it raises an error.
-
-When non-nil, then these commands always appear in the push
-popup.  But if the required configuration is missing, then they
-do appear in a way that indicates that this is the case.  If the
-user invokes one of them, then it asks for the necessary
-configuration, stores the configuration, and then uses it to push
-a first time.
-
-This option also affects whether the argument `--set-upstream' is
-available in the popup.  If the value is t, then that argument is
-redundant.  But note that changing the value of this option does
-not take affect immediately, the argument will only be added or
-removed after restarting Emacs."
-  :package-version '(magit . "2.6.0")
-  :group 'magit-commands
-  :type '(choice (const :tag "don't set" nil)
-                 (const :tag "set branch.<name>.pushRemote" t)
-                 (const :tag "set remote.pushDefault" default)))
-
-;;;###autoload (autoload 'magit-push-popup "magit-remote" nil t)
-(magit-define-popup magit-push-popup
-  "Popup console for push commands."
-  :man-page "git-push"
-  :switches `((?f "Force with lease" "--force-with-lease")
-              (?F "Force"            "--force")
-              (?h "Disable hooks"    "--no-verify")
-              (?d "Dry run"          "--dry-run")
-              ,@(and (not magit-push-current-set-remote-if-missing)
-                     '((?u "Set upstream"  "--set-upstream"))))
-  :actions '("Configure"
-             (?C "variables..."      magit-branch-config-popup)
-             (lambda ()
-               (--when-let (magit-get-current-branch)
-                 (concat (propertize "Push " 'face 'magit-popup-heading)
-                         (propertize it      'face 'magit-branch-local)
-                         (propertize " to"   'face 'magit-popup-heading))))
-             (?p magit--push-current-to-pushremote-desc
-                 magit-push-current-to-pushremote)
-             (?u magit--push-current-to-upstream-desc
-                 magit-push-current-to-upstream)
-             (?e "elsewhere\n"       magit-push-current)
-             "Push"
-             (?o "another branch"    magit-push)
-             (?T "a tag"             magit-push-tag)
-             (?r "explicit refspecs" magit-push-refspecs)
-             (?t "all tags"          magit-push-tags)
-             (?m "matching branches" magit-push-matching))
-  :max-action-columns 2)
-
-(defun magit-git-push (branch target args)
-  (run-hooks 'magit-credential-hook)
-  (pcase-let ((`(,remote . ,target)
-               (magit-split-branch-name target)))
-    (magit-run-git-async "push" "-v" args remote
-                         (format "%s:refs/heads/%s" branch target))))
-
-;;;###autoload
-(defun magit-push-current-to-pushremote (args &optional push-remote)
-  "Push the current branch to `branch.<name>.pushRemote'.
-If that variable is unset, then push to `remote.pushDefault'.
-
-When `magit-push-current-set-remote-if-missing' is non-nil and
-the push-remote is not configured, then read the push-remote from
-the user, set it, and then push to it.  With a prefix argument
-the push-remote can be changed before pushed to it."
-  (interactive
-   (list (magit-push-arguments)
-         (and (magit--push-current-set-pushremote-p current-prefix-arg)
-              (magit-read-remote
-               (if (eq magit-push-current-set-remote-if-missing 'default)
-                   "Set `remote.pushDefault' and push there"
-                 (format "Set `branch.%s.pushRemote' and push there"
-                         (magit-get-current-branch)))))))
-  (--if-let (magit-get-current-branch)
-      (progn (when push-remote
-               (setf (magit-get
-                      (if (eq magit-push-current-set-remote-if-missing 'default)
-                          "remote.pushDefault"
-                        (format "branch.%s.pushRemote" it)))
-                     push-remote))
-             (if-let ((remote (magit-get-push-remote it)))
-                 (if (member remote (magit-list-remotes))
-                     (magit-git-push it (concat remote "/" it) args)
-                   (user-error "Remote `%s' doesn't exist" remote))
-               (user-error "No push-remote is configured for %s" it)))
-    (user-error "No branch is checked out")))
-
-(defun magit--push-current-set-pushremote-p (&optional change)
-  (and (or change
-           (and magit-push-current-set-remote-if-missing
-                (not (magit-get-push-remote))))
-       (magit-get-current-branch)))
-
-(defun magit--push-current-to-pushremote-desc ()
-  (--if-let (magit-get-push-branch)
-      (concat (magit-branch-set-face it) "\n")
-    (and (magit--push-current-set-pushremote-p)
-         (concat
-          (propertize (if (eq magit-push-current-set-remote-if-missing 'default)
-                          "pushDefault"
-                        "pushRemote")
-                      'face 'bold)
-          ", after setting that\n"))))
-
-;;;###autoload
-(defun magit-push-current-to-upstream (args &optional upstream)
-  "Push the current branch to its upstream branch.
-
-When `magit-push-current-set-remote-if-missing' is non-nil and
-the upstream is not configured, then read the upstream from the
-user, set it, and then push to it.  With a prefix argument the
-upstream can be changed before pushed to it."
-  (interactive
-   (list (magit-push-arguments)
-         (and (magit--push-current-set-upstream-p current-prefix-arg)
-              (magit-read-upstream-branch))))
-  (--if-let (magit-get-current-branch)
-      (progn
-        (when upstream
-          (magit-set-branch*merge/remote it upstream))
-        (if-let ((target (magit-get-upstream-branch it)))
-            (magit-git-push it target args)
-          (user-error "No upstream is configured for %s" it)))
-    (user-error "No branch is checked out")))
-
-(defun magit--push-current-set-upstream-p (&optional change)
-  (and (or change
-           (and magit-push-current-set-remote-if-missing
-                (not (magit-get-upstream-branch))))
-       (magit-get-current-branch)))
-
-(defun magit--push-current-to-upstream-desc ()
-  (--if-let (magit-get-upstream-branch)
-      (concat (magit-branch-set-face it) "\n")
-    (and (magit--push-current-set-upstream-p)
-         (concat (propertize "@{upstream}" 'face 'bold)
-                 ", after setting that\n"))))
-
-;;;###autoload
-(defun magit-push-current (target args)
-  "Push the current branch to a branch read in the minibuffer."
-  (interactive
-   (--if-let (magit-get-current-branch)
-       (list (magit-read-remote-branch (format "Push %s to" it)
-                                       nil nil it 'confirm)
-             (magit-push-arguments))
-     (user-error "No branch is checked out")))
-  (magit-git-push (magit-get-current-branch) target args))
-
-;;;###autoload
-(defun magit-push (source target args)
-  "Push an arbitrary branch or commit somewhere.
-Both the source and the target are read in the minibuffer."
-  (interactive
-   (let ((source (magit-read-local-branch-or-commit "Push")))
-     (list source
-           (magit-read-remote-branch
-            (format "Push %s to" source) nil
-            (if (magit-local-branch-p source)
-                (or (magit-get-push-branch source)
-                    (magit-get-upstream-branch source))
-              (and (magit-rev-ancestor-p source "HEAD")
-                   (or (magit-get-push-branch)
-                       (magit-get-upstream-branch))))
-            source 'confirm)
-           (magit-push-arguments))))
-  (magit-git-push source target args))
-
-(defvar magit-push-refspecs-history nil)
-
-;;;###autoload
-(defun magit-push-refspecs (remote refspecs args)
-  "Push one or multiple REFSPECS to a REMOTE.
-Both the REMOTE and the REFSPECS are read in the minibuffer.  To
-use multiple REFSPECS, separate them with commas.  Completion is
-only available for the part before the colon, or when no colon
-is used."
-  (interactive
-   (list (magit-read-remote "Push to remote")
-         (split-string (magit-completing-read-multiple
-                        "Push refspec,s"
-                        (cons "HEAD" (magit-list-local-branch-names))
-                        nil nil 'magit-push-refspecs-history)
-                       crm-default-separator t)
-         (magit-push-arguments)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" "-v" args remote refspecs))
-
-;;;###autoload
-(defun magit-push-matching (remote &optional args)
-  "Push all matching branches to another repository.
-If multiple remotes exist, then read one from the user.
-If just one exists, use that without requiring confirmation."
-  (interactive (list (magit-read-remote "Push matching branches to" nil t)
-                     (magit-push-arguments)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" "-v" args remote ":"))
-
-;;;###autoload
-(defun magit-push-tags (remote &optional args)
-  "Push all tags to another repository.
-If only one remote exists, then push to that.  Otherwise prompt
-for a remote, offering the remote configured for the current
-branch as default."
-  (interactive (list (magit-read-remote "Push tags to remote" nil t)
-                     (magit-push-arguments)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" remote "--tags" args))
-
-;;;###autoload
-(defun magit-push-tag (tag remote &optional args)
-  "Push a tag to another repository."
-  (interactive
-   (let  ((tag (magit-read-tag "Push tag")))
-     (list tag (magit-read-remote (format "Push %s to remote" tag) nil t)
-           (magit-push-arguments))))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" remote tag args))
-
-;;;###autoload
-(defun magit-push-implicitly (args)
-  "Push somewhere without using an explicit refspec.
-
-This command simply runs \"git push -v [ARGS]\".  ARGS are the
-arguments specified in the popup buffer.  No explicit refspec
-arguments are used.  Instead the behavior depends on at least
-these Git variables: `push.default', `remote.pushDefault',
-`branch.<branch>.pushRemote', `branch.<branch>.remote',
-`branch.<branch>.merge', and `remote.<remote>.push'.
-
-To add this command to the push popup add this to your init file:
-
-  (with-eval-after-load \\='magit-remote
-    (magit-define-popup-action \\='magit-push-popup ?P
-      \\='magit-push-implicitly--desc
-      \\='magit-push-implicitly ?p t))
-
-The function `magit-push-implicitly--desc' attempts to predict
-what this command will do.  The value it returns is displayed in
-the popup buffer."
-  (interactive (list (magit-push-arguments)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" "-v" args))
-
-(defun magit-push-implicitly--desc ()
-  (let ((default (magit-get "push.default")))
-    (unless (equal default "nothing")
-      (or (when-let ((remote (or (magit-get-remote)
-                                 (magit-remote-p "origin")))
-                     (refspec (magit-get "remote" remote "push")))
-            (format "%s using %s"
-                    (propertize remote  'face 'magit-branch-remote)
-                    (propertize refspec 'face 'bold)))
-          (--when-let (and (not (magit-get-push-branch))
-                           (magit-get-upstream-branch))
-            (format "%s aka %s\n"
-                    (magit-branch-set-face it)
-                    (propertize "@{upstream}" 'face 'bold)))
-          (--when-let (magit-get-push-branch)
-            (format "%s aka %s\n"
-                    (magit-branch-set-face it)
-                    (propertize "pushRemote" 'face 'bold)))
-          (--when-let (magit-get-@{push}-branch)
-            (format "%s aka %s\n"
-                    (magit-branch-set-face it)
-                    (propertize "@{push}" 'face 'bold)))
-          (format "using %s (%s is %s)\n"
-                  (propertize "git push"     'face 'bold)
-                  (propertize "push.default" 'face 'bold)
-                  (propertize default        'face 'bold))))))
-
-;;;###autoload
-(defun magit-push-to-remote (remote args)
-  "Push to REMOTE without using an explicit refspec.
-The REMOTE is read in the minibuffer.
-
-This command simply runs \"git push -v [ARGS] REMOTE\".  ARGS
-are the arguments specified in the popup buffer.  No refspec
-arguments are used.  Instead the behavior depends on at least
-these Git variables: `push.default', `remote.pushDefault',
-`branch.<branch>.pushRemote', `branch.<branch>.remote',
-`branch.<branch>.merge', and `remote.<remote>.push'.
-
-To add this command to the push popup add this to your init file:
-
-  (with-eval-after-load \\='magit-remote
-    (magit-define-popup-action \\='magit-push-popup ?r
-      \\='magit-push-to-remote--desc
-      \\='magit-push-to-remote ?p t))"
-  (interactive (list (magit-read-remote "Push to remote")
-                     (magit-push-arguments)))
-  (run-hooks 'magit-credential-hook)
-  (magit-run-git-async "push" "-v" args remote))
-
-(defun magit-push-to-remote--desc ()
-  (format "using %s\n" (propertize "git push <remote>" 'face 'bold)))
-
-;;; Email
-
-;;;###autoload (autoload 'magit-patch-popup "magit-remote" nil t)
-(magit-define-popup magit-patch-popup
-  "Popup console for patch commands."
-  :man-page "git-format-patch"
-  :switches '("Switches for formatting patches"
-              (?l "Add cover letter" "--cover-letter"))
-  :options  '("Options for formatting patches"
-              (?f "From"             "--from=")
-              (?t "To"               "--to=")
-              (?c "CC"               "--cc=")
-              (?r "In reply to"      "--in-reply-to=")
-              (?P "Subject Prefix"   "--subject-prefix=")
-              (?v "Reroll count"     "--reroll-count=")
-              (?s "Thread style"     "--thread=")
-              (?U "Context lines"    "-U")
-              (?M "Detect renames"   "-M")
-              (?C "Detect copies"    "-C")
-              (?A "Diff algorithm"   "--diff-algorithm="
-                  magit-diff-select-algorithm)
-              (?o "Output directory" "--output-directory="))
-  :actions  '((?p "Format patches"   magit-format-patch)
-              (?r "Request pull"     magit-request-pull))
-  :default-action 'magit-format-patch)
-
-;;;###autoload
-(defun magit-format-patch (range args)
-  "Create patches for the commits in RANGE.
-When a single commit is given for RANGE, create a patch for the
-changes introduced by that commit (unlike 'git format-patch'
-which creates patches for all commits that are reachable from
-`HEAD' but not from the specified commit)."
-  (interactive
-   (list (if-let ((revs (magit-region-values 'commit t)))
-             (concat (car (last revs)) "^.." (car revs))
-           (let ((range (magit-read-range-or-commit "Format range or commit")))
-             (if (string-match-p "\\.\\." range)
-                 range
-               (format "%s~..%s" range range))))
-         (magit-patch-arguments)))
-  (magit-call-git "format-patch" range args)
-  (when (member "--cover-letter" args)
-    (find-file
-     (expand-file-name
-      "0000-cover-letter.patch"
-      (let ((topdir (magit-toplevel)))
-        (or (--some (and (string-match "--output-directory=\\(.+\\)" it)
-                         (expand-file-name (match-string 1 it) topdir))
-                    args)
-            topdir))))))
-
-;;;###autoload
-(defun magit-request-pull (url start end)
-  "Request upstream to pull from you public repository.
-
-URL is the url of your publically accessible repository.
-START is a commit that already is in the upstream repository.
-END is the last commit, usually a branch name, which upstream
-is asked to pull.  START has to be reachable from that commit."
-  (interactive
-   (list (magit-get "remote" (magit-read-remote "Remote") "url")
-         (magit-read-branch-or-commit "Start" (magit-get-upstream-branch))
-         (magit-read-branch-or-commit "End")))
-  (let ((dir default-directory))
-    ;; mu4e changes default-directory
-    (compose-mail)
-    (setq default-directory dir))
-  (message-goto-body)
-  (magit-git-insert "request-pull" start url end)
-  (set-buffer-modified-p nil))
-
-(provide 'magit-remote)
-;;; magit-remote.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.elc
deleted file mode 100644
index 2622d6e23ba2..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-remote.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.el
deleted file mode 100644
index 39b4d095f12b..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.el
+++ /dev/null
@@ -1,304 +0,0 @@
-;;; magit-repos.el --- listing repositories  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for listing repositories.  This
-;; includes getting a Lisp list of known repositories as well as a
-;; mode for listing repositories in a buffer.
-
-;;; Code:
-
-(require 'magit-core)
-
-(declare-function magit-status-internal "magit-status" (directory))
-
-(defvar x-stretch-cursor)
-
-;;; Options
-
-(defcustom magit-repository-directories nil
-  "List of directories that are or contain Git repositories.
-
-Each element has the form (DIRECTORY . DEPTH).  DIRECTORY has
-to be a directory or a directory file-name, a string.  DEPTH,
-an integer, specifies the maximum depth to look for Git
-repositories.  If it is 0, then only add DIRECTORY itself."
-  :package-version '(magit . "2.8.0")
-  :group 'magit-essentials
-  :type '(repeat (cons directory (integer :tag "Depth"))))
-
-(defgroup magit-repolist nil
-  "List repositories in a buffer."
-  :link '(info-link "(magit)Repository List")
-  :group 'magit-modes)
-
-(defcustom magit-repolist-mode-hook '(hl-line-mode)
-  "Hook run after entering Magit-Repolist mode."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-repolist
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(hl-line-mode))
-
-(defcustom magit-repolist-columns
-  '(("Name"    25 magit-repolist-column-ident nil)
-    ("Version" 25 magit-repolist-column-version nil)
-    ("B<U"      3 magit-repolist-column-unpulled-from-upstream
-     ((:right-align t)
-      (:help-echo "Upstream changes not in branch")))
-    ("B>U"      3 magit-repolist-column-unpushed-to-upstream
-     ((:right-align t)
-      (:help-echo "Local changes not in upstream")))
-    ("Path"    99 magit-repolist-column-path nil))
-  "List of columns displayed by `magit-list-repositories'.
-
-Each element has the form (HEADER WIDTH FORMAT PROPS).
-
-HEADER is the string displayed in the header.  WIDTH is the width
-of the column.  FORMAT is a function that is called with one
-argument, the repository identification (usually its basename),
-and with `default-directory' bound to the toplevel of its working
-tree.  It has to return a string to be inserted or nil.  PROPS is
-an alist that supports the keys `:right-align' and `:pad-right'.
-Some entries also use `:help-echo', but `tabulated-list' does not
-actually support that yet."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-repolist
-  :type `(repeat (list :tag "Column"
-                       (string   :tag "Header Label")
-                       (integer  :tag "Column Width")
-                       (function :tag "Inserter Function")
-                       (repeat   :tag "Properties"
-                                 (list (choice :tag "Property"
-                                               (const :right-align)
-                                               (const :pad-right)
-                                               (symbol))
-                                       (sexp   :tag "Value"))))))
-
-
-;;; List Repositories
-;;;; Command
-;;;###autoload
-(defun magit-list-repositories ()
-  "Display a list of repositories.
-
-Use the options `magit-repository-directories' to control which
-repositories are displayed."
-  (interactive)
-  (if magit-repository-directories
-      (with-current-buffer (get-buffer-create "*Magit Repositories*")
-        (magit-repolist-mode)
-        (magit-repolist-refresh)
-        (tabulated-list-print)
-        (switch-to-buffer (current-buffer)))
-    (message "You need to customize `magit-repository-directories' %s"
-             "before you can list repositories")))
-
-;;;; Mode
-
-(defvar magit-repolist-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map tabulated-list-mode-map)
-    (define-key map (if (featurep 'jkl) [return] (kbd "C-m"))
-      'magit-repolist-status)
-    map)
-  "Local keymap for Magit-Repolist mode buffers.")
-
-(defun magit-repolist-status (&optional _button)
-  "Show the status for the repository at point."
-  (interactive)
-  (--if-let (tabulated-list-get-id)
-      (magit-status-internal (expand-file-name it))
-    (user-error "There is no repository at point")))
-
-(define-derived-mode magit-repolist-mode tabulated-list-mode "Repos"
-  "Major mode for browsing a list of Git repositories."
-  (setq x-stretch-cursor        nil)
-  (setq tabulated-list-padding  0)
-  (setq tabulated-list-sort-key (cons "Path" nil))
-  (setq tabulated-list-format
-        (vconcat (mapcar (pcase-lambda (`(,title ,width ,_fn ,props))
-                           (nconc (list title width t)
-                                  (-flatten props)))
-                         magit-repolist-columns)))
-  (tabulated-list-init-header)
-  (add-hook 'tabulated-list-revert-hook 'magit-repolist-refresh nil t)
-  (setq imenu-prev-index-position-function
-        'magit-imenu--repolist-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        'magit-imenu--repolist-extract-index-name-function))
-
-(defun magit-repolist-refresh ()
-  (setq tabulated-list-entries
-        (mapcar (pcase-lambda (`(,id . ,path))
-                  (let ((default-directory path))
-                    (list path
-                          (vconcat (--map (or (funcall (nth 2 it) id) "")
-                                          magit-repolist-columns)))))
-                (magit-list-repos-uniquify
-                 (--map (cons (file-name-nondirectory (directory-file-name it))
-                              it)
-                        (magit-list-repos))))))
-
-;;;; Columns
-
-(defun magit-repolist-column-ident (id)
-  "Insert the identification of the repository.
-Usually this is just its basename."
-  id)
-
-(defun magit-repolist-column-path (_id)
-  "Insert the absolute path of the repository."
-  (abbreviate-file-name default-directory))
-
-(defun magit-repolist-column-version (_id)
-  "Insert a description of the repository's `HEAD' revision."
-  (let ((v (or (magit-git-string "describe" "--tags")
-               ;; If there are no tags, use the date in MELPA format.
-               (magit-git-string "show" "--no-patch" "--format=%cd-g%h"
-                                 "--date=format:%Y%m%d.%H%M"))))
-    (if (and v (string-match-p "\\`[0-9]" v))
-        (concat " " v)
-      v)))
-
-(defun magit-repolist-column-branch (_id)
-  "Insert the current branch."
-  (magit-get-current-branch))
-
-(defun magit-repolist-column-upstream (_id)
-  "Insert the upstream branch of the current branch."
-  (magit-get-upstream-branch))
-
-(defun magit-repolist-column-dirty (_id)
-  "Insert a letter if there are uncommitted changes.
-
-Show N if there is at least one untracked file.
-Show U if there is at least one unstaged file.
-Show S if there is at least one staged file.
-Only one letter is shown, the first that applies."
-  (cond ((magit-untracked-files) "N")
-        ((magit-unstaged-files)  "U")
-        ((magit-staged-files)    "S")))
-
-(defun magit-repolist-column-unpulled-from-upstream (_id)
-  "Insert number of upstream commits not in the current branch."
-  (--when-let (magit-get-upstream-branch nil t)
-    (let ((n (cadr (magit-rev-diff-count "HEAD" it))))
-      (propertize (number-to-string n) 'face (if (> n 0) 'bold 'shadow)))))
-
-(defun magit-repolist-column-unpulled-from-pushremote (_id)
-  "Insert number of commits in the push branch but not the current branch."
-  (--when-let (magit-get-push-branch nil t)
-    (let ((n (cadr (magit-rev-diff-count "HEAD" it))))
-      (propertize (number-to-string n) 'face (if (> n 0) 'bold 'shadow)))))
-
-(defun magit-repolist-column-unpushed-to-upstream (_id)
-  "Insert number of commits in the current branch but not its upstream."
-  (--when-let (magit-get-upstream-branch nil t)
-    (let ((n (car (magit-rev-diff-count "HEAD" it))))
-      (propertize (number-to-string n) 'face (if (> n 0) 'bold 'shadow)))))
-
-(defun magit-repolist-column-unpushed-to-pushremote (_id)
-  "Insert number of commits in the current branch but not its push branch."
-  (--when-let (magit-get-push-branch nil t)
-    (let ((n (car (magit-rev-diff-count "HEAD" it))))
-      (propertize (number-to-string n) 'face (if (> n 0) 'bold 'shadow)))))
-
-(defun magit-repolist-column-branches (_id)
-  "Insert number of branches."
-  (let ((n (length (magit-list-local-branches))))
-    (propertize (number-to-string n) 'face (if (> n 1) 'bold 'shadow))))
-
-(defun magit-repolist-column-stashes (_id)
-  "Insert number of stashes."
-  (let ((n (length (magit-list-stashes))))
-    (propertize (number-to-string n) 'face (if (> n 0) 'bold 'shadow))))
-
-;;; Read Repository
-
-(defun magit-read-repository (&optional read-directory-name)
-  "Read a Git repository in the minibuffer, with completion.
-
-The completion choices are the basenames of top-levels of
-repositories found in the directories specified by option
-`magit-repository-directories'.  In case of name conflicts
-the basenames are prefixed with the name of the respective
-parent directories.  The returned value is the actual path
-to the selected repository.
-
-With prefix argument simply read a directory name using
-`read-directory-name'."
-  (if (and (not read-directory-name) magit-repository-directories)
-      (let* ((repos (magit-list-repos-uniquify
-                     (--map (cons (file-name-nondirectory
-                                   (directory-file-name it))
-                                  it)
-                            (magit-list-repos))))
-             (reply (magit-completing-read "Git repository" repos)))
-        (file-name-as-directory
-         (or (cdr (assoc reply repos))
-             (if (file-directory-p reply)
-                 (expand-file-name reply)
-               (user-error "Not a repository or a directory: %s" reply)))))
-    (file-name-as-directory
-     (read-directory-name "Git repository: "
-                          (or (magit-toplevel) default-directory)))))
-
-(defun magit-list-repos ()
-  (cl-mapcan (pcase-lambda (`(,dir . ,depth))
-               (magit-list-repos-1 dir depth))
-             magit-repository-directories))
-
-(defun magit-list-repos-1 (directory depth)
-  (cond ((file-readable-p (expand-file-name ".git" directory))
-         (list directory))
-        ((and (> depth 0) (magit-file-accessible-directory-p directory))
-         (--mapcat (and (file-directory-p it)
-                        (magit-list-repos-1 it (1- depth)))
-                   (directory-files directory t
-                                    directory-files-no-dot-files-regexp t)))))
-
-(defun magit-list-repos-uniquify (alist)
-  (let (result (dict (make-hash-table :test 'equal)))
-    (dolist (a (delete-dups alist))
-      (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict))
-    (maphash
-     (lambda (key value)
-       (if (= (length value) 1)
-           (push (cons key (car value)) result)
-         (setq result
-               (append result
-                       (magit-list-repos-uniquify
-                        (--map (cons (concat
-                                      key "\\"
-                                      (file-name-nondirectory
-                                       (directory-file-name
-                                        (substring it 0 (- (1+ (length key)))))))
-                                     it)
-                               value))))))
-     dict)
-    result))
-
-(provide 'magit-repos)
-;;; magit-repos.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.elc
deleted file mode 100644
index 43513e84e863..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-repos.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.el
deleted file mode 100644
index 59b6ab9887bc..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.el
+++ /dev/null
@@ -1,125 +0,0 @@
-;;; magit-reset.el --- reset fuctionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements reset commands.
-
-;;; Code:
-
-(require 'magit)
-
-;;;###autoload (autoload 'magit-reset-popup "magit" nil t)
-(magit-define-popup magit-reset-popup
-  "Popup console for reset commands."
-  :man-page "git-reset"
-  :actions '((?m "reset mixed    (HEAD and index)"         magit-reset-head)
-             (?s "reset soft     (HEAD only)"              magit-reset-soft)
-             (?h "reset hard     (HEAD, index, and files)" magit-reset-hard)
-             (?i "reset index    (only)"                   magit-reset-index)
-             (?w "reset worktree (only)"                   magit-reset-worktree)
-             nil
-             (?f "reset a file"                            magit-file-checkout))
-  :max-action-columns 1)
-
-;;;###autoload
-(defun magit-reset (commit &optional hard)
-  "Reset the `HEAD' and index to COMMIT, but not the working tree.
-With a prefix argument also reset the working tree.
-\n(git reset --mixed|--hard COMMIT)"
-  (interactive (list (magit-reset-read-branch-or-commit
-                      (if current-prefix-arg
-                          (concat (propertize "Hard" 'face 'bold)
-                                  " reset %s to")
-                        "Reset %s to"))
-                     current-prefix-arg))
-  (magit-reset-internal (if hard "--hard" "--mixed") commit))
-
-;;;###autoload
-(defun magit-reset-head (commit)
-  "Reset the `HEAD' and index to COMMIT, but not the working tree.
-\n(git reset --mixed COMMIT)"
-  (interactive (list (magit-reset-read-branch-or-commit "Reset %s to")))
-  (magit-reset-internal "--mixed" commit))
-
-;;;###autoload
-(defun magit-reset-soft (commit)
-  "Reset the `HEAD' to COMMIT, but not the index and working tree.
-\n(git reset --soft REVISION)"
-  (interactive (list (magit-reset-read-branch-or-commit "Soft reset %s to")))
-  (magit-reset-internal "--soft" commit))
-
-;;;###autoload
-(defun magit-reset-hard (commit)
-  "Reset the `HEAD', index, and working tree to COMMIT.
-\n(git reset --hard REVISION)"
-  (interactive (list (magit-reset-read-branch-or-commit
-                      (concat (propertize "Hard" 'face 'bold)
-                              " reset %s to"))))
-  (magit-reset-internal "--hard" commit))
-
-;;;###autoload
-(defun magit-reset-index (commit)
-  "Reset the index to COMMIT.
-Keep the `HEAD' and working tree as-is, so if COMMIT refers to the
-head this effectively unstages all changes.
-\n(git reset COMMIT .)"
-  (interactive (list (magit-read-branch-or-commit "Reset index to")))
-  (magit-reset-internal nil commit "."))
-
-;;;###autoload
-(defun magit-reset-worktree (commit)
-  "Reset the worktree to COMMIT.
-Keep the `HEAD' and index as-is."
-  (interactive (list (magit-read-branch-or-commit "Reset worktree to")))
-  (magit-with-temp-index commit nil
-    (magit-wip-commit-before-change nil " before reset")
-    (magit-run-git "checkout-index" "--all" "--force")
-    (magit-wip-commit-after-apply nil " after reset")))
-
-(defun magit-reset-read-branch-or-commit (prompt)
-  "Prompt for and return a ref to reset HEAD to.
-
-PROMPT is a format string, where either the current branch name
-or \"detached head\" will be substituted for %s."
-  (magit-read-branch-or-commit
-   (format prompt (or (magit-get-current-branch) "detached head"))))
-
-(defun magit-reset-internal (arg commit &optional path)
-  (when (and (not (member arg '("--hard" nil)))
-             (equal (magit-rev-parse commit)
-                    (magit-rev-parse "HEAD~")))
-    (with-temp-buffer
-      (magit-git-insert "show" "-s" "--format=%B" "HEAD")
-      (when git-commit-major-mode
-        (funcall git-commit-major-mode))
-      (git-commit-setup-font-lock)
-      (git-commit-save-message)))
-  (let ((cmd (if (and (equal commit "HEAD") (not arg)) "unstage" "reset")))
-    (magit-wip-commit-before-change nil (concat " before " cmd))
-    (magit-run-git "reset" arg commit "--" path)
-    (when (equal cmd "unstage")
-      (magit-wip-commit-after-apply nil " after unstage"))))
-
-(provide 'magit-reset)
-;;; magit-reset.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.elc
deleted file mode 100644
index 3523ca4d0693..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-reset.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.el
deleted file mode 100644
index d7a6897dbfdc..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.el
+++ /dev/null
@@ -1,1403 +0,0 @@
-;;; magit-section.el --- section functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements "sections" as used in all Magit buffers.
-;; If you have used Magit before, then you probably know what that
-;; means, otherwise think "read-only Org-Mode for Git", kinda.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-(require 'eieio)
-
-(require 'magit-utils)
-
-(declare-function magit-maybe-make-margin-overlay "magit-margin" ())
-(declare-function magit-repository-local-get "magit-mode"
-                  (key &optional default repository))
-(declare-function magit-repository-local-set "magit-mode"
-                  (key value &optional repository))
-(defvar magit-keep-region-overlay)
-
-;;; Options
-
-(defgroup magit-section nil
-  "Expandable sections."
-  :link '(info-link "(magit)Sections")
-  :group 'magit)
-
-(defcustom magit-section-show-child-count t
-  "Whether to append the number of children to section headings.
-This only applies to sections for which doing so makes sense."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-section
-  :type 'boolean)
-
-(defcustom magit-section-movement-hook
-  '(magit-hunk-set-window-start
-    magit-log-maybe-update-revision-buffer
-    magit-log-maybe-show-more-commits)
-  "Hook run by `magit-section-goto'.
-That function in turn is used by all section movement commands."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-section
-  :type 'hook
-  :options '(magit-hunk-set-window-start
-             magit-status-maybe-update-revision-buffer
-             magit-status-maybe-update-blob-buffer
-             magit-log-maybe-update-revision-buffer
-             magit-log-maybe-update-blob-buffer
-             magit-log-maybe-show-more-commits))
-
-(defcustom magit-section-highlight-hook
-  '(magit-diff-highlight
-    magit-section-highlight
-    magit-section-highlight-selection)
-  "Functions used to highlight the current section.
-Each function is run with the current section as only argument
-until one of them returns non-nil."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-section
-  :type 'hook
-  :options '(magit-diff-highlight
-             magit-section-highlight
-             magit-section-highlight-selection))
-
-(defcustom magit-section-unhighlight-hook
-  '(magit-diff-unhighlight)
-  "Functions used to unhighlight the previously current section.
-Each function is run with the current section as only argument
-until one of them returns non-nil.  Most sections are properly
-unhighlighted without requiring a specialized unhighlighter,
-diff-related sections being the only exception."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-section
-  :type 'hook
-  :options '(magit-diff-unhighlight))
-
-(defcustom magit-section-set-visibility-hook
-  '(magit-diff-expansion-threshold
-    magit-section-cached-visibility)
-  "Hook used to set the initial visibility of a section.
-Stop at the first function that returns non-nil.  The returned
-value should be `show', `hide' or nil.  If no function returns
-non-nil, determine the visibility as usual, i.e. use the
-hardcoded section specific default (see `magit-insert-section')."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-section
-  :type 'hook
-  :options '(magit-diff-expansion-threshold
-             magit-section-cached-visibility))
-
-(defcustom magit-section-cache-visibility t
-  "Whether to cache visibility of sections.
-
-Sections always retain their visibility state when they are being
-recreated during a refresh.  But if a section disappears and then
-later reappears again, then this option controls whether this is
-the case.
-
-If t, then cache the visibility of all sections.  If a list of
-section types, then only do so for matching sections.  If nil,
-then don't do so for any sections."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-section
-  :type '(choice (const  :tag "Don't cache visibility" nil)
-                 (const  :tag "Cache visibility of all sections" t)
-                 (repeat :tag "Cache visibility for section types" symbol)))
-
-(defcustom magit-section-initial-visibility-alist nil
-  "Alist controlling the initial visibility of sections.
-
-Each element maps a section type or lineage to the initial
-visibility state for such sections.  The state has to be one of
-`show' or `hide', or a function that returns one of these symbols.
-A function is called with the section as the only argument.
-
-Use the command `magit-describe-section' to determine a section's
-lineage or type.  The vector in the output is the section lineage
-and the type is the first element of that vector.  Wildcards can
-be used, see `magit-section-match'.
-
-Currently this option is only used to override hardcoded defaults,
-but in the future it will also be used set the defaults.
-
-An entry whose key is `magit-status-initial-section' specifies
-the visibility of the section `magit-status-goto-initial-section'
-jumps to.  This does not only override defaults, but also other
-entries of this alist."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-section
-  :type '(alist :key-type (sexp :tag "Section type/lineage")
-                :value-type (choice (const hide)
-                                    (const show)
-                                    function)))
-
-(defface magit-section-highlight
-  '((((class color) (background light)) :background "grey95")
-    (((class color) (background  dark)) :background "grey20"))
-  "Face for highlighting the current section."
-  :group 'magit-faces)
-
-(defface magit-section-heading
-  '((((class color) (background light)) :foreground "DarkGoldenrod4" :weight bold)
-    (((class color) (background  dark)) :foreground "LightGoldenrod2" :weight bold))
-  "Face for section headings."
-  :group 'magit-faces)
-
-(defface magit-section-secondary-heading '((t :weight bold))
-  "Face for section headings of some secondary headings."
-  :group 'magit-faces)
-
-(defface magit-section-heading-selection
-  '((((class color) (background light)) :foreground "salmon4")
-    (((class color) (background  dark)) :foreground "LightSalmon3"))
-  "Face for selected section headings."
-  :group 'magit-faces)
-
-;;; Core
-
-(defvar magit--current-section-hook nil
-  "Internal variable used for `magit-explain-section'.")
-
-(defclass magit-section ()
-  ((type     :initform nil :initarg :type)
-   (value    :initform nil :initarg :value)
-   (start    :initform nil :initarg :start)
-   (content  :initform nil)
-   (end      :initform nil)
-   (hidden   :initform nil)
-   (washer   :initform nil)
-   (process  :initform nil)
-   (heading-highlight-face :initform nil)
-   (inserter :initform (symbol-value 'magit--current-section-hook))
-   (parent   :initform nil :initarg :parent)
-   (children :initform nil)))
-
-(defclass magit-file-section (magit-section)
-  ((source   :initform nil)
-   (header   :initform nil)))
-
-(defclass magit-hunk-section (magit-section)
-  ((refined  :initform nil)))
-
-(defvar-local magit-root-section nil
-  "The root section in the current buffer.
-All other sections are descendants of this section.  The value
-of this variable is set by `magit-insert-section' and you should
-never modify it.")
-(put 'magit-root-section 'permanent-local t)
-
-(defun magit-current-section ()
-  "Return the section at point."
-  (or (get-text-property (point) 'magit-section) magit-root-section))
-
-(defun magit-section-ident (section)
-  "Return an unique identifier for SECTION.
-The return value has the form ((TYPE . VALUE)...)."
-  (with-slots (type value parent) section
-    (cons (cons type
-                (cond ((not (memq type '(unpulled unpushed))) value)
-                      ((string-match-p "@{upstream}" value) value)
-                      ;; Unfortunately Git chokes on "@{push}" when
-                      ;; the value of `push.default' does not allow a
-                      ;; 1:1 mapping.  Arbitrary commands may consult
-                      ;; the section value so we cannot use "@{push}".
-                      ;; But `unpushed' and `unpulled' sections should
-                      ;; keep their identity when switching branches
-                      ;; so we have to use another value here.
-                      ((string-match-p "\\`\\.\\." value) "..@{push}")
-                      (t "@{push}..")))
-          (and parent
-               (magit-section-ident parent)))))
-
-(defun magit-get-section (ident &optional root)
-  "Return the section identified by IDENT.
-IDENT has to be a list as returned by `magit-section-ident'."
-  (setq ident (reverse ident))
-  (let ((section (or root magit-root-section)))
-    (when (eq (car (pop ident))
-              (oref section type))
-      (while (and ident
-                  (setq section
-                        (--first
-                         (and (eq    (caar ident) (oref it type))
-                              (equal (cdar ident) (oref it value)))
-                         (oref section children))))
-        (pop ident))
-      section)))
-
-(defun magit-section-lineage (section)
-  "Return the lineage of SECTION.
-The return value has the form [TYPE...]."
-  (apply #'vector (mapcar #'car (magit-section-ident section))))
-
-(defvar magit-insert-section--current nil "For internal use only.")
-(defvar magit-insert-section--parent  nil "For internal use only.")
-(defvar magit-insert-section--oldroot nil "For internal use only.")
-
-;;; Commands
-;;;; Movement
-
-(defun magit-section-forward ()
-  "Move to the beginning of the next visible section."
-  (interactive)
-  (if (eobp)
-      (user-error "No next section")
-    (let ((section (magit-current-section)))
-      (if (oref section parent)
-          (let ((next (and (not (oref section hidden))
-                           (not (= (oref section end)
-                                   (1+ (point))))
-                           (car (oref section children)))))
-            (while (and section (not next))
-              (unless (setq next (car (magit-section-siblings section 'next)))
-                (setq section (oref section parent))))
-            (if next
-                (magit-section-goto next)
-              (user-error "No next section")))
-        (magit-section-goto 1)))))
-
-(defun magit-section-backward ()
-  "Move to the beginning of the current or the previous visible section.
-When point is at the beginning of a section then move to the
-beginning of the previous visible section.  Otherwise move to
-the beginning of the current section."
-  (interactive)
-  (if (bobp)
-      (user-error "No previous section")
-    (let ((section (magit-current-section)) children)
-      (cond
-       ((and (= (point)
-                (1- (oref section end)))
-             (setq children (oref section children)))
-        (magit-section-goto (car (last children))))
-       ((and (oref section parent)
-             (not (= (point)
-                     (oref section start))))
-        (magit-section-goto section))
-       (t
-        (let ((prev (car (magit-section-siblings section 'prev))))
-          (if prev
-              (while (and (not (oref prev hidden))
-                          (setq children (oref prev children)))
-                (setq prev (car (last children))))
-            (setq prev (oref section parent)))
-          (cond (prev
-                 (magit-section-goto prev))
-                ((oref section parent)
-                 (user-error "No previous section"))
-                ;; Eob special cases.
-                ((not (get-text-property (1- (point)) 'invisible))
-                 (magit-section-goto -1))
-                (t
-                 (goto-char (previous-single-property-change
-                             (1- (point)) 'invisible))
-                 (forward-line -1)
-                 (magit-section-goto (magit-current-section))))))))))
-
-(defun magit-section-up ()
-  "Move to the beginning of the parent section."
-  (interactive)
-  (--if-let (oref (magit-current-section) parent)
-      (magit-section-goto it)
-    (user-error "No parent section")))
-
-(defun magit-section-forward-sibling ()
-  "Move to the beginning of the next sibling section.
-If there is no next sibling section, then move to the parent."
-  (interactive)
-  (let ((current (magit-current-section)))
-    (if (oref current parent)
-        (--if-let (car (magit-section-siblings current 'next))
-            (magit-section-goto it)
-          (magit-section-forward))
-      (magit-section-goto 1))))
-
-(defun magit-section-backward-sibling ()
-  "Move to the beginning of the previous sibling section.
-If there is no previous sibling section, then move to the parent."
-  (interactive)
-  (let ((current (magit-current-section)))
-    (if (oref current parent)
-        (--if-let (car (magit-section-siblings current 'prev))
-            (magit-section-goto it)
-          (magit-section-backward))
-      (magit-section-goto -1))))
-
-(defun magit-section-goto (arg)
-  (if (integerp arg)
-      (progn (forward-line arg)
-             (setq arg (magit-current-section)))
-    (goto-char (oref arg start)))
-  (run-hook-with-args 'magit-section-movement-hook arg))
-
-(defun magit-section-set-window-start (section)
-  "Ensure the beginning of SECTION is visible."
-  (unless (pos-visible-in-window-p (oref section end))
-    (set-window-start (selected-window) (oref section start))))
-
-(defun magit-hunk-set-window-start (section)
-  "When SECTION is a `hunk', ensure that its beginning is visible.
-It the SECTION has a different type, then do nothing."
-  (when (magit-hunk-section-p section)
-    (magit-section-set-window-start section)))
-
-(defmacro magit-define-section-jumper (name heading type &optional value)
-  "Define an interactive function to go some section.
-Together TYPE and VALUE identify the section.
-HEADING is the displayed heading of the section."
-  (declare (indent defun))
-  `(defun ,name (&optional expand) ,(format "\
-Jump to the section \"%s\".
-With a prefix argument also expand it." heading)
-     (interactive "P")
-     (--if-let (magit-get-section
-                (cons (cons ',type ,value)
-                      (magit-section-ident magit-root-section)))
-         (progn (goto-char (oref it start))
-                (when expand
-                  (with-local-quit (magit-section-show it))
-                  (recenter 0)))
-       (message ,(format "Section \"%s\" wasn't found" heading)))))
-
-;;;; Visibility
-
-(defun magit-section-show (section)
-  "Show the body of the current section."
-  (interactive (list (magit-current-section)))
-  (oset section hidden nil)
-  (when-let ((washer (oref section washer)))
-    (oset section washer nil)
-    (let ((inhibit-read-only t)
-          (magit-insert-section--parent section)
-          (content (oref section content)))
-      (save-excursion
-        (if (and content (< content (oref section end)))
-            (funcall washer section) ; already partially washed (hunk)
-          (goto-char (oref section end))
-          (oset section content (point-marker))
-          (funcall washer)
-          (oset section end (point-marker)))))
-    (magit-section-update-highlight))
-  (when-let ((beg (oref section content)))
-    (remove-overlays beg (oref section end) 'invisible t))
-  (magit-section-maybe-cache-visibility section)
-  (dolist (child (oref section children))
-    (if (oref child hidden)
-        (magit-section-hide child)
-      (magit-section-show child))))
-
-(defun magit-section-hide (section)
-  "Hide the body of the current section."
-  (interactive (list (magit-current-section)))
-  (if (eq section magit-root-section)
-      (user-error "Cannot hide root section")
-    (oset section hidden t)
-    (when-let ((beg (oref section content)))
-      (let ((end (oref section end)))
-        (remove-overlays beg end 'invisible t)
-        (let ((o (make-overlay beg end)))
-          (overlay-put o 'evaporate t)
-          (overlay-put o 'invisible t))))
-    (magit-section-maybe-cache-visibility section)))
-
-(defun magit-section-toggle (section)
-  "Toggle visibility of the body of the current section."
-  (interactive (list (magit-current-section)))
-  (if (eq section magit-root-section)
-      (user-error "Cannot hide root section")
-    (goto-char (oref section start))
-    (if (oref section hidden)
-        (magit-section-show section)
-      (magit-section-hide section))))
-
-(defun magit-section-toggle-children (section)
-  "Toggle visibility of bodies of children of the current section."
-  (interactive (list (magit-current-section)))
-  (goto-char (oref section start))
-  (let* ((children (oref section children))
-         (show (--any-p (oref it hidden) children)))
-    (dolist (c children)
-      (oset c hidden show)))
-  (magit-section-show section))
-
-(defun magit-section-show-children (section &optional depth)
-  "Recursively show the bodies of children of the current section.
-With a prefix argument show children that deep and hide deeper
-children."
-  (interactive (list (magit-current-section)))
-  (magit-section-show-children-1 section depth)
-  (magit-section-show section))
-
-(defun magit-section-show-children-1 (section &optional depth)
-  (dolist (child (oref section children))
-    (oset child hidden nil)
-    (if depth
-        (if (> depth 0)
-            (magit-section-show-children-1 child (1- depth))
-          (magit-section-hide child))
-      (magit-section-show-children-1 child))))
-
-(defun magit-section-hide-children (section)
-  "Recursively hide the bodies of children of the current section."
-  (interactive (list (magit-current-section)))
-  (mapc 'magit-section-hide (oref section children)))
-
-(defun magit-section-show-headings (section)
-  "Recursively show headings of children of the current section.
-Only show the headings, previously shown text-only bodies are
-hidden."
-  (interactive (list (magit-current-section)))
-  (magit-section-show-headings-1 section)
-  (magit-section-show section))
-
-(defun magit-section-show-headings-1 (section)
-  (dolist (child (oref section children))
-    (oset child hidden nil)
-    (when (or (oref child children)
-              (not (oref child content)))
-      (magit-section-show-headings-1 child))))
-
-(defun magit-section-cycle (section)
-  "Cycle visibility of current section and its children."
-  (interactive (list (magit-current-section)))
-  (goto-char (oref section start))
-  (if (oref section hidden)
-      (progn (magit-section-show section)
-             (magit-section-hide-children section))
-    (let ((children (oref section children)))
-      (cond ((and (--any-p (oref it hidden)   children)
-                  (--any-p (oref it children) children))
-             (magit-section-show-headings section))
-            ((-any-p 'magit-section-hidden-body children)
-             (magit-section-show-children section))
-            (t
-             (magit-section-hide section))))))
-
-(defun magit-section-cycle-global ()
-  "Cycle visibility of all sections in the current buffer."
-  (interactive)
-  (let ((children (oref magit-root-section children)))
-    (cond ((and (--any-p (oref it hidden)   children)
-                (--any-p (oref it children) children))
-           (magit-section-show-headings magit-root-section))
-          ((-any-p 'magit-section-hidden-body children)
-           (magit-section-show-children magit-root-section))
-          (t
-           (mapc 'magit-section-hide children)))))
-
-(defun magit-section-cycle-diffs ()
-  "Cycle visibility of diff-related sections in the current buffer."
-  (interactive)
-  (when-let ((sections
-              (cond ((derived-mode-p 'magit-status-mode)
-                     (--mapcat
-                      (when it
-                        (when (oref it hidden)
-                          (magit-section-show it))
-                        (oref it children))
-                      (list (magit-get-section '((staged)   (status)))
-                            (magit-get-section '((unstaged) (status))))))
-                    ((derived-mode-p 'magit-diff-mode)
-                     (-filter #'magit-file-section-p
-                              (oref magit-root-section children))))))
-    (if (--any-p (oref it hidden) sections)
-        (dolist (s sections)
-          (magit-section-show s)
-          (magit-section-hide-children s))
-      (let ((children (--mapcat (oref it children) sections)))
-        (cond ((and (--any-p (oref it hidden)   children)
-                    (--any-p (oref it children) children))
-               (mapc 'magit-section-show-headings sections))
-              ((-any-p 'magit-section-hidden-body children)
-               (mapc 'magit-section-show-children sections))
-              (t
-               (mapc 'magit-section-hide sections)))))))
-
-(defun magit-section-hidden-body (section &optional pred)
-  (--if-let (oref section children)
-      (funcall (or pred '-any-p) 'magit-section-hidden-body it)
-    (and (oref section content)
-         (oref section hidden))))
-
-(defun magit-section-invisible-p (section)
-  "Return t if the SECTION's body is invisible.
-When the body of an ancestor of SECTION is collapsed then
-SECTION's body (and heading) obviously cannot be visible."
-  (or (oref section hidden)
-      (--when-let (oref section parent)
-        (magit-section-invisible-p it))))
-
-(defun magit-section-show-level (level)
-  "Show surrounding sections up to LEVEL.
-If LEVEL is negative, show up to the absolute value.
-Sections at higher levels are hidden."
-  (if (< level 0)
-      (let ((s (magit-current-section)))
-        (setq level (- level))
-        (while (> (1- (length (magit-section-ident s))) level)
-          (setq s (oref s parent))
-          (goto-char (oref s start)))
-        (magit-section-show-children magit-root-section (1- level)))
-    (cl-do* ((s (magit-current-section)
-                (oref s parent))
-             (i (1- (length (magit-section-ident s)))
-                (cl-decf i)))
-        ((cond ((< i level) (magit-section-show-children s (- level i 1)) t)
-               ((= i level) (magit-section-hide s) t))
-         (magit-section-goto s)))))
-
-(defun magit-section-show-level-1 ()
-  "Show surrounding sections on first level."
-  (interactive)
-  (magit-section-show-level 1))
-
-(defun magit-section-show-level-1-all ()
-  "Show all sections on first level."
-  (interactive)
-  (magit-section-show-level -1))
-
-(defun magit-section-show-level-2 ()
-  "Show surrounding sections up to second level."
-  (interactive)
-  (magit-section-show-level 2))
-
-(defun magit-section-show-level-2-all ()
-  "Show all sections up to second level."
-  (interactive)
-  (magit-section-show-level -2))
-
-(defun magit-section-show-level-3 ()
-  "Show surrounding sections up to third level."
-  (interactive)
-  (magit-section-show-level 3))
-
-(defun magit-section-show-level-3-all ()
-  "Show all sections up to third level."
-  (interactive)
-  (magit-section-show-level -3))
-
-(defun magit-section-show-level-4 ()
-  "Show surrounding sections up to fourth level."
-  (interactive)
-  (magit-section-show-level 4))
-
-(defun magit-section-show-level-4-all ()
-  "Show all sections up to fourth level."
-  (interactive)
-  (magit-section-show-level -4))
-
-;;;; Auxiliary
-
-(defun magit-describe-section-briefly (section &optional message ident)
-  "Show information about the section at point.
-With a prefix argument show the section identity instead of the
-section lineage.  This command is intended for debugging purposes."
-  (interactive (list (magit-current-section) t))
-  (let ((str (format "#<magit-section %S %S %s-%s>"
-                     (let ((val (oref section value)))
-                       (if (stringp val)
-                           (substring-no-properties val)
-                         val))
-                     (if ident
-                         (magit-section-ident section)
-                       (magit-section-lineage section))
-                     (when-let ((m (oref section start)))
-                       (marker-position m))
-                     (when-let ((m (oref section end)))
-                       (marker-position m)))))
-    (if message (message "%s" str) str)))
-
-(cl-defmethod cl-print-object ((section magit-section) stream)
-  "Print `magit-describe-section' result of SECTION."
-  ;; Used by debug and edebug as of Emacs 26.
-  (princ (magit-describe-section-briefly section) stream))
-
-(defun magit-describe-section (section &optional interactive-p)
-  "Show information about the section at point."
-  (interactive (list (magit-current-section) t))
-  (let ((inserter-section section))
-    (while (and inserter-section (not (oref inserter-section inserter)))
-      (setq inserter-section (oref inserter-section parent)))
-    (when (and inserter-section (oref inserter-section inserter))
-      (setq section inserter-section)))
-  (pcase (oref section inserter)
-    (`((,hook ,fun) . ,src-src)
-     (help-setup-xref `(magit-describe-section ,section) interactive-p)
-     (with-help-window (help-buffer)
-       (with-current-buffer standard-output
-         (insert (format-message
-                  "%s\n  is inserted by `%s'\n  from `%s'"
-                  (magit-describe-section-briefly section)
-                  (make-text-button (symbol-name fun) nil
-                                    :type 'help-function
-                                    'help-args (list fun))
-                  (make-text-button (symbol-name hook) nil
-                                    :type 'help-variable
-                                    'help-args (list hook))))
-         (pcase-dolist (`(,hook ,fun) src-src)
-           (insert (format-message
-                    ",\n  called by `%s'\n  from `%s'"
-                    (make-text-button (symbol-name fun) nil
-                                      :type 'help-function
-                                      'help-args (list fun))
-                    (make-text-button (symbol-name hook) nil
-                                      :type 'help-variable
-                                      'help-args (list hook)))))
-         (insert ".\n\n")
-         (insert
-          (format-message
-           "`%s' is "
-           (make-text-button (symbol-name fun) nil
-                             :type 'help-function 'help-args (list fun))))
-         (describe-function-1 fun))))
-    (_ (message "%s, inserter unknown"
-                (magit-describe-section-briefly section)))))
-
-;;; Match
-
-(cl-defun magit-section-match
-    (condition &optional (section (magit-current-section)))
-  "Return t if SECTION matches CONDITION.
-
-SECTION defaults to the section at point.  If SECTION is not
-specified and there also is no section at point, then return
-nil.
-
-CONDITION can take the following forms:
-  (CONDITION...)  matches if any of the CONDITIONs matches.
-  [TYPE...]       matches if the first TYPE matches the type
-                  of the section, the second matches that of
-                  its parent, and so on.
-  [* TYPE...]     matches sections that match [TYPE...] and
-                  also recursively all their child sections.
-  TYPE            matches sections of TYPE regardless of the
-                  types of the parent sections.
-
-Each TYPE is a symbol.  Note that it is not necessary to specify
-all TYPEs up to the root section as printed by
-`magit-describe-type', unless of course you want to be that
-precise."
-  (and section
-       (magit-section-match-1 condition
-                              (mapcar #'car (magit-section-ident section)))))
-
-(defun magit-section-match-1 (condition type-list)
-  (if (listp condition)
-      (--first (magit-section-match-1 it type-list) condition)
-    (magit-section-match-2 (if (symbolp condition)
-                               (list condition)
-                             (append condition nil))
-                           type-list)))
-
-(defun magit-section-match-2 (l1 l2)
-  (or (null l1)
-      (if (eq (car l1) '*)
-          (or (magit-section-match-2 (cdr l1) l2)
-              (and l2
-                   (magit-section-match-2 l1 (cdr l2))))
-        (and l2
-             (equal (car l1) (car l2))
-             (magit-section-match-2 (cdr l1) (cdr l2))))))
-
-(defmacro magit-section-when (condition &rest body)
-  "If the section at point matches CONDITION, evaluate BODY.
-
-If the section matches, then evaluate BODY forms sequentially
-with `it' bound to the section and return the value of the last
-form.  If there are no BODY forms, then return the value of the
-section.  If the section does not match or if there is no section
-at point, then return nil.
-
-See `magit-section-match' for the forms CONDITION can take."
-  (declare (indent 1)
-           (debug (sexp body)))
-  `(--when-let (magit-current-section)
-     ;; Quoting CONDITION here often leads to double-quotes, which
-     ;; isn't an issue because `magit-section-match-1' implicitly
-     ;; deals with that.  We shouldn't force users of this function
-     ;; to not quote CONDITION because that would needlessly break
-     ;; backward compatibility.
-     (when (magit-section-match ',condition it)
-       ,@(or body '((oref it value))))))
-
-(defmacro magit-section-case (&rest clauses)
-  "Choose among clauses on the type of the section at point.
-
-Each clause looks like (CONDITION BODY...).  The type of the
-section is compared against each CONDITION; the BODY forms of the
-first match are evaluated sequentially and the value of the last
-form is returned.  Inside BODY the symbol `it' is bound to the
-section at point.  If no clause succeeds or if there is no
-section at point, return nil.
-
-See `magit-section-match' for the forms CONDITION can take.
-Additionally a CONDITION of t is allowed in the final clause, and
-matches if no other CONDITION match, even if there is no section
-at point."
-  (declare (indent 0)
-           (debug (&rest (sexp body))))
-  (let ((lineage (cl-gensym "lineage")))
-    `(let* ((it (magit-current-section))
-            (,lineage (and it (append (magit-section-lineage it) nil))))
-       (cond ,@(mapcar (lambda (clause)
-                         `(,(or (eq (car clause) t)
-                                `(and it (magit-section-match-1
-                                          ',(car clause) ,lineage)))
-                           ,@(cdr clause)))
-                       clauses)))))
-
-(defun magit-section-match-assoc (section alist)
-  "Return the value associated with SECTION's type or lineage in ALIST."
-  (let ((ident (mapcar #'car (magit-section-ident section))))
-    (-some (pcase-lambda (`(,key . ,val))
-             (and (magit-section-match-1 key ident) val))
-           alist)))
-
-;;; Create
-
-(defvar magit-insert-section-hook nil
-  "Hook run after `magit-insert-section's BODY.
-Avoid using this hook and only ever do so if you know
-what you are doing and are sure there is no other way.")
-
-(defmacro magit-insert-section (&rest args)
-  "Insert a section at point.
-
-TYPE is the section type, a symbol.  Many commands that act on
-the current section behave differently depending on that type.
-Also if a variable `magit-TYPE-section-map' exists, then use
-that as the text-property `keymap' of all text belonging to the
-section (but this may be overwritten in subsections).  TYPE can
-also have the form `(eval FORM)' in which case FORM is evaluated
-at runtime.
-
-Optional VALUE is the value of the section, usually a string
-that is required when acting on the section.
-
-When optional HIDE is non-nil collapse the section body by
-default, i.e. when first creating the section, but not when
-refreshing the buffer.  Else expand it by default.  This can be
-overwritten using `magit-section-set-visibility-hook'.  When a
-section is recreated during a refresh, then the visibility of
-predecessor is inherited and HIDE is ignored (but the hook is
-still honored).
-
-BODY is any number of forms that actually insert the section's
-heading and body.  Optional NAME, if specified, has to be a
-symbol, which is then bound to the struct of the section being
-inserted.
-
-Before BODY is evaluated the `start' of the section object is set
-to the value of `point' and after BODY was evaluated its `end' is
-set to the new value of `point'; BODY is responsible for moving
-`point' forward.
-
-If it turns out inside BODY that the section is empty, then
-`magit-cancel-section' can be used to abort and remove all traces
-of the partially inserted section.  This can happen when creating
-a section by washing Git's output and Git didn't actually output
-anything this time around.
-
-\(fn [NAME] (TYPE &optional VALUE HIDE) &rest BODY)"
-  (declare (indent defun)
-           (debug ([&optional symbolp]
-                   (&or [("eval" symbolp) &optional form form]
-                        [symbolp &optional form form])
-                   body)))
-  (let ((tp (cl-gensym "type"))
-        (s* (and (symbolp (car args))
-                 (pop args)))
-        (s  (cl-gensym "section")))
-    `(let* ((,tp ,(let ((type (nth 0 (car args))))
-                    (if (eq (car-safe type) 'eval)
-                        (cadr type)
-                      `',type)))
-            (,s (funcall (pcase ,tp
-                           (`file 'magit-file-section)
-                           (`hunk 'magit-hunk-section)
-                           (_     'magit-section))
-                         :type ,tp
-                         :value ,(nth 1 (car args))
-                         :start (point-marker)
-                         :parent magit-insert-section--parent)))
-       (oset ,s hidden
-             (if-let ((value (run-hook-with-args-until-success
-                              'magit-section-set-visibility-hook ,s)))
-                 (eq value 'hide)
-               (if-let ((incarnation (and magit-insert-section--oldroot
-                                          (magit-get-section
-                                           (magit-section-ident ,s)
-                                           magit-insert-section--oldroot))))
-                   (oref incarnation hidden)
-                 (if-let ((value (magit-section-match-assoc
-                                  ,s magit-section-initial-visibility-alist)))
-                     (progn
-                       (when (functionp value)
-                         (setq value (funcall value ,s)))
-                       (eq value 'hide))
-                   ,(nth 2 (car args))))))
-       (let ((magit-insert-section--current ,s)
-             (magit-insert-section--parent  ,s)
-             (magit-insert-section--oldroot
-              (or magit-insert-section--oldroot
-                  (unless magit-insert-section--parent
-                    (prog1 magit-root-section
-                      (setq magit-root-section ,s))))))
-         (catch 'cancel-section
-           ,@(if s*
-                 `((let ((,s* ,s))
-                     ,@(cdr args)))
-               (cdr args))
-           ;; `magit-insert-section-hook' should *not* be run with
-           ;; `magit-run-section-hook' because it's a hook that runs
-           ;; on section insertion, not a section inserting hook.
-           (run-hooks 'magit-insert-section-hook)
-           (magit-insert-child-count ,s)
-           (set-marker-insertion-type (oref ,s start) t)
-           (let* ((end (oset ,s end (point-marker)))
-                  (map (intern (format "magit-%s-section-map" (oref ,s type))))
-                  (map (and (boundp map) (symbol-value map))))
-             (save-excursion
-               (goto-char (oref ,s start))
-               (while (< (point) end)
-                 (let ((next (or (next-single-property-change
-                                  (point) 'magit-section)
-                                 end)))
-                   (unless (get-text-property (point) 'magit-section)
-                     (put-text-property (point) next 'magit-section ,s)
-                     (when map
-                       (put-text-property (point) next 'keymap map)))
-                   (goto-char next)))))
-           (if (eq ,s magit-root-section)
-               (let ((magit-section-cache-visibility nil))
-                 (magit-section-show ,s))
-             (oset (oref ,s parent) children
-                   (nconc (oref (oref ,s parent) children)
-                          (list ,s)))))
-         ,s))))
-
-(defun magit-cancel-section ()
-  (when magit-insert-section--current
-    (if (not (oref magit-insert-section--current parent))
-        (insert "(empty)\n")
-      (delete-region (oref magit-insert-section--current start)
-                     (point))
-      (setq magit-insert-section--current nil)
-      (throw 'cancel-section nil))))
-
-(defun magit-insert-heading (&rest args)
-  "Insert the heading for the section currently being inserted.
-
-This function should only be used inside `magit-insert-section'.
-
-When called without any arguments, then just set the `content'
-slot of the object representing the section being inserted to
-a marker at `point'.  The section should only contain a single
-line when this function is used like this.
-
-When called with arguments ARGS, which have to be strings, or
-nil, then insert those strings at point.  The section should not
-contain any text before this happens and afterwards it should
-again only contain a single line.  If the `face' property is set
-anywhere inside any of these strings, then insert all of them
-unchanged.  Otherwise use the `magit-section-heading' face for
-all inserted text.
-
-The `content' property of the section struct is the end of the
-heading (which lasts from `start' to `content') and the beginning
-of the the body (which lasts from `content' to `end').  If the
-value of `content' is nil, then the section has no heading and
-its body cannot be collapsed.  If a section does have a heading,
-then its height must be exactly one line, including a trailing
-newline character.  This isn't enforced, you are responsible for
-getting it right.  The only exception is that this function does
-insert a newline character if necessary."
-  (declare (indent defun))
-  (when args
-    (let ((heading (apply #'concat args)))
-      (insert (if (text-property-not-all 0 (length heading) 'face nil heading)
-                  heading
-                (propertize heading 'face 'magit-section-heading)))))
-  (unless (bolp)
-    (insert ?\n))
-  (magit-maybe-make-margin-overlay)
-  (oset magit-insert-section--current content (point-marker)))
-
-(defun magit-insert-headers (hook)
-  (let* ((header-sections nil)
-         (magit-insert-section-hook
-          (cons (lambda ()
-                  (push magit-insert-section--current
-                        header-sections))
-                (if (listp magit-insert-section-hook)
-                    magit-insert-section-hook
-                  (list magit-insert-section-hook)))))
-    (magit-run-section-hook hook)
-    (when header-sections
-      (insert "\n")
-      ;; Make the first header into the parent of the rest.
-      (when (cdr header-sections)
-        (cl-callf nreverse header-sections)
-        (let* ((1st-header (pop header-sections))
-               (header-parent (oref 1st-header parent)))
-          (oset header-parent children (list 1st-header))
-          (oset 1st-header children header-sections)
-          (oset 1st-header content (oref (car header-sections) start))
-          (oset 1st-header end (oref (car (last header-sections)) end))
-          (dolist (sub-header header-sections)
-            (oset sub-header parent 1st-header)))))))
-
-(defun magit-insert-child-count (section)
-  "Modify SECTION's heading to contain number of child sections.
-
-If `magit-section-show-child-count' is non-nil and the SECTION
-has children and its heading ends with \":\", then replace that
-with \" (N)\", where N is the number of child sections.
-
-This function is called by `magit-insert-section' after that has
-evaluated its BODY.  Admittedly that's a bit of a hack."
-  ;; This has to be fast, not pretty!
-  (let (content count)
-    (when (and magit-section-show-child-count
-               (setq count (length (oref section children)))
-               (> count 0)
-               (setq content (oref section content))
-               (eq (char-before (1- content)) ?:))
-      (save-excursion
-        (goto-char (- content 2))
-        (insert (format " (%s)" count))
-        (delete-char 1)))))
-
-;;; Update
-
-(defvar-local magit-section-highlight-overlays nil)
-(defvar-local magit-section-highlighted-section nil)
-(defvar-local magit-section-highlighted-sections nil)
-(defvar-local magit-section-unhighlight-sections nil)
-
-(defun magit-section-update-region (_)
-  "When the region is a valid section-selection, highlight them all."
-  ;; At least that's what it does conceptually.  In actuality it just
-  ;; returns a list of those sections, and it doesn't even matter if
-  ;; this is a member of `magit-region-highlight-hook'.  It probably
-  ;; should be removed, but I want to make sure before removing it.
-  (magit-region-sections))
-
-(defun magit-section-update-highlight ()
-  (let ((section (magit-current-section)))
-    (unless (eq section magit-section-highlighted-section)
-      (let ((inhibit-read-only t)
-            (deactivate-mark nil)
-            (selection (magit-region-sections)))
-        (mapc #'delete-overlay magit-section-highlight-overlays)
-        (setq magit-section-highlight-overlays nil)
-        (setq magit-section-unhighlight-sections
-              magit-section-highlighted-sections)
-        (setq magit-section-highlighted-sections nil)
-        (unless (eq section magit-root-section)
-          (run-hook-with-args-until-success
-           'magit-section-highlight-hook section selection))
-        (dolist (s magit-section-unhighlight-sections)
-          (run-hook-with-args-until-success
-           'magit-section-unhighlight-hook s selection))
-        (restore-buffer-modified-p nil)
-        (unless (eq magit-section-highlighted-section section)
-          (setq magit-section-highlighted-section
-                (and (not (oref section hidden))
-                     section))))
-      (when (version< emacs-version "25.1")
-        (setq deactivate-mark nil)))))
-
-(defun magit-section-highlight (section selection)
-  "Highlight SECTION and if non-nil all sections in SELECTION.
-This function works for any section but produces undesirable
-effects for diff related sections, which by default are
-highlighted using `magit-diff-highlight'.  Return t."
-  (when-let ((face (oref section heading-highlight-face)))
-    (dolist (section (or selection (list section)))
-      (magit-section-make-overlay
-       (oref section start)
-       (or (oref section content)
-           (oref section end))
-       face)))
-  (cond (selection
-         (magit-section-make-overlay (oref (car selection) start)
-                                     (oref (car (last selection)) end)
-                                     'magit-section-highlight)
-         (magit-section-highlight-selection nil selection))
-        (t
-         (magit-section-make-overlay (oref section start)
-                                     (oref section end)
-                                     'magit-section-highlight)))
-  t)
-
-(defun magit-section-highlight-selection (_ selection)
-  "Highlight the section-selection region.
-If SELECTION is non-nil, then it is a list of sections selected by
-the region.  The headings of these sections are then highlighted.
-
-This is a fallback for people who don't want to highlight the
-current section and therefore removed `magit-section-highlight'
-from `magit-section-highlight-hook'.
-
-This function is necessary to ensure that a representation of
-such a region is visible.  If neither of these functions were
-part of the hook variable, then such a region would be
-invisible."
-  (when (and selection
-             (not (and (eq this-command 'mouse-drag-region))))
-    (dolist (section selection)
-      (magit-section-make-overlay (oref section start)
-                                  (or (oref section content)
-                                      (oref section end))
-                                  'magit-section-heading-selection))
-    t))
-
-(defun magit-section-make-overlay (start end face)
-  ;; Yes, this doesn't belong here.  But the alternative of
-  ;; spreading this hack across the code base is even worse.
-  (when (and magit-keep-region-overlay
-             (memq face '(magit-section-heading-selection
-                          magit-diff-file-heading-selection
-                          magit-diff-hunk-heading-selection)))
-    (setq face (list :foreground (face-foreground face))))
-  (let ((ov (make-overlay start end nil t)))
-    (overlay-put ov 'face face)
-    (overlay-put ov 'evaporate t)
-    (push ov magit-section-highlight-overlays)
-    ov))
-
-(defun magit-section-goto-successor (section line char arg)
-  (let ((ident (magit-section-ident section)))
-    (--if-let (magit-get-section ident)
-        (let ((start (oref it start)))
-          (goto-char start)
-          (unless (eq it magit-root-section)
-            (ignore-errors
-              (forward-line line)
-              (forward-char char))
-            (unless (eq (magit-current-section) it)
-              (goto-char start))))
-      (or (and (magit-hunk-section-p section)
-               (when-let ((parent (magit-get-section
-                                   (magit-section-ident
-                                    (oref section parent)))))
-                 (let* ((children (oref parent children))
-                        (siblings (magit-section-siblings section 'prev))
-                        (previous (nth (length siblings) children)))
-                   (if (not arg)
-                       (--when-let (or previous (car (last children)))
-                         (magit-section-goto it)
-                         t)
-                     (when previous
-                       (magit-section-goto previous))
-                     (if (and (stringp arg)
-                              (re-search-forward arg (oref parent end) t))
-                         (goto-char (match-beginning 0))
-                       (goto-char (oref (car (last children)) end))
-                       (forward-line -1)
-                       (while (looking-at "^ ")    (forward-line -1))
-                       (while (looking-at "^[-+]") (forward-line -1))
-                       (forward-line))))))
-          (goto-char (--if-let (magit-section-goto-successor-1 section)
-                         (if (eq (oref it type) 'button)
-                             (point-min)
-                           (oref it start))
-                       (point-min)))))))
-
-(defun magit-section-goto-successor-1 (section)
-  (or (--when-let (pcase (oref section type)
-                    (`staged 'unstaged)
-                    (`unstaged 'staged)
-                    (`unpushed 'unpulled)
-                    (`unpulled 'unpushed))
-        (magit-get-section `((,it) (status))))
-      (--when-let (car (magit-section-siblings section 'next))
-        (magit-get-section (magit-section-ident it)))
-      (--when-let (car (magit-section-siblings section 'prev))
-        (magit-get-section (magit-section-ident it)))
-      (--when-let (oref section parent)
-        (or (magit-get-section (magit-section-ident it))
-            (magit-section-goto-successor-1 it)))))
-
-;;; Visibility
-
-(defvar-local magit-section-visibility-cache nil)
-(put 'magit-section-visibility-cache 'permanent-local t)
-
-(defun magit-section-cached-visibility (section)
-  "Set SECTION's visibility to the cached value."
-  (cdr (assoc (magit-section-ident section)
-              magit-section-visibility-cache)))
-
-(cl-defun magit-section-cache-visibility
-    (&optional (section magit-insert-section--current))
-  ;; Emacs 25's `alist-get' lacks TESTFN.
-  (let* ((id  (magit-section-ident section))
-         (elt (assoc id magit-section-visibility-cache))
-         (val (if (oref section hidden) 'hide 'show)))
-    (if elt
-        (setcdr elt val)
-      (push (cons id val) magit-section-visibility-cache))))
-
-(cl-defun magit-section-maybe-cache-visibility
-    (&optional (section magit-insert-section--current))
-  (when (or (eq magit-section-cache-visibility t)
-            (memq (oref section type)
-                  magit-section-cache-visibility))
-    (magit-section-cache-visibility section)))
-
-(defun magit-preserve-section-visibility-cache ()
-  (when (derived-mode-p 'magit-status-mode 'magit-refs-mode)
-    (magit-repository-local-set
-     (cons major-mode 'magit-section-visibility-cache)
-     magit-section-visibility-cache)))
-
-(defun magit-restore-section-visibility-cache (mode)
-  (setq magit-section-visibility-cache
-        (magit-repository-local-get
-         (cons mode 'magit-section-visibility-cache))))
-
-;;; Utilities
-
-(cl-defun magit-section-selected-p (section &optional (selection nil sselection))
-  (and (not (eq section magit-root-section))
-       (or  (eq section (magit-current-section))
-            (memq section (if sselection
-                              selection
-                            (setq selection (magit-region-sections))))
-            (--when-let (oref section parent)
-              (magit-section-selected-p it selection)))))
-
-(defun magit-section-parent-value (section)
-  (when-let ((parent (oref section parent)))
-    (oref parent value)))
-
-(defun magit-section-siblings (section &optional direction)
-  "Return a list of the sibling sections of SECTION.
-
-If optional DIRECTION is `prev', then return siblings that come
-before SECTION.  If it is `next', then return siblings that come
-after SECTION.  For all other values, return all siblings
-excluding SECTION itself."
-  (when-let ((parent (oref section parent)))
-    (let ((siblings (oref parent children)))
-      (pcase direction
-        (`prev  (cdr (member section (reverse siblings))))
-        (`next  (cdr (member section siblings)))
-        (_      (remq section siblings))))))
-
-(defun magit-region-values (&optional types multiple)
-  "Return a list of the values of the selected sections.
-
-Also see `magit-region-sections' whose doc-string explains when a
-region is a valid section selection.  If the region is not active
-or is not a valid section selection, then return nil.  If optional
-TYPES is non-nil then the selection not only has to be valid; the
-types of all selected sections additionally have to match one of
-TYPES, or nil is returned."
-  (--map (oref it value)
-         (magit-region-sections types multiple)))
-
-(defun magit-region-sections (&optional types multiple)
-  "Return a list of the selected sections.
-
-When the region is active and constitutes a valid section
-selection, then return a list of all selected sections.  This is
-the case when the region begins in the heading of a section and
-ends in the heading of the same section or in that of a sibling
-section.  If optional MULTIPLE is non-nil, then the region cannot
-begin and end in the same section.
-
-When the selection is not valid, then return nil.  In this case,
-most commands that can act on the selected sections will instead
-act on the section at point.
-
-When the region looks like it would in any other buffer then
-the selection is invalid.  When the selection is valid then the
-region uses the `magit-section-highlight' face.  This does not
-apply to diffs where things get a bit more complicated, but even
-here if the region looks like it usually does, then that's not
-a valid selection as far as this function is concerned.
-
-If optional TYPES is non-nil, then the selection not only has to
-be valid; the types of all selected sections additionally have
-to match one of TYPES, or nil is returned.  TYPES can also be a
-single type, instead of a list of types."
-  (when (region-active-p)
-    (let* ((rbeg (region-beginning))
-           (rend (region-end))
-           (sbeg (get-text-property rbeg 'magit-section))
-           (send (get-text-property rend 'magit-section)))
-      (when (and send
-                 (not (eq send magit-root-section))
-                 (not (and multiple (eq send sbeg))))
-        (let ((siblings (cons sbeg (magit-section-siblings sbeg 'next)))
-              sections)
-          (when (and (memq send siblings)
-                     (magit-section-position-in-heading-p sbeg rbeg)
-                     (magit-section-position-in-heading-p send rend))
-            (while siblings
-              (push (car siblings) sections)
-              (when (eq (pop siblings) send)
-                (setq siblings nil)))
-            (setq sections (nreverse sections))
-            (when (and types (symbolp types))
-              (setq types (list types)))
-            (when (or (not types)
-                      (--all-p (memq (oref it type) types) sections))
-              sections)))))))
-
-(defun magit-section-position-in-heading-p (&optional section pos)
-  "Return t if POSITION is inside the heading of SECTION.
-POSITION defaults to point and SECTION defaults to the
-current section."
-  (unless section
-    (setq section (magit-current-section)))
-  (unless pos
-    (setq pos (point)))
-  (and section
-       (>= pos (oref section start))
-       (<  pos (or (oref section content)
-                   (oref section end)))
-       t))
-
-(defun magit-section-internal-region-p (&optional section)
-  "Return t if the region is active and inside SECTION's body.
-If optional SECTION is nil, use the current section."
-  (and (region-active-p)
-       (or section (setq section (magit-current-section)))
-       (let ((beg (get-text-property (region-beginning) 'magit-section)))
-         (and (eq beg (get-text-property   (region-end) 'magit-section))
-              (eq beg section)))
-       (not (or (magit-section-position-in-heading-p section (region-beginning))
-                (magit-section-position-in-heading-p section (region-end))))
-       t))
-
-(defun magit-section--backward-protected ()
-  "Move to the beginning of the current or the previous visible section.
-Same as `magit-section-backward' but for non-interactive use.
-Suppress `magit-section-movement-hook', and return a boolean to
-indicate whether a section was found, instead of raising an error
-if not."
-  (condition-case nil
-      (let ((magit-section-movement-hook nil))
-        (magit-section-backward)
-        t)
-    (user-error nil)))
-
-(defun magit-section--backward-find (predicate)
-  "Move to the first previous section satisfying PREDICATE.
-PREDICATE does not take any parameter and should not move
-point."
-  (let (found)
-    (while (and (setq found (magit-section--backward-protected))
-                (not (funcall predicate))))
-    found))
-
-(defun magit-wash-sequence (function)
-  "Repeatedly call FUNCTION until it returns nil or eob is reached.
-FUNCTION has to move point forward or return nil."
-  (while (and (not (eobp)) (funcall function))))
-
-(defun magit-add-section-hook (hook function &optional at append local)
-  "Add to the value of section hook HOOK the function FUNCTION.
-
-Add FUNCTION at the beginning of the hook list unless optional
-APPEND is non-nil, in which case FUNCTION is added at the end.
-If FUNCTION already is a member, then move it to the new location.
-
-If optional AT is non-nil and a member of the hook list, then
-add FUNCTION next to that instead.  Add before or after AT, or
-replace AT with FUNCTION depending on APPEND.  If APPEND is the
-symbol `replace', then replace AT with FUNCTION.  For any other
-non-nil value place FUNCTION right after AT.  If nil, then place
-FUNCTION right before AT.  If FUNCTION already is a member of the
-list but AT is not, then leave FUNCTION where ever it already is.
-
-If optional LOCAL is non-nil, then modify the hook's buffer-local
-value rather than its global value.  This makes the hook local by
-copying the default value.  That copy is then modified.
-
-HOOK should be a symbol.  If HOOK is void, it is first set to nil.
-HOOK's value must not be a single hook function.  FUNCTION should
-be a function that takes no arguments and inserts one or multiple
-sections at point, moving point forward.  FUNCTION may choose not
-to insert its section(s), when doing so would not make sense.  It
-should not be abused for other side-effects.  To remove FUNCTION
-again use `remove-hook'."
-  (unless (boundp hook)
-    (error "Cannot add function to undefined hook variable %s" hook))
-  (or (default-boundp hook) (set-default hook nil))
-  (let ((value (if local
-                   (if (local-variable-p hook)
-                       (symbol-value hook)
-                     (unless (local-variable-if-set-p hook)
-                       (make-local-variable hook))
-                     (copy-sequence (default-value hook)))
-                 (default-value hook))))
-    (if at
-        (when (setq at (member at value))
-          (setq value (delq function value))
-          (cond ((eq append 'replace)
-                 (setcar at function))
-                (append
-                 (push function (cdr at)))
-                (t
-                 (push (car at) (cdr at))
-                 (setcar at function))))
-      (setq value (delq function value)))
-    (unless (member function value)
-      (setq value (if append
-                      (append value (list function))
-                    (cons function value))))
-    (when (eq append 'replace)
-      (setq value (delq at value)))
-    (if local
-        (set hook value)
-      (set-default hook value))))
-
-(defun magit-run-section-hook (hook &rest args)
-  "Run HOOK with ARGS, warning about invalid entries."
-  (let ((entries (symbol-value hook)))
-    (unless (listp entries)
-      (setq entries (list entries)))
-    (--when-let (-remove #'functionp entries)
-      (message "`%s' contains entries that are no longer valid.
-%s\nUsing standard value instead.  Please re-configure hook variable."
-               hook
-               (mapconcat (lambda (sym) (format "  `%s'" sym)) it "\n"))
-      (sit-for 5)
-      (setq entries (eval (car (get hook 'standard-value)))))
-    (dolist (entry entries)
-      (let ((magit--current-section-hook (cons (list hook entry)
-                                               magit--current-section-hook)))
-        (apply entry args)))))
-
-(provide 'magit-section)
-;;; magit-section.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.elc
deleted file mode 100644
index 4d761ed73b6a..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-section.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.el
deleted file mode 100644
index 905b533c7eec..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.el
+++ /dev/null
@@ -1,908 +0,0 @@
-;;; magit-sequence.el --- history manipulation in Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Support for Git commands that replay commits and help the user make
-;; changes along the way.  Supports `cherry-pick', `revert', `rebase',
-;; `rebase--interactive' and `am'.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Options
-;;;; Faces
-
-(defface magit-sequence-pick
-  '((t :inherit default))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-stop
-  '((((class color) (background light)) :foreground "DarkOliveGreen4")
-    (((class color) (background dark))  :foreground "DarkSeaGreen2"))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-part
-  '((((class color) (background light)) :foreground "Goldenrod4")
-    (((class color) (background dark))  :foreground "LightGoldenrod2"))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-head
-  '((((class color) (background light)) :foreground "SkyBlue4")
-    (((class color) (background dark))  :foreground "LightSkyBlue1"))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-drop
-  '((((class color) (background light)) :foreground "IndianRed")
-    (((class color) (background dark))  :foreground "IndianRed"))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-done
-  '((t :inherit magit-hash))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-onto
-  '((t :inherit magit-sequence-done))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-(defface magit-sequence-exec
-  '((t :inherit magit-hash))
-  "Face used in sequence sections."
-  :group 'magit-faces)
-
-;;; Common
-
-;;;###autoload
-(defun magit-sequencer-continue ()
-  "Resume the current cherry-pick or revert sequence."
-  (interactive)
-  (if (magit-sequencer-in-progress-p)
-      (if (magit-anything-unstaged-p t)
-          (user-error "Cannot continue due to unstaged changes")
-        (magit-run-git-sequencer
-         (if (magit-revert-in-progress-p) "revert" "cherry-pick") "--continue"))
-    (user-error "No cherry-pick or revert in progress")))
-
-;;;###autoload
-(defun magit-sequencer-skip ()
-  "Skip the stopped at commit during a cherry-pick or revert sequence."
-  (interactive)
-  (if (magit-sequencer-in-progress-p)
-      (progn (magit-call-git "reset" "--hard")
-             (magit-sequencer-continue))
-    (user-error "No cherry-pick or revert in progress")))
-
-;;;###autoload
-(defun magit-sequencer-abort ()
-  "Abort the current cherry-pick or revert sequence.
-This discards all changes made since the sequence started."
-  (interactive)
-  (if (magit-sequencer-in-progress-p)
-      (magit-run-git-sequencer
-       (if (magit-revert-in-progress-p) "revert" "cherry-pick") "--abort")
-    (user-error "No cherry-pick or revert in progress")))
-
-(defun magit-sequencer-in-progress-p ()
-  (or (magit-cherry-pick-in-progress-p)
-      (magit-revert-in-progress-p)))
-
-;;; Cherry-Pick
-
-(defvar magit-perl-executable "perl"
-  "The Perl executable.")
-
-;;;###autoload (autoload 'magit-cherry-pick-popup "magit-sequence" nil t)
-(magit-define-popup magit-cherry-pick-popup
-  "Popup console for cherry-pick commands."
-  :man-page "git-cherry-pick"
-  :switches '((?s "Add Signed-off-by lines"            "--signoff")
-              (?e "Edit commit messages"               "--edit")
-              (?x "Reference cherry in commit message" "-x")
-              (?F "Attempt fast-forward"               "--ff"))
-  :options  '((?s "Strategy"                        "--strategy=")
-              (?m "Replay merge relative to parent" "--mainline="))
-  :actions  '("Apply here"
-              (?A "Pick"    magit-cherry-pick)
-              (?a "Apply"   magit-cherry-apply)
-              (?h "Harvest" magit-cherry-harvest)
-              "Apply elsewhere"
-              (?d "Donate"  magit-cherry-donate)
-              (?n "Spinout" magit-cherry-spinout)
-              (?s "Spinoff" magit-cherry-spinoff))
-  :sequence-actions '((?A "Continue" magit-sequencer-continue)
-                      (?s "Skip"     magit-sequencer-skip)
-                      (?a "Abort"    magit-sequencer-abort))
-  :sequence-predicate 'magit-sequencer-in-progress-p
-  :default-arguments '("--ff"))
-
-(defun magit-cherry-pick-read-args (prompt)
-  (list (or (nreverse (magit-region-values 'commit))
-            (magit-read-other-branch-or-commit prompt))
-        (magit-cherry-pick-arguments)))
-
-(defun magit--cherry-move-read-args (verb away fn)
-  (declare (indent defun))
-   (let ((commits (or (nreverse (magit-region-values 'commit))
-                      (list (funcall (if away
-                                         'magit-read-branch-or-commit
-                                       'magit-read-other-branch-or-commit)
-                                     (format "%s cherry" (capitalize verb))))))
-         (current (magit-get-current-branch)))
-     (unless current
-       (user-error "Cannot %s cherries while HEAD is detached" verb))
-     (let ((reachable (magit-rev-ancestor-p (car commits) current))
-           (msg "Cannot %s cherries that %s reachable from HEAD"))
-       (pcase (list away reachable)
-         (`(nil t) (user-error msg verb "are"))
-         (`(t nil) (user-error msg verb "are not"))))
-     `(,commits
-       ,@(funcall fn commits)
-       ,(magit-cherry-pick-arguments))))
-
-(defun magit--cherry-spinoff-read-args (verb)
-  (magit--cherry-move-read-args verb t
-    (lambda (commits)
-      (butlast (magit-branch-read-args
-                (format "Create branch from %s cherries" commits))))))
-
-;;;###autoload
-(defun magit-cherry-pick (commits &optional args)
-  "Copy COMMITS from another branch onto the current branch.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then pick all of them,
-without prompting."
-  (interactive (magit-cherry-pick-read-args "Cherry-pick"))
-  (magit--cherry-pick commits args))
-
-;;;###autoload
-(defun magit-cherry-apply (commits &optional args)
-  "Apply the changes in COMMITS but do not commit them.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then apply all of them,
-without prompting."
-  (interactive (magit-cherry-pick-read-args "Apply changes from commit"))
-  (magit--cherry-pick commits (cons "--no-commit" (remove "--ff" args))))
-
-;;;###autoload
-(defun magit-cherry-harvest (commits branch &optional args)
-  "Move COMMITS from another BRANCH onto the current branch.
-Remove the COMMITS from BRANCH and stay on the current branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually."
-  (interactive
-   (magit--cherry-move-read-args "harvest" nil
-     (lambda (commits)
-       (list (let ((branches (magit-list-containing-branches (car commits))))
-               (pcase (length branches)
-                 (0 nil)
-                 (1 (car branches))
-                 (_ (magit-completing-read
-                     (format "Remove %s cherries from branch" (length commits))
-                     branches nil t))))))))
-  (magit--cherry-move commits branch (magit-get-current-branch) args nil t))
-
-;;;###autoload
-(defun magit-cherry-donate (commits branch &optional args)
-  "Move COMMITS from the current branch onto another existing BRANCH.
-Remove COMMITS from the current branch and stay on that branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually."
-  (interactive
-   (magit--cherry-move-read-args "donate" t
-     (lambda (commits)
-       (list (magit-read-other-branch (format "Move %s cherries to branch"
-                                              (length commits)))))))
-  (magit--cherry-move commits (magit-get-current-branch) branch args))
-
-;;;###autoload
-(defun magit-cherry-spinout (commits branch start-point &optional args)
-  "Move COMMITS from the current branch onto a new BRANCH.
-Remove COMMITS from the current branch and stay on that branch.
-If a conflict occurs, then you have to fix that and finish the
-process manually."
-  (interactive (magit--cherry-spinoff-read-args "spinout"))
-  (magit--cherry-move commits (magit-get-current-branch) branch args
-                      start-point))
-
-;;;###autoload
-(defun magit-cherry-spinoff (commits branch start-point &optional args)
-  "Move COMMITS from the current branch onto a new BRANCH.
-Remove COMMITS from the current branch and checkout BRANCH.
-If a conflict occurs, then you have to fix that and finish
-the process manually."
-  (interactive (magit--cherry-spinoff-read-args "spinoff"))
-  (magit--cherry-move commits (magit-get-current-branch) branch args
-                      start-point t))
-
-(defun magit--cherry-move (commits src dst args
-                                   &optional start-point checkout-dst)
-  (let ((current (magit-get-current-branch)))
-    (unless (magit-branch-p dst)
-      (let ((magit-process-raise-error t))
-        (magit-call-git "branch" dst start-point))
-      (--when-let (magit-get-indirect-upstream-branch start-point)
-        (magit-call-git "branch" "--set-upstream-to" it dst)))
-    (unless (equal dst current)
-      (let ((magit-process-raise-error t))
-        (magit-call-git "checkout" dst)))
-    (if (not src) ; harvest only
-        (magit--cherry-pick commits args)
-      (let ((tip (car (last commits)))
-            (keep (concat (car commits) "^")))
-        (magit--cherry-pick commits args)
-        (set-process-sentinel
-         magit-this-process
-         (lambda (process event)
-           (when (memq (process-status process) '(exit signal))
-             (if (> (process-exit-status process) 0)
-                 (magit-process-sentinel process event)
-               (process-put process 'inhibit-refresh t)
-               (magit-process-sentinel process event)
-               (cond
-                ((magit-rev-equal tip src)
-                 (magit-call-git "update-ref"
-                                 "-m" (format "reset: moving to %s" keep)
-                                 (magit-ref-fullname src)
-                                 keep tip)
-                 (if (not checkout-dst)
-                     (magit-run-git "checkout" src)
-                   (magit-refresh)))
-                (t
-                 (magit-git "checkout" src)
-                 (let ((process-environment process-environment))
-                   (push (format "%s=%s -i -ne '/^pick (%s)/ or print'"
-                                 "GIT_SEQUENCE_EDITOR"
-                                 magit-perl-executable
-                                 (mapconcat #'magit-rev-abbrev commits "|"))
-                         process-environment)
-                   (magit-run-git-sequencer "rebase" "-i" keep))
-                 (when checkout-dst
-                   (set-process-sentinel
-                    magit-this-process
-                    (lambda (process event)
-                      (when (memq (process-status process) '(exit signal))
-                        (if (> (process-exit-status process) 0)
-                            (magit-process-sentinel process event)
-                          (process-put process 'inhibit-refresh t)
-                          (magit-process-sentinel process event)
-                          (magit-run-git "checkout" dst))))))))))))))))
-
-(defun magit--cherry-pick (commits args &optional revert)
-  (let ((command (if revert "revert" "cherry-pick")))
-    (when (stringp commits)
-      (setq commits (if (string-match-p "\\.\\." commits)
-                        (split-string commits "\\.\\.")
-                      (list commits))))
-    (magit-run-git-sequencer
-     (if revert "revert" "cherry-pick")
-     (pcase-let ((`(,merge ,non-merge)
-                  (-separate 'magit-merge-commit-p commits)))
-       (cond
-        ((not merge)
-         (--remove (string-prefix-p "--mainline=" it) args))
-        (non-merge
-         (user-error "Cannot %s merge and non-merge commits at once"
-                     command))
-        ((--first (string-prefix-p "--mainline=" it) args)
-         args)
-        (t
-         (cons (format "--mainline=%s"
-                       (read-number "Replay merges relative to parent: "))
-               args))))
-     commits)))
-
-(defun magit-cherry-pick-in-progress-p ()
-  ;; .git/sequencer/todo does not exist when there is only one commit left.
-  (file-exists-p (magit-git-dir "CHERRY_PICK_HEAD")))
-
-;;; Revert
-
-;;;###autoload (autoload 'magit-revert-popup "magit-sequence" nil t)
-(magit-define-popup magit-revert-popup
-  "Popup console for revert commands."
-  :man-page "git-revert"
-  :switches '((?s "Add Signed-off-by lines"   "--signoff")
-              (?e "Edit commit message"       "--edit")
-              (?E "Don't edit commit message" "--no-edit"))
-  :options  '((?s "Strategy"       "--strategy=")
-              (?S "Sign using gpg" "--gpg-sign=" magit-read-gpg-secret-key)
-              (?m "Replay merge relative to parent" "--mainline="))
-  :actions  '((?V "Revert commit(s)" magit-revert)
-              (?v "Revert changes"   magit-revert-no-commit))
-  :sequence-actions '((?V "Continue" magit-sequencer-continue)
-                      (?s "Skip"     magit-sequencer-skip)
-                      (?a "Abort"    magit-sequencer-abort))
-  :sequence-predicate 'magit-sequencer-in-progress-p
-  :default-arguments '("--edit"))
-
-(defun magit-revert-read-args (prompt)
-  (list (or (magit-region-values 'commit)
-            (magit-read-branch-or-commit prompt))
-        (magit-revert-arguments)))
-
-;;;###autoload
-(defun magit-revert (commit &optional args)
-  "Revert COMMIT by creating a new commit.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then revert all of them,
-without prompting."
-  (interactive (magit-revert-read-args "Revert commit"))
-  (magit--cherry-pick commit args t))
-
-;;;###autoload
-(defun magit-revert-no-commit (commit &optional args)
-  "Revert COMMIT by applying it in reverse to the worktree.
-Prompt for a commit, defaulting to the commit at point.  If
-the region selects multiple commits, then revert all of them,
-without prompting."
-  (interactive (magit-revert-read-args "Revert changes"))
-  (magit--cherry-pick commit (cons "--no-commit" args) t))
-
-(defun magit-revert-in-progress-p ()
-  ;; .git/sequencer/todo does not exist when there is only one commit left.
-  (file-exists-p (magit-git-dir "REVERT_HEAD")))
-
-;;; Patch
-
-;;;###autoload (autoload 'magit-am-popup "magit-sequence" nil t)
-(magit-define-popup magit-am-popup
-  "Popup console for mailbox commands."
-  :man-page "git-am"
-  :switches '((?3 "Fall back on 3way merge"           "--3way")
-              (?s "Add Signed-off-by lines"           "--signoff")
-              (?c "Remove text before scissors line"  "--scissors")
-              (?k "Inhibit removal of email cruft"    "--keep")
-              (?b "Limit removal of email cruft"      "--keep-non-patch")
-              (?d "Use author date as committer date"
-                  "--committer-date-is-author-date")
-              (?D "Use committer date as author date" "--ignore-date"))
-  :options  '((?p "Remove leading slashes from paths" "-p"
-                  magit-popup-read-number))
-  :actions  '((?m "Apply maildir"     magit-am-apply-maildir)
-              (?w "Apply patches"     magit-am-apply-patches)
-              (?a "Apply plain patch" magit-patch-apply-popup))
-  :default-arguments '("--3way")
-  :default-actions 'magit-am-apply-patches
-  :max-action-columns 1
-  :sequence-actions '((?w "Continue" magit-am-continue)
-                      (?s "Skip"     magit-am-skip)
-                      (?a "Abort"    magit-am-abort))
-  :sequence-predicate 'magit-am-in-progress-p)
-
-;;;###autoload
-(defun magit-am-apply-patches (&optional files args)
-  "Apply the patches FILES."
-  (interactive (list (or (magit-region-values 'file)
-                         (list (let ((default (magit-file-at-point)))
-                                 (read-file-name
-                                  (if default
-                                      (format "Apply patch (%s): " default)
-                                    "Apply patch: ")
-                                  nil default))))
-                     (magit-am-arguments)))
-  (magit-run-git-sequencer "am" args "--"
-                           (--map (magit-convert-filename-for-git
-                                   (expand-file-name it))
-                                  files)))
-
-;;;###autoload
-(defun magit-am-apply-maildir (&optional maildir args)
-  "Apply the patches from MAILDIR."
-  (interactive (list (read-file-name "Apply mbox or Maildir: ")
-                     (magit-am-arguments)))
-  (magit-run-git-sequencer "am" args (magit-convert-filename-for-git
-                                      (expand-file-name maildir))))
-
-;;;###autoload
-(defun magit-am-continue ()
-  "Resume the current patch applying sequence."
-  (interactive)
-  (if (magit-am-in-progress-p)
-      (if (magit-anything-unstaged-p t)
-          (error "Cannot continue due to unstaged changes")
-        (magit-run-git-sequencer "am" "--continue"))
-    (user-error "Not applying any patches")))
-
-;;;###autoload
-(defun magit-am-skip ()
-  "Skip the stopped at patch during a patch applying sequence."
-  (interactive)
-  (if (magit-am-in-progress-p)
-      (magit-run-git-sequencer "am" "--skip")
-    (user-error "Not applying any patches")))
-
-;;;###autoload
-(defun magit-am-abort ()
-  "Abort the current patch applying sequence.
-This discards all changes made since the sequence started."
-  (interactive)
-  (if (magit-am-in-progress-p)
-      (magit-run-git "am" "--abort")
-    (user-error "Not applying any patches")))
-
-(defun magit-am-in-progress-p ()
-  (file-exists-p (magit-git-dir "rebase-apply/applying")))
-
-;;; Rebase
-
-;;;###autoload (autoload 'magit-rebase-popup "magit-sequence" nil t)
-(magit-define-popup magit-rebase-popup
-  "Key menu for rebasing."
-  :man-page "git-rebase"
-  :switches '((?k "Keep empty commits"       "--keep-empty")
-              (?p "Preserve merges"          "--preserve-merges")
-              (?c "Lie about committer date" "--committer-date-is-author-date")
-              (?a "Autosquash"               "--autosquash")
-              (?A "Autostash"                "--autostash")
-              (?i "Interactive"              "--interactive")
-              (?h "Disable hooks"            "--no-verify"))
-  :actions  '((lambda ()
-                (concat (propertize "Rebase " 'face 'magit-popup-heading)
-                        (propertize (or (magit-get-current-branch) "HEAD")
-                                    'face 'magit-branch-local)
-                        (propertize " onto" 'face 'magit-popup-heading)))
-              (?p (lambda ()
-                    (--when-let (magit-get-push-branch) (concat it "\n")))
-                  magit-rebase-onto-pushremote)
-              (?u (lambda ()
-                    (--when-let (magit-get-upstream-branch) (concat it "\n")))
-                  magit-rebase-onto-upstream)
-              (?e "elsewhere"               magit-rebase)
-              "Rebase"
-              (?i "interactively"      magit-rebase-interactive)
-              (?m "to modify a commit" magit-rebase-edit-commit)
-              (?s "a subset"           magit-rebase-subset)
-              (?w "to reword a commit" magit-rebase-reword-commit) nil
-              (?k "to remove a commit" magit-rebase-remove-commit) nil
-              (?f "to autosquash"      magit-rebase-autosquash))
-  :sequence-actions '((?r "Continue" magit-rebase-continue)
-                      (?s "Skip"     magit-rebase-skip)
-                      (?e "Edit"     magit-rebase-edit)
-                      (?a "Abort"    magit-rebase-abort))
-  :sequence-predicate 'magit-rebase-in-progress-p
-  :max-action-columns 2)
-
-(defun magit-git-rebase (target args)
-  (magit-run-git-sequencer "rebase" target args))
-
-;;;###autoload
-(defun magit-rebase-onto-pushremote (args)
-  "Rebase the current branch onto `branch.<name>.pushRemote'.
-If that variable is unset, then rebase onto `remote.pushDefault'."
-  (interactive (list (magit-rebase-arguments)))
-  (--if-let (magit-get-current-branch)
-      (if-let ((remote (magit-get-push-remote it)))
-          (if (member remote (magit-list-remotes))
-              (magit-git-rebase (concat remote "/" it) args)
-            (user-error "Remote `%s' doesn't exist" remote))
-        (user-error "No push-remote is configured for %s" it))
-    (user-error "No branch is checked out")))
-
-;;;###autoload
-(defun magit-rebase-onto-upstream (args)
-  "Rebase the current branch onto its upstream branch."
-  (interactive (list (magit-rebase-arguments)))
-  (--if-let (magit-get-current-branch)
-      (if-let ((target (magit-get-upstream-branch it)))
-          (magit-git-rebase target args)
-        (user-error "No upstream is configured for %s" it))
-    (user-error "No branch is checked out")))
-
-;;;###autoload
-(defun magit-rebase (target args)
-  "Rebase the current branch onto a branch read in the minibuffer.
-All commits that are reachable from `HEAD' but not from the
-selected branch TARGET are being rebased."
-  (interactive (list (magit-read-other-branch-or-commit "Rebase onto")
-                     (magit-rebase-arguments)))
-  (message "Rebasing...")
-  (magit-git-rebase target args)
-  (message "Rebasing...done"))
-
-;;;###autoload
-(defun magit-rebase-subset (newbase start args)
-  "Rebase a subset of the current branch's history onto a new base.
-Rebase commits from START to `HEAD' onto NEWBASE.
-START has to be selected from a list of recent commits."
-  (interactive (list (magit-read-other-branch-or-commit
-                      "Rebase subset onto" nil
-                      (magit-get-upstream-branch))
-                     nil
-                     (magit-rebase-arguments)))
-  (if start
-      (progn (message "Rebasing...")
-             (magit-run-git-sequencer "rebase" "--onto" newbase start args)
-             (message "Rebasing...done"))
-    (magit-log-select
-      `(lambda (commit)
-         (magit-rebase-subset ,newbase (concat commit "^") (list ,@args)))
-      (concat "Type %p on a commit to rebase it "
-              "and commits above it onto " newbase ","))))
-
-(defun magit-rebase-interactive-1
-    (commit args message &optional editor delay-edit-confirm noassert confirm)
-  (declare (indent 2))
-  (when commit
-    (if (eq commit :merge-base)
-        (setq commit (--if-let (magit-get-upstream-branch)
-                         (magit-git-string "merge-base" it "HEAD")
-                       nil))
-      (unless (magit-rev-ancestor-p commit "HEAD")
-        (user-error "%s isn't an ancestor of HEAD" commit))
-      (if (magit-commit-parents commit)
-          (setq commit (concat commit "^"))
-        (setq args (cons "--root" args)))))
-  (when (and commit (not noassert))
-    (setq commit (magit-rebase-interactive-assert commit delay-edit-confirm)))
-  (if (and commit (not confirm))
-      (let ((process-environment process-environment))
-        (when editor
-          (push (concat "GIT_SEQUENCE_EDITOR=" editor) process-environment))
-        (magit-run-git-sequencer "rebase" "-i" args
-                                 (unless (member "--root" args) commit)))
-    (magit-log-select
-      `(lambda (commit)
-         (magit-rebase-interactive-1 commit (list ,@args)
-           ,message ,editor ,delay-edit-confirm ,noassert))
-      message)))
-
-(defvar magit--rebase-published-symbol nil)
-(defvar magit--rebase-public-edit-confirmed nil)
-
-(defun magit-rebase-interactive-assert (since &optional delay-edit-confirm)
-  (let* ((commit (if (string-suffix-p "^" since)
-                     ;; If SINCE is "REV^", then the user selected
-                     ;; "REV", which is the first commit that will
-                     ;; be replaced. (from^..to] <=> [from..to].
-                     (substring since 0 -1)
-                   ;; The "--root" argument is being used.
-                   since))
-         (branches (magit-list-publishing-branches commit)))
-    (setq magit--rebase-public-edit-confirmed
-          (delete (magit-toplevel) magit--rebase-public-edit-confirmed))
-    (when (and branches
-               (or (not delay-edit-confirm)
-                   ;; The user might have stopped at a published commit
-                   ;; merely to add new commits *after* it.  Try not to
-                   ;; ask users whether they really want to edit public
-                   ;; commits, when they don't actually intend to do so.
-                   (not (--all-p (magit-rev-equal it commit) branches))))
-      (let ((m1 "Some of these commits have already been published to ")
-            (m2 ".\nDo you really want to modify them"))
-        (magit-confirm (or magit--rebase-published-symbol 'rebase-published)
-          (concat m1 "%s" m2)
-          (concat m1 "%i public branches" m2)
-          nil branches))
-      (push (magit-toplevel) magit--rebase-public-edit-confirmed)))
-  (if (magit-git-lines "rev-list" "--merges" (concat since "..HEAD"))
-      (magit-read-char-case "Proceed despite merge in rebase range?  " nil
-        (?c "[c]ontinue" since)
-        (?s "[s]elect other" nil)
-        (?a "[a]bort" (user-error "Quit")))
-    since))
-
-;;;###autoload
-(defun magit-rebase-interactive (commit args)
-  "Start an interactive rebase sequence."
-  (interactive (list (magit-commit-at-point)
-                     (magit-rebase-arguments)))
-  (magit-rebase-interactive-1 commit args
-    "Type %p on a commit to rebase it and all commits above it,"
-    nil t))
-
-;;;###autoload
-(defun magit-rebase-autosquash (args)
-  "Combine squash and fixup commits with their intended targets."
-  (interactive (list (magit-rebase-arguments)))
-  (magit-rebase-interactive-1 :merge-base (cons "--autosquash" args)
-    "Type %p on a commit to squash into it and then rebase as necessary,"
-    "true" nil t))
-
-;;;###autoload
-(defun magit-rebase-edit-commit (commit args)
-  "Edit a single older commit using rebase."
-  (interactive (list (magit-commit-at-point)
-                     (magit-rebase-arguments)))
-  (magit-rebase-interactive-1 commit args
-    "Type %p on a commit to edit it,"
-    (concat magit-perl-executable
-            " -i -p -e '++$x if not $x and s/^pick/edit/'")
-    t))
-
-;;;###autoload
-(defun magit-rebase-reword-commit (commit args)
-  "Reword a single older commit using rebase."
-  (interactive (list (magit-commit-at-point)
-                     (magit-rebase-arguments)))
-  (magit-rebase-interactive-1 commit args
-    "Type %p on a commit to reword its message,"
-    (concat magit-perl-executable
-            " -i -p -e '++$x if not $x and s/^pick/reword/'")))
-
-;;;###autoload
-(defun magit-rebase-remove-commit (commit args)
-  "Remove a single older commit using rebase."
-  (interactive (list (magit-commit-at-point)
-                     (magit-rebase-arguments)))
-  (magit-rebase-interactive-1 commit args
-    "Type %p on a commit to remove it,"
-    (concat magit-perl-executable
-            " -i -p -e '++$x if not $x and s/^pick/# pick/'")
-    nil nil t))
-
-;;;###autoload
-(defun magit-rebase-continue (&optional noedit)
-  "Restart the current rebasing operation.
-In some cases this pops up a commit message buffer for you do
-edit.  With a prefix argument the old message is reused as-is."
-  (interactive "P")
-  (if (magit-rebase-in-progress-p)
-      (if (magit-anything-unstaged-p t)
-          (user-error "Cannot continue rebase with unstaged changes")
-        (when (and (magit-anything-staged-p)
-                   (file-exists-p (magit-git-dir "rebase-merge"))
-                   (not (member (magit-toplevel)
-                                magit--rebase-public-edit-confirmed)))
-          (magit-commit-amend-assert))
-        (if noedit
-            (let ((process-environment process-environment))
-              (push "GIT_EDITOR=true" process-environment)
-              (magit-run-git-async "rebase" "--continue")
-              (set-process-sentinel magit-this-process
-                                    #'magit-sequencer-process-sentinel)
-              magit-this-process)
-          (magit-run-git-sequencer "rebase" "--continue")))
-    (user-error "No rebase in progress")))
-
-;;;###autoload
-(defun magit-rebase-skip ()
-  "Skip the current commit and restart the current rebase operation."
-  (interactive)
-  (unless (magit-rebase-in-progress-p)
-    (user-error "No rebase in progress"))
-  (magit-run-git-sequencer "rebase" "--skip"))
-
-;;;###autoload
-(defun magit-rebase-edit ()
-  "Edit the todo list of the current rebase operation."
-  (interactive)
-  (unless (magit-rebase-in-progress-p)
-    (user-error "No rebase in progress"))
-  (magit-run-git-sequencer "rebase" "--edit-todo"))
-
-;;;###autoload
-(defun magit-rebase-abort ()
-  "Abort the current rebase operation, restoring the original branch."
-  (interactive)
-  (unless (magit-rebase-in-progress-p)
-    (user-error "No rebase in progress"))
-  (magit-confirm 'abort-rebase "Abort this rebase")
-  (magit-run-git "rebase" "--abort"))
-
-(defun magit-rebase-in-progress-p ()
-  "Return t if a rebase is in progress."
-  (or (file-exists-p (magit-git-dir "rebase-merge"))
-      (file-exists-p (magit-git-dir "rebase-apply/onto"))))
-
-;;; Sections
-
-(defun magit-insert-sequencer-sequence ()
-  "Insert section for the on-going cherry-pick or revert sequence.
-If no such sequence is in progress, do nothing."
-  (let ((picking (magit-cherry-pick-in-progress-p)))
-    (when (or picking (magit-revert-in-progress-p))
-      (magit-insert-section (sequence)
-        (magit-insert-heading (if picking "Cherry Picking" "Reverting"))
-        (when-let ((lines
-                    (cdr (magit-file-lines (magit-git-dir "sequencer/todo")))))
-          (dolist (line (nreverse lines))
-            (when (string-match
-                   "^\\(pick\\|revert\\) \\([^ ]+\\) \\(.*\\)$" line)
-              (magit-bind-match-strings (cmd hash msg) line
-                (magit-insert-section (commit hash)
-                  (insert (propertize cmd 'face 'magit-sequence-pick)
-                          " " (propertize hash 'face 'magit-hash)
-                          " " msg "\n"))))))
-        (magit-sequence-insert-sequence
-         (magit-file-line (magit-git-dir (if picking
-                                             "CHERRY_PICK_HEAD"
-                                           "REVERT_HEAD")))
-         (magit-file-line (magit-git-dir "sequencer/head")))
-        (insert "\n")))))
-
-(defun magit-insert-am-sequence ()
-  "Insert section for the on-going patch applying sequence.
-If no such sequence is in progress, do nothing."
-  (when (magit-am-in-progress-p)
-    (magit-insert-section (rebase-sequence)
-      (magit-insert-heading "Applying patches")
-      (let ((patches (nreverse (magit-rebase-patches)))
-            patch commit)
-        (while patches
-          (setq patch (pop patches))
-          (setq commit (magit-rev-verify-commit
-                        (cadr (split-string (magit-file-line patch)))))
-          (cond ((and commit patches)
-                 (magit-sequence-insert-commit
-                  "pick" commit 'magit-sequence-pick))
-                (patches
-                 (magit-sequence-insert-am-patch
-                  "pick" patch 'magit-sequence-pick))
-                (commit
-                 (magit-sequence-insert-sequence commit "ORIG_HEAD"))
-                (t
-                 (magit-sequence-insert-am-patch
-                  "stop" patch 'magit-sequence-stop)
-                 (magit-sequence-insert-sequence nil "ORIG_HEAD")))))
-      (insert ?\n))))
-
-(defun magit-sequence-insert-am-patch (type patch face)
-  (magit-insert-section (file patch)
-    (let ((title
-           (with-temp-buffer
-             (insert-file-contents patch nil nil 4096)
-             (unless (re-search-forward "^Subject: " nil t)
-               (goto-char (point-min)))
-             (buffer-substring (point) (line-end-position)))))
-      (insert (propertize type 'face face)
-              ?\s (propertize (file-name-nondirectory patch) 'face 'magit-hash)
-              ?\s title
-              ?\n))))
-
-(defun magit-insert-rebase-sequence ()
-  "Insert section for the on-going rebase sequence.
-If no such sequence is in progress, do nothing."
-  (when (magit-rebase-in-progress-p)
-    (let* ((interactive (file-directory-p (magit-git-dir "rebase-merge")))
-           (dir  (if interactive "rebase-merge/" "rebase-apply/"))
-           (name (-> (concat dir "head-name") magit-git-dir magit-file-line))
-           (onto (-> (concat dir "onto")      magit-git-dir magit-file-line))
-           (onto (or (magit-rev-name onto name)
-                     (magit-rev-name onto "refs/heads/*") onto))
-           (name (or (magit-rev-name name "refs/heads/*") name)))
-      (magit-insert-section (rebase-sequence)
-        (magit-insert-heading (format "Rebasing %s onto %s" name onto))
-        (if interactive
-            (magit-rebase-insert-merge-sequence onto)
-          (magit-rebase-insert-apply-sequence onto))
-        (insert ?\n)))))
-
-(defun magit-rebase-insert-merge-sequence (onto)
-  (let (exec)
-    (dolist (line (nreverse
-                   (magit-file-lines
-                    (magit-git-dir "rebase-merge/git-rebase-todo"))))
-      (cond ((string-prefix-p "exec" line)
-             (setq exec (substring line 5)))
-            ((string-match (format "^\\([^%c ]+\\) \\([^ ]+\\) .*$"
-                                   (string-to-char
-                                    (or (magit-get "core.commentChar") "#")))
-                           line)
-             (magit-bind-match-strings (action hash) line
-               (unless (equal action "exec")
-                 (magit-sequence-insert-commit
-                  action hash 'magit-sequence-pick exec)))
-             (setq exec nil)))))
-  (magit-sequence-insert-sequence
-   (magit-file-line (magit-git-dir "rebase-merge/stopped-sha"))
-   onto
-   (--when-let (magit-file-lines (magit-git-dir "rebase-merge/done"))
-     (cadr (split-string (car (last it)))))))
-
-(defun magit-rebase-insert-apply-sequence (onto)
-  (let ((rewritten
-         (--map (car (split-string it))
-                (magit-file-lines (magit-git-dir "rebase-apply/rewritten"))))
-        (stop (magit-file-line (magit-git-dir "rebase-apply/original-commit"))))
-    (dolist (patch (nreverse (cdr (magit-rebase-patches))))
-      (let ((hash (cadr (split-string (magit-file-line patch)))))
-        (unless (or (member hash rewritten)
-                    (equal hash stop))
-          (magit-sequence-insert-commit "pick" hash 'magit-sequence-pick)))))
-  (magit-sequence-insert-sequence
-   (magit-file-line (magit-git-dir "rebase-apply/original-commit"))
-   onto))
-
-(defun magit-rebase-patches ()
-  (directory-files (magit-git-dir "rebase-apply") t "^[0-9]\\{4\\}$"))
-
-(defun magit-sequence-insert-sequence (stop onto &optional orig)
-  (let ((head (magit-rev-parse "HEAD")) done)
-    (setq onto (if onto (magit-rev-parse onto) head))
-    (setq done (magit-git-lines "log" "--format=%H" (concat onto "..HEAD")))
-    (when (and stop (not (member stop done)))
-      (let ((id (magit-patch-id stop)))
-        (--if-let (--first (equal (magit-patch-id it) id) done)
-            (setq stop it)
-          (cond
-           ((--first (magit-rev-equal it stop) done)
-            ;; The commit's testament has been executed.
-            (magit-sequence-insert-commit "void" stop 'magit-sequence-drop))
-           ;; The faith of the commit is still undecided...
-           ((magit-anything-unmerged-p)
-            ;; ...and time travel isn't for the faint of heart.
-            (magit-sequence-insert-commit "join" stop 'magit-sequence-part))
-           ((magit-anything-modified-p t)
-            ;; ...and the dust hasn't settled yet...
-            (magit-sequence-insert-commit
-             (let* ((magit--refresh-cache nil)
-                    (staged   (magit-commit-tree "oO" nil "HEAD"))
-                    (unstaged (magit-commit-worktree "oO" "--reset")))
-               (cond
-                ;; ...but we could end up at the same tree just by committing.
-                ((or (magit-rev-equal staged   stop)
-                     (magit-rev-equal unstaged stop)) "goal")
-                ;; ...but the changes are still there, untainted.
-                ((or (equal (magit-patch-id staged)   id)
-                     (equal (magit-patch-id unstaged) id)) "same")
-                ;; ...and some changes are gone and/or others were added.
-                (t "work")))
-             stop 'magit-sequence-part))
-           ;; The commit is definitely gone...
-           ((--first (magit-rev-equal it stop) done)
-            ;; ...but all of its changes are still in effect.
-            (magit-sequence-insert-commit "poof" stop 'magit-sequence-drop))
-           (t
-            ;; ...and some changes are gone and/or other changes were added.
-            (magit-sequence-insert-commit "gone" stop 'magit-sequence-drop)))
-          (setq stop nil))))
-    (dolist (rev done)
-      (apply 'magit-sequence-insert-commit
-             (cond ((equal rev stop)
-                    ;; ...but its reincarnation lives on.
-                    ;; Or it didn't die in the first place.
-                    (list (if (and (equal rev head)
-                                   (equal (magit-patch-id rev)
-                                          (magit-patch-id orig)))
-                              "stop" ; We haven't done anything yet.
-                            "like")  ; There are new commits.
-                          rev (if (equal rev head)
-                                  'magit-sequence-head
-                                'magit-sequence-stop)))
-                   ((equal rev head)
-                    (list "done" rev 'magit-sequence-head))
-                   (t
-                    (list "done" rev 'magit-sequence-done)))))
-    (magit-sequence-insert-commit "onto" onto
-                                (if (equal onto head)
-                                    'magit-sequence-head
-                                  'magit-sequence-onto))))
-
-(defun magit-sequence-insert-commit (type hash face &optional exec)
-  (magit-insert-section (commit hash)
-    (magit-insert-heading
-      (propertize type 'face face)    "\s"
-      (magit-format-rev-summary hash) "\n")
-    (when exec
-      (insert (propertize "exec" 'face 'magit-sequence-onto) "\s" exec "\n"))))
-
-(provide 'magit-sequence)
-;;; magit-sequence.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.elc
deleted file mode 100644
index 00d324dcd161..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-sequence.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.el
deleted file mode 100644
index 3b17e0755ebd..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.el
+++ /dev/null
@@ -1,492 +0,0 @@
-;;; magit-stash.el --- stash support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2008-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Support for Git stashes.
-
-;;; Code:
-
-(require 'magit)
-
-(defvar bookmark-make-record-function)
-
-;;; Options
-
-(defgroup magit-stash nil
-  "List stashes and show stash diffs."
-  :group 'magit-modes)
-
-;;;; Diff options
-
-(defcustom magit-stash-sections-hook
-  '(magit-insert-stash-notes
-    magit-insert-stash-worktree
-    magit-insert-stash-index
-    magit-insert-stash-untracked)
-  "Hook run to insert sections into stash diff buffers."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-stash
-  :type 'hook)
-
-;;;; Log options
-
-(defcustom magit-stashes-margin
-  (list (nth 0 magit-log-margin)
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width nil
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-stashes-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-stash
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-stashes-mode))
-
-;;; Commands
-
-;;;###autoload (autoload 'magit-stash-popup "magit-stash" nil t)
-(magit-define-popup magit-stash-popup
-  "Popup console for stash commands."
-  :man-page "git-stash"
-  :switches '((?u "Also save untracked files" "--include-untracked")
-              (?a "Also save untracked and ignored files" "--all"))
-  :actions  '((?z "Save"               magit-stash)
-              (?Z "Snapshot"           magit-snapshot)
-              (?p "Pop"                magit-stash-pop)
-              (?i "Save index"         magit-stash-index)
-              (?I "Snapshot index"     magit-snapshot-index)
-              (?a "Apply"              magit-stash-apply)
-              (?w "Save worktree"      magit-stash-worktree)
-              (?W "Snapshot worktree"  magit-snapshot-worktree)
-              (?l "List"               magit-stash-list)
-              (?x "Save keeping index" magit-stash-keep-index)
-              (?r "Snapshot to wipref" magit-wip-commit)
-              (?v "Show"               magit-stash-show)
-              (?b "Branch"             magit-stash-branch)
-              (?k "Drop"               magit-stash-drop) nil
-              (?B "Branch here"        magit-stash-branch-here) nil nil
-              (?f "Format patch"       magit-stash-format-patch))
-  :default-action 'magit-stash
-  :max-action-columns 3)
-
-;;;###autoload
-(defun magit-stash (message &optional include-untracked)
-  "Create a stash of the index and working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'."
-  (interactive (magit-stash-read-args))
-  (magit-stash-save message t t include-untracked t))
-
-;;;###autoload
-(defun magit-stash-index (message)
-  "Create a stash of the index only.
-Unstaged and untracked changes are not stashed.  The stashed
-changes are applied in reverse to both the index and the
-worktree.  This command can fail when the worktree is not clean.
-Applying the resulting stash has the inverse effect."
-  (interactive (list (magit-stash-read-message)))
-  (magit-stash-save message t nil nil t 'worktree))
-
-;;;###autoload
-(defun magit-stash-worktree (message &optional include-untracked)
-  "Create a stash of unstaged changes in the working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'."
-  (interactive (magit-stash-read-args))
-  (magit-stash-save message nil t include-untracked t 'index))
-
-;;;###autoload
-(defun magit-stash-keep-index (message &optional include-untracked)
-  "Create a stash of the index and working tree, keeping index intact.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'."
-  (interactive (magit-stash-read-args))
-  (magit-stash-save message t t include-untracked t 'index))
-
-(defun magit-stash-read-args ()
-  (list (magit-stash-read-message)
-        (magit-stash-read-untracked)))
-
-(defun magit-stash-read-untracked ()
-  (let ((prefix (prefix-numeric-value current-prefix-arg))
-        (args   (magit-stash-arguments)))
-    (cond ((or (= prefix 16) (member "--all" args)) 'all)
-          ((or (= prefix  4) (member "--include-untracked" args)) t))))
-
-(defun magit-stash-read-message ()
-  (let* ((default (format "On %s: "
-                          (or (magit-get-current-branch) "(no branch)")))
-         (input (magit-read-string "Stash message" default)))
-    (if (equal input default)
-        (concat default (magit-rev-format "%h %s"))
-      input)))
-
-;;;###autoload
-(defun magit-snapshot (&optional include-untracked)
-  "Create a snapshot of the index and working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'."
-  (interactive (magit-snapshot-read-args))
-  (magit-snapshot-save t t include-untracked t))
-
-;;;###autoload
-(defun magit-snapshot-index ()
-  "Create a snapshot of the index only.
-Unstaged and untracked changes are not stashed."
-  (interactive)
-  (magit-snapshot-save t nil nil t))
-
-;;;###autoload
-(defun magit-snapshot-worktree (&optional include-untracked)
-  "Create a snapshot of unstaged changes in the working tree.
-Untracked files are included according to popup arguments.
-One prefix argument is equivalent to `--include-untracked'
-while two prefix arguments are equivalent to `--all'."
-  (interactive (magit-snapshot-read-args))
-  (magit-snapshot-save nil t include-untracked t))
-
-(defun magit-snapshot-read-args ()
-  (list (magit-stash-read-untracked)))
-
-(defun magit-snapshot-save (index worktree untracked &optional refresh)
-  (magit-stash-save (concat "WIP on " (magit-stash-summary))
-                    index worktree untracked refresh t))
-
-;;;###autoload
-(defun magit-stash-apply (stash)
-  "Apply a stash to the working tree.
-Try to preserve the stash index.  If that fails because there
-are staged changes, apply without preserving the stash index."
-  (interactive (list (magit-read-stash "Apply stash")))
-  (if (= (magit-call-git "stash" "apply" "--index" stash) 0)
-      (magit-refresh)
-    (magit-run-git "stash" "apply" stash)))
-
-(defun magit-stash-pop (stash)
-  "Apply a stash to the working tree and remove it from stash list.
-Try to preserve the stash index.  If that fails because there
-are staged changes, apply without preserving the stash index
-and forgo removing the stash."
-  (interactive (list (magit-read-stash "Pop stash")))
-  (if (= (magit-call-git "stash" "apply" "--index" stash) 0)
-      (magit-stash-drop stash)
-    (magit-run-git "stash" "apply" stash)))
-
-;;;###autoload
-(defun magit-stash-drop (stash)
-  "Remove a stash from the stash list.
-When the region is active offer to drop all contained stashes."
-  (interactive (list (--if-let (magit-region-values 'stash)
-                         (magit-confirm t nil "Drop %i stashes" nil it)
-                       (magit-read-stash "Drop stash"))))
-  (dolist (stash (if (listp stash)
-                     (nreverse (prog1 stash (setq stash (car stash))))
-                   (list stash)))
-    (message "Deleted refs/%s (was %s)" stash
-             (magit-rev-parse "--short" stash))
-    (magit-call-git "rev-parse" stash)
-    (magit-call-git "reflog" "delete" "--updateref" "--rewrite" stash))
-  (when-let ((ref (and (string-match "\\(.+\\)@{[0-9]+}$" stash)
-                       (match-string 1 stash))))
-    (unless (string-match "^refs/" ref)
-      (setq ref (concat "refs/" ref)))
-    (unless (magit-rev-verify (concat ref "@{0}"))
-      (magit-run-git "update-ref" "-d" ref)))
-  (magit-refresh))
-
-;;;###autoload
-(defun magit-stash-clear (ref)
-  "Remove all stashes saved in REF's reflog by deleting REF."
-  (interactive (let ((ref (or (magit-section-when 'stashes) "refs/stash")))
-                 (magit-confirm t (format "Drop all stashes in %s" ref))
-                 (list ref)))
-  (magit-run-git "update-ref" "-d" ref))
-
-;;;###autoload
-(defun magit-stash-branch (stash branch)
-  "Create and checkout a new BRANCH from STASH."
-  (interactive (list (magit-read-stash "Branch stash")
-                     (magit-read-string-ns "Branch name")))
-  (magit-run-git "stash" "branch" branch stash))
-
-;;;###autoload
-(defun magit-stash-branch-here (stash branch)
-  "Create and checkout a new BRANCH and apply STASH.
-The branch is created using `magit-branch', using the current
-branch or `HEAD' as the string-point."
-  (interactive (list (magit-read-stash "Branch stash")
-                     (magit-read-string-ns "Branch name")))
-  (let ((inhibit-magit-refresh t))
-    (magit-branch branch (or (magit-get-current-branch) "HEAD")))
-  (magit-stash-apply stash))
-
-;;;###autoload
-(defun magit-stash-format-patch (stash)
-  "Create a patch from STASH"
-  (interactive (list (magit-read-stash "Create patch from stash")))
-  (with-temp-file (magit-rev-format "0001-%f.patch" stash)
-    (magit-git-insert "stash" "show" "-p" stash))
-  (magit-refresh))
-
-;;; Plumbing
-
-(defun magit-stash-save (message index worktree untracked
-                                 &optional refresh keep noerror ref)
-  (if (or (and index     (magit-staged-files t))
-          (and worktree  (magit-unstaged-files t))
-          (and untracked (magit-untracked-files (eq untracked 'all))))
-      (magit-with-toplevel
-        (magit-stash-store message (or ref "refs/stash")
-                           (magit-stash-create message index worktree untracked))
-        (if (eq keep 'worktree)
-            (with-temp-buffer
-              (magit-git-insert "diff" "--cached")
-              (magit-run-git-with-input
-               "apply" "--reverse" "--cached" "--ignore-space-change" "-")
-              (magit-run-git-with-input
-               "apply" "--reverse" "--ignore-space-change" "-"))
-          (unless (eq keep t)
-            (if (eq keep 'index)
-                (magit-call-git "checkout" "--" ".")
-              (magit-call-git "reset" "--hard" "HEAD"))
-            (when untracked
-              (magit-call-git "clean" "--force" "-d"
-                              (and (eq untracked 'all) "-x")))))
-        (when refresh
-          (magit-refresh)))
-    (unless noerror
-      (user-error "No %s changes to save" (cond ((not index)  "unstaged")
-                                                ((not worktree) "staged")
-                                                (t "local"))))))
-
-(defun magit-stash-store (message ref commit)
-  (magit-update-ref ref message commit t))
-
-(defun magit-stash-create (message index worktree untracked)
-  (unless (magit-rev-parse "--verify" "HEAD")
-    (error "You do not have the initial commit yet"))
-  (let ((magit-git-global-arguments (nconc (list "-c" "commit.gpgsign=false")
-                                           magit-git-global-arguments))
-        (default-directory (magit-toplevel))
-        (summary (magit-stash-summary))
-        (head "HEAD"))
-    (when (and worktree (not index))
-      (setq head (or (magit-commit-tree "pre-stash index" nil "HEAD")
-                     (error "Cannot save the current index state"))))
-    (or (setq index (magit-commit-tree (concat "index on " summary) nil head))
-        (error "Cannot save the current index state"))
-    (and untracked
-         (setq untracked (magit-untracked-files (eq untracked 'all)))
-         (setq untracked (magit-with-temp-index nil nil
-                           (or (and (magit-update-files untracked)
-                                    (magit-commit-tree
-                                     (concat "untracked files on " summary)))
-                               (error "Cannot save the untracked files")))))
-    (magit-with-temp-index index "-m"
-      (when worktree
-        (or (magit-update-files (magit-git-items "diff" "-z" "--name-only" head))
-            (error "Cannot save the current worktree state")))
-      (or (magit-commit-tree message nil head index untracked)
-          (error "Cannot save the current worktree state")))))
-
-(defun magit-stash-summary ()
-  (concat (or (magit-get-current-branch) "(no branch)")
-          ": " (magit-rev-format "%h %s")))
-
-;;; Sections
-
-(defvar magit-stashes-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-delete-thing] 'magit-stash-clear)
-    map)
-  "Keymap for `stashes' section.")
-
-(defvar magit-stash-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]  'magit-stash-show)
-    (define-key map [remap magit-delete-thing] 'magit-stash-drop)
-    (define-key map "a"  'magit-stash-apply)
-    (define-key map "A"  'magit-stash-pop)
-    map)
-  "Keymap for `stash' sections.")
-
-(magit-define-section-jumper magit-jump-to-stashes
-  "Stashes" stashes "refs/stash")
-
-(cl-defun magit-insert-stashes (&optional (ref   "refs/stash")
-                                          (heading "Stashes:"))
-  "Insert `stashes' section showing reflog for \"refs/stash\".
-If optional REF is non-nil, show reflog for that instead.
-If optional HEADING is non-nil, use that as section heading
-instead of \"Stashes:\"."
-  (let ((verified (magit-rev-verify ref))
-        (autostash
-         (and (magit-rebase-in-progress-p)
-              (magit-file-line
-               (magit-git-dir
-                (-> (if (file-directory-p (magit-git-dir "rebase-merge"))
-                        "rebase-merge/autostash"
-                      "rebase-apply/autostash")))))))
-    (when (or autostash verified)
-      (magit-insert-section (stashes ref)
-        (magit-insert-heading heading)
-        (when autostash
-          (pcase-let ((`(,author ,date ,msg)
-                       (split-string
-                        (car (magit-git-lines
-                              "show" "-q" "--format=%aN%x00%at%x00%s"
-                              autostash))
-                        "\0")))
-            (magit-insert-section (stash autostash)
-              (insert (propertize "AUTOSTASH" 'face 'magit-hash))
-              (insert " " msg "\n")
-              (save-excursion
-                (backward-char)
-                (magit-log-format-margin autostash author date)))))
-        (if verified
-            (magit-git-wash (apply-partially 'magit-log-wash-log 'stash)
-              "reflog" "--format=%gd%x00%aN%x00%at%x00%gs" ref)
-          (insert ?\n)
-          (save-excursion
-            (backward-char)
-            (magit-make-margin-overlay)))))))
-
-;;; List Stashes
-
-;;;###autoload
-(defun magit-stash-list ()
-  "List all stashes in a buffer."
-  (interactive)
-  (magit-mode-setup #'magit-stashes-mode "refs/stash"))
-
-(define-derived-mode magit-stashes-mode magit-reflog-mode "Magit Stashes"
-  "Mode for looking at lists of stashes."
-  :group 'magit-log
-  (hack-dir-local-variables-non-file-buffer)
-  (setq-local bookmark-make-record-function
-              #'magit-bookmark--stashes-make-record))
-
-(cl-defun magit-stashes-refresh-buffer (ref)
-  (magit-insert-section (stashesbuf)
-    (magit-insert-heading (if (equal ref "refs/stash")
-                              "Stashes:"
-                            (format "Stashes [%s]:" ref)))
-    (magit-git-wash (apply-partially 'magit-log-wash-log 'stash)
-      "reflog" "--format=%gd%x00%aN%x00%at%x00%gs" ref)))
-
-;;; Show Stash
-
-;;;###autoload
-(defun magit-stash-show (stash &optional args files)
-  "Show all diffs of a stash in a buffer."
-  (interactive (cons (or (and (not current-prefix-arg)
-                              (magit-stash-at-point))
-                         (magit-read-stash "Show stash"))
-                     (pcase-let ((`(,args ,files) (magit-diff-arguments)))
-                       (list (delete "--stat" args) files))))
-  (magit-mode-setup #'magit-stash-mode stash nil args files))
-
-(define-derived-mode magit-stash-mode magit-diff-mode "Magit Stash"
-  "Mode for looking at individual stashes."
-  :group 'magit-diff
-  (hack-dir-local-variables-non-file-buffer)
-  (setq-local bookmark-make-record-function
-              #'magit-bookmark--stash-make-record))
-
-(defun magit-stash-refresh-buffer (stash _const _args _files)
-  (magit-set-header-line-format
-   (concat (propertize (capitalize stash) 'face 'magit-section-heading)
-           " "
-           (magit-rev-format "%s" stash)))
-  (setq magit-buffer-revision-hash (magit-rev-parse stash))
-  (magit-insert-section (stash)
-    (magit-run-section-hook 'magit-stash-sections-hook)))
-
-(defun magit-stash-insert-section (commit range message &optional files)
-  (magit-insert-section (commit commit)
-    (magit-insert-heading message)
-    (magit-git-wash #'magit-diff-wash-diffs
-      "diff" range "-p" "--no-prefix"
-      (nth 2 magit-refresh-args)
-      "--" (or files (nth 3 magit-refresh-args)))))
-
-(defun magit-insert-stash-notes ()
-  "Insert section showing notes for a stash.
-This shows the notes for stash@{N} but not for the other commits
-that make up the stash."
-  (magit-insert-section section (note)
-    (magit-insert-heading "Notes")
-    (magit-git-insert "notes" "show" (car magit-refresh-args))
-    (if (= (point)
-           (oref section content))
-        (magit-cancel-section)
-      (insert "\n"))))
-
-(defun magit-insert-stash-index ()
-  "Insert section showing staged changes of the stash."
-  (let ((stash (car magit-refresh-args)))
-    (magit-stash-insert-section (format "%s^2" stash)
-                                (format "%s^..%s^2" stash stash)
-                                "Staged")))
-
-(defun magit-insert-stash-worktree ()
-  "Insert section showing unstaged changes of the stash."
-  (let ((stash (car magit-refresh-args)))
-    (magit-stash-insert-section stash
-                                (format "%s^2..%s" stash stash)
-                                "Unstaged")))
-
-(defun magit-insert-stash-untracked ()
-  "Insert section showing the untracked files commit of the stash."
-  (let ((stash (car magit-refresh-args))
-        (rev   (concat (car magit-refresh-args) "^3")))
-    (when (magit-rev-verify rev)
-      (magit-stash-insert-section (format "%s^3" stash)
-                                  (format "%s^..%s^3" stash stash)
-                                  "Untracked files"
-                                  (magit-git-items "ls-tree" "-z" "--name-only"
-                                                   "-r" "--full-tree" rev)))))
-
-(provide 'magit-stash)
-;;; magit-stash.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.elc
deleted file mode 100644
index fef19178e4a1..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-stash.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.el
deleted file mode 100644
index aba2e95c19e4..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.el
+++ /dev/null
@@ -1,632 +0,0 @@
-;;; magit-status.el --- the grand overview  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements the status buffer.
-
-;;; Code:
-
-(require 'magit)
-
-(eval-when-compile (require 'subr-x))
-
-(defvar bookmark-make-record-function)
-
-;;; Options
-
-(defgroup magit-status nil
-  "Inspect and manipulate Git repositories."
-  :link '(info-link "(magit)Status Buffer")
-  :group 'magit-modes)
-
-(defcustom magit-status-mode-hook nil
-  "Hook run after entering Magit-Status mode."
-  :group 'magit-status
-  :type 'hook)
-
-(defcustom magit-status-headers-hook
-  '(magit-insert-error-header
-    magit-insert-diff-filter-header
-    magit-insert-head-branch-header
-    magit-insert-upstream-branch-header
-    magit-insert-push-branch-header
-    magit-insert-tags-header)
-  "Hook run to insert headers into the status buffer.
-
-This hook is run by `magit-insert-status-headers', which in turn
-has to be a member of `magit-status-sections-hook' to be used at
-all."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-status
-  :type 'hook
-  :options '(magit-insert-error-header
-             magit-insert-diff-filter-header
-             magit-insert-repo-header
-             magit-insert-remote-header
-             magit-insert-head-branch-header
-             magit-insert-upstream-branch-header
-             magit-insert-push-branch-header
-             magit-insert-tags-header))
-
-(defcustom magit-status-sections-hook
-  '(magit-insert-status-headers
-    magit-insert-merge-log
-    magit-insert-rebase-sequence
-    magit-insert-am-sequence
-    magit-insert-sequencer-sequence
-    magit-insert-bisect-output
-    magit-insert-bisect-rest
-    magit-insert-bisect-log
-    magit-insert-untracked-files
-    magit-insert-unstaged-changes
-    magit-insert-staged-changes
-    magit-insert-stashes
-    magit-insert-unpushed-to-pushremote
-    magit-insert-unpushed-to-upstream-or-recent
-    magit-insert-unpulled-from-pushremote
-    magit-insert-unpulled-from-upstream)
-  "Hook run to insert sections into a status buffer."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-status
-  :type 'hook)
-
-(defcustom magit-status-initial-section '(1)
-  "The section point is placed on when a status buffer is created.
-
-When such a buffer is merely being refreshed or being shown again
-after it was merely burried, then this option has no effect.
-
-If this is nil, then point remains on the very first section as
-usual.  Otherwise it has to be a list of integers and section
-identity lists.  The members of that list are tried in order
-until a matching section is found.
-
-An integer means to jump to the nth section, 1 for example
-jumps over the headings.  To get a section's \"identity list\"
-use \\[universal-argument] \\[magit-describe-section-briefly].
-
-If, for example, you want to jump to the commits that haven't
-been pulled from the upstream, or else the second section, then
-use: (((unpulled . \"..@{upstream}\") (status)) 1).
-
-See option `magit-section-initial-visibility-alist' for how to
-control the initial visibility of the jumped to section."
-  :package-version '(magit . "2.90.0")
-  :group 'magit-status
-  :type '(choice (const :tag "as usual" nil)
-                 (repeat (choice (number :tag "nth top-level section")
-                                 (sexp   :tag "section identity")))))
-
-(defcustom magit-status-show-hashes-in-headers nil
-  "Whether headers in the status buffer show hashes.
-The functions which respect this option are
-`magit-insert-head-branch-header',
-`magit-insert-upstream-branch-header', and
-`magit-insert-push-branch-header'."
-  :package-version '(magit . "2.4.0")
-  :group 'magit-status
-  :type 'boolean)
-
-(defcustom magit-status-margin
-  (list nil
-        (nth 1 magit-log-margin)
-        'magit-log-margin-width nil
-        (nth 4 magit-log-margin))
-  "Format of the margin in `magit-status-mode' buffers.
-
-The value has the form (INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH).
-
-If INIT is non-nil, then the margin is shown initially.
-STYLE controls how to format the committer date.  It can be one
-  of `age' (to show the age of the commit), `age-abbreviated' (to
-  abbreviate the time unit to a character), or a string (suitable
-  for `format-time-string') to show the actual date.
-WIDTH controls the width of the margin.  This exists for forward
-  compatibility and currently the value should not be changed.
-AUTHOR controls whether the name of the author is also shown by
-  default.
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-  is shown, then this specifies how much space is used to do so."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-status
-  :group 'magit-margin
-  :type magit-log-margin--custom-type
-  :initialize 'magit-custom-initialize-reset
-  :set-after '(magit-log-margin)
-  :set (apply-partially #'magit-margin-set-variable 'magit-status-mode))
-
-;;; Commands
-
-;;;###autoload
-(defun magit-init (directory)
-  "Initialize a Git repository, then show its status.
-
-If the directory is below an existing repository, then the user
-has to confirm that a new one should be created inside.  If the
-directory is the root of the existing repository, then the user
-has to confirm that it should be reinitialized.
-
-Non-interactively DIRECTORY is (re-)initialized unconditionally."
-  (interactive
-   (let ((directory (file-name-as-directory
-                     (expand-file-name
-                      (read-directory-name "Create repository in: ")))))
-     (when-let ((toplevel (magit-toplevel directory)))
-       (setq toplevel (expand-file-name toplevel))
-       (unless (y-or-n-p (if (file-equal-p toplevel directory)
-                             (format "Reinitialize existing repository %s? "
-                                     directory)
-                           (format "%s is a repository.  Create another in %s? "
-                                   toplevel directory)))
-         (user-error "Abort")))
-     (list directory)))
-  ;; `git init' does not understand the meaning of "~"!
-  (magit-call-git "init" (magit-convert-filename-for-git
-                          (expand-file-name directory)))
-  (magit-status-internal directory))
-
-;;;###autoload
-(defun magit-status (&optional directory cache)
-  "Show the status of the current Git repository in a buffer.
-With a prefix argument prompt for a repository to be shown.
-With two prefix arguments prompt for an arbitrary directory.
-If that directory isn't the root of an existing repository,
-then offer to initialize it as a new repository."
-  (interactive
-   (let ((magit--refresh-cache (list (cons 0 0))))
-     (list (and (or current-prefix-arg (not (magit-toplevel)))
-                (magit-read-repository
-                 (>= (prefix-numeric-value current-prefix-arg) 16)))
-           magit--refresh-cache)))
-  (let ((magit--refresh-cache (or cache (list (cons 0 0)))))
-    (if directory
-        (let ((toplevel (magit-toplevel directory)))
-          (setq directory (file-name-as-directory
-                           (expand-file-name directory)))
-          (if (and toplevel (file-equal-p directory toplevel))
-              (magit-status-internal directory)
-            (when (y-or-n-p
-                   (if toplevel
-                       (format "%s is a repository.  Create another in %s? "
-                               toplevel directory)
-                     (format "Create repository in %s? " directory)))
-              ;; Creating a new repository will invalidate cached
-              ;; values.
-              (setq magit--refresh-cache nil)
-              (magit-init directory))))
-      (magit-status-internal default-directory))))
-
-(put 'magit-status 'interactive-only 'magit-status-internal)
-
-(defalias 'magit 'magit-status
-  "An alias for `magit-status' for better discoverability.
-
-Instead of invoking this alias for `magit-status' using
-\"M-x magit RET\", you should bind a key to `magit-status'
-and read the info node `(magit)Getting Started', which
-also contains other useful hints.")
-
-;;;###autoload
-(defun magit-status-internal (directory)
-  (magit--tramp-asserts directory)
-  (let ((default-directory directory))
-    (magit-mode-setup #'magit-status-mode)))
-
-(defvar magit--remotes-using-recent-git nil)
-
-(defun magit--tramp-asserts (directory)
-  (when-let ((remote (file-remote-p directory)))
-    (unless (member remote magit--remotes-using-recent-git)
-      (if-let ((version (let ((default-directory directory))
-                          (magit-git-version))))
-          (if (version<= magit--minimal-git version)
-              (push version magit--remotes-using-recent-git)
-            (display-warning 'magit (format "\
-Magit requires Git >= %s, but on %s the version is %s.
-
-If multiple Git versions are installed on the host, then the
-problem might be that TRAMP uses the wrong executable.
-
-First check the value of `magit-git-executable'.  Its value is
-used when running git locally as well as when running it on a
-remote host.  The default value is \"git\", except on Windows
-where an absolute path is used for performance reasons.
-
-If the value already is just \"git\" but TRAMP never-the-less
-doesn't use the correct executable, then consult the info node
-`(tramp)Remote programs'.\n" magit--minimal-git remote version) :error))
-        (display-warning 'magit (format "\
-Magit cannot find Git on %s.
-
-First check the value of `magit-git-executable'.  Its value is
-used when running git locally as well as when running it on a
-remote host.  The default value is \"git\", except on Windows
-where an absolute path is used for performance reasons.
-
-If the value already is just \"git\" but TRAMP never-the-less
-doesn't find the executable, then consult the info node
-`(tramp)Remote programs'.\n" remote) :error)))))
-
-;;; Mode
-
-(defvar magit-status-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-mode-map)
-    (define-key map "jz" 'magit-jump-to-stashes)
-    (define-key map "jt" 'magit-jump-to-tracked)
-    (define-key map "jn" 'magit-jump-to-untracked)
-    (define-key map "ju" 'magit-jump-to-unstaged)
-    (define-key map "js" 'magit-jump-to-staged)
-    (define-key map "jfu" 'magit-jump-to-unpulled-from-upstream)
-    (define-key map "jfp" 'magit-jump-to-unpulled-from-pushremote)
-    (define-key map "jpu" 'magit-jump-to-unpushed-to-upstream)
-    (define-key map "jpp" 'magit-jump-to-unpushed-to-pushremote)
-    (define-key map [remap dired-jump] 'magit-dired-jump)
-    map)
-  "Keymap for `magit-status-mode'.")
-
-(define-derived-mode magit-status-mode magit-mode "Magit"
-  "Mode for looking at Git status.
-
-This mode is documented in info node `(magit)Status Buffer'.
-
-\\<magit-mode-map>\
-Type \\[magit-refresh] to refresh the current buffer.
-Type \\[magit-section-toggle] to expand or hide the section at point.
-Type \\[magit-visit-thing] to visit the change or commit at point.
-
-Type \\[magit-dispatch-popup] to see available prefix popups.
-
-Staging and applying changes is documented in info node
-`(magit)Staging and Unstaging' and info node `(magit)Applying'.
-
-\\<magit-hunk-section-map>Type \
-\\[magit-apply] to apply the change at point, \
-\\[magit-stage] to stage,
-\\[magit-unstage] to unstage, \
-\\[magit-discard] to discard, or \
-\\[magit-reverse] to reverse it.
-
-\\<magit-status-mode-map>\
-Type \\[magit-commit-popup] to create a commit.
-
-\\{magit-status-mode-map}"
-  :group 'magit-status
-  (hack-dir-local-variables-non-file-buffer)
-  (setq imenu-create-index-function
-        'magit-imenu--status-create-index-function)
-  (setq-local bookmark-make-record-function
-              #'magit-bookmark--status-make-record))
-
-(defun magit-status-refresh-buffer ()
-  (magit-git-exit-code "update-index" "--refresh")
-  (magit-insert-section (status)
-    (magit-run-section-hook 'magit-status-sections-hook)))
-
-(defun magit-status-goto-initial-section ()
-  "In a `magit-status-mode' buffer, jump `magit-status-initial-section'.
-Actually doing so is deferred until `magit-refresh-buffer-hook'
-runs `magit-status-goto-initial-section-1'.  That function then
-removes itself from the hook, so that this only happens when the
-status buffer is first created."
-  (when (and magit-status-initial-section
-             (derived-mode-p 'magit-status-mode))
-    (add-hook 'magit-refresh-buffer-hook
-              'magit-status-goto-initial-section-1 nil t)))
-
-(defun magit-status-goto-initial-section-1 ()
-  "In a `magit-status-mode' buffer, jump `magit-status-initial-section'.
-This function removes itself from `magit-refresh-buffer-hook'."
-  (when-let ((section
-              (--some (if (integerp it)
-                          (nth (1- it)
-                               (magit-section-siblings (magit-current-section)
-                                                       'next))
-                        (magit-get-section it))
-                      magit-status-initial-section)))
-    (goto-char (oref section start))
-    (when-let ((vis (cdr (assq 'magit-status-initial-section
-                               magit-section-initial-visibility-alist))))
-      (if (eq vis 'hide)
-          (magit-section-hide section)
-        (magit-section-show section))))
-  (remove-hook 'magit-refresh-buffer-hook
-               'magit-status-goto-initial-section-1 t))
-
-(defun magit-status-maybe-update-revision-buffer (&optional _)
-  "When moving in the status buffer, update the revision buffer.
-If there is no revision buffer in the same frame, then do nothing."
-  (when (derived-mode-p 'magit-status-mode)
-    (magit-log-maybe-update-revision-buffer-1)))
-
-(defun magit-status-maybe-update-blob-buffer (&optional _)
-  "When moving in the status buffer, update the blob buffer.
-If there is no blob buffer in the same frame, then do nothing."
-  (when (derived-mode-p 'magit-status-mode)
-    (magit-log-maybe-update-blob-buffer-1)))
-
-;;; Sections
-;;;; Special Headers
-
-(defun magit-insert-status-headers ()
-  "Insert header sections appropriate for `magit-status-mode' buffers.
-The sections are inserted by running the functions on the hook
-`magit-status-headers-hook'."
-  (if (magit-rev-verify "HEAD")
-      (magit-insert-headers 'magit-status-headers-hook)
-    (insert "In the beginning there was darkness\n\n")))
-
-(defvar magit-error-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-process-buffer)
-    map)
-  "Keymap for `error' sections.")
-
-(defun magit-insert-error-header ()
-  "Insert the message about the Git error that just occured.
-
-This function is only aware of the last error that occur when Git
-was run for side-effects.  If, for example, an error occurs while
-generating a diff, then that error won't be inserted.  Refreshing
-the status buffer causes this section to disappear again."
-  (when magit-this-error
-    (magit-insert-section (error 'git)
-      (insert (propertize (format "%-10s" "GitError! ")
-                          'face 'magit-section-heading))
-      (insert (propertize magit-this-error 'face 'font-lock-warning-face))
-      (when-let ((key (car (where-is-internal 'magit-process-buffer))))
-        (insert (format "  [Type `%s' for details]" (key-description key))))
-      (insert ?\n))
-    (setq magit-this-error nil)))
-
-(defun magit-insert-diff-filter-header ()
-  "Insert a header line showing the effective diff filters."
-  (let ((ignore-modules (magit-ignore-submodules-p)))
-    (when (or ignore-modules
-              magit-diff-section-file-args)
-      (insert (propertize (format "%-10s" "Filter! ")
-                          'face 'magit-section-heading))
-      (when ignore-modules
-        (insert ignore-modules)
-        (when magit-diff-section-file-args
-          (insert " -- ")))
-      (when magit-diff-section-file-args
-        (insert (mapconcat #'identity magit-diff-section-file-args " ")))
-      (insert ?\n))))
-
-;;;; Reference Headers
-
-(cl-defun magit-insert-head-branch-header
-    (&optional (branch (magit-get-current-branch)))
-  "Insert a header line about BRANCH.
-When BRANCH is nil, use the current branch or, if none, the
-detached `HEAD'."
-  (let ((output (magit-rev-format "%h %s" (or branch "HEAD"))))
-    (string-match "^\\([^ ]+\\) \\(.*\\)" output)
-    (magit-bind-match-strings (commit summary) output
-      (if branch
-          (magit-insert-section (branch branch)
-            (insert (format "%-10s" "Head: "))
-            (when magit-status-show-hashes-in-headers
-              (insert (propertize commit 'face 'magit-hash) ?\s))
-            (insert (propertize branch 'face 'magit-branch-local))
-            (insert ?\s)
-            (insert (funcall magit-log-format-message-function branch summary))
-            (insert ?\n))
-        (magit-insert-section (commit commit)
-          (insert (format "%-10s" "Head: "))
-          (insert (propertize commit 'face 'magit-hash))
-          (insert ?\s summary ?\n))))))
-
-(cl-defun magit-insert-upstream-branch-header
-    (&optional (branch (magit-get-current-branch))
-               (pull   (magit-get-upstream-branch branch))
-               keyword)
-  "Insert a header line about branch usually pulled into current branch."
-  (when pull
-    (magit-insert-section (branch pull)
-      (let ((rebase (magit-get "branch" branch "rebase")))
-        (pcase rebase
-          ("true")
-          ("false" (setq rebase nil))
-          (_       (setq rebase (magit-get-boolean "pull.rebase"))))
-        (insert (format "%-10s" (or keyword (if rebase "Rebase: " "Merge: ")))))
-      (--when-let (and magit-status-show-hashes-in-headers
-                       (not (string-match-p " " pull))
-                       (magit-rev-format "%h" pull))
-        (insert (propertize it 'face 'magit-hash) " "))
-      (if (string-match-p " " pull)
-          (pcase-let ((`(,url ,branch) (split-string pull " ")))
-            (insert branch " from " url " "))
-        (insert pull " ")
-        (--if-let (and (magit-rev-verify pull)
-                       (magit-rev-format "%s" pull))
-            (insert (funcall magit-log-format-message-function pull it))
-          (insert (propertize "is missing" 'face 'font-lock-warning-face))))
-      (insert ?\n))))
-
-(cl-defun magit-insert-push-branch-header
-    (&optional (branch (magit-get-current-branch))
-               (push   (magit-get-push-branch branch)))
-  "Insert a header line about the branch the current branch is pushed to."
-  (when push
-    (magit-insert-section (branch push)
-      (insert (format "%-10s" "Push: "))
-      (--when-let (and magit-status-show-hashes-in-headers
-                       (magit-rev-format "%h" push))
-        (insert (propertize it 'face 'magit-hash) ?\s))
-      (insert (propertize push 'face 'magit-branch-remote) ?\s)
-      (--if-let (and (magit-rev-verify push)
-                     (magit-rev-format "%s" push))
-          (insert (funcall magit-log-format-message-function push it))
-        (insert (propertize "is missing" 'face 'font-lock-warning-face)))
-      (insert ?\n))))
-
-(defun magit-insert-tags-header ()
-  "Insert a header line about the current and/or next tag."
-  (let* ((this-tag (magit-get-current-tag nil t))
-         (next-tag (magit-get-next-tag nil t))
-         (this-cnt (cadr this-tag))
-         (next-cnt (cadr next-tag))
-         (this-tag (car this-tag))
-         (next-tag (car next-tag))
-         (both-tags (and this-tag next-tag t)))
-    (when (or this-tag next-tag)
-      (magit-insert-section (tag (or this-tag next-tag))
-        (insert (format "%-10s" (if both-tags "Tags: " "Tag: ")))
-        (cl-flet ((insert-count
-                   (tag count face)
-                   (insert (concat (propertize tag 'face 'magit-tag)
-                                   (and (> count 0)
-                                        (format " (%s)"
-                                                (propertize (format "%s" count)
-                                                            'face face)))))))
-          (when this-tag  (insert-count this-tag this-cnt 'magit-branch-local))
-          (when both-tags (insert ", "))
-          (when next-tag  (insert-count next-tag next-cnt 'magit-tag)))
-        (insert ?\n)))))
-
-;;;; Auxiliary Headers
-
-(defun magit-insert-user-header ()
-  "Insert a header line about the current user."
-  (let ((name  (magit-get "user.name"))
-        (email (magit-get "user.email")))
-    (when (and name email)
-      (magit-insert-section (user name)
-        (insert (format "%-10s" "User: "))
-        (insert (propertize name 'face 'magit-log-author))
-        (insert " <" email ">\n")))))
-
-(defun magit-insert-repo-header ()
-  "Insert a header line showing the path to the repository top-level."
-  (let ((topdir (magit-toplevel)))
-    (magit-insert-section (repo topdir)
-      (insert (format "%-10s%s\n" "Repo: " (abbreviate-file-name topdir))))))
-
-(defun magit-insert-remote-header ()
-  "Insert a header line about the remote of the current branch.
-
-If no remote is configured for the current branch, then fall back
-showing the \"origin\" remote, or if that does not exist the first
-remote in alphabetic order."
-  (when-let ((name (magit-get-some-remote))
-             ;; Under certain configurations it's possible for url
-             ;; to be nil, when name is not, see #2858.
-             (url (magit-get "remote" name "url")))
-    (magit-insert-section (remote name)
-      (insert (format "%-10s" "Remote: "))
-      (insert (propertize name 'face 'magit-branch-remote) ?\s)
-      (insert url ?\n))))
-
-;;;; File Sections
-
-(defvar magit-untracked-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-delete-thing] 'magit-discard)
-    (define-key map "s" 'magit-stage)
-    map)
-  "Keymap for the `untracked' section.")
-
-(magit-define-section-jumper magit-jump-to-untracked "Untracked files" untracked)
-
-(defun magit-insert-untracked-files ()
-  "Maybe insert a list or tree of untracked files.
-
-Do so depending on the value of `status.showUntrackedFiles'.
-Note that even if the value is `all', Magit still initially
-only shows directories.  But the directory sections can then
-be expanded using \"TAB\".
-
-If the first element of `magit-diff-section-arguments' is a
-directory, then limit the list to files below that.  The value
-value of that variable can be set using \"D = f DIRECTORY RET g\"."
-  (let* ((show (or (magit-get "status.showUntrackedFiles") "normal"))
-         (base (car magit-diff-section-file-args))
-         (base (and base (file-directory-p base) base)))
-    (unless (equal show "no")
-      (if (equal show "all")
-          (when-let ((files (magit-untracked-files nil base)))
-            (magit-insert-section (untracked)
-              (magit-insert-heading "Untracked files:")
-              (magit-insert-files files base)
-              (insert ?\n)))
-        (when-let ((files
-                    (--mapcat (and (eq (aref it 0) ??)
-                                   (list (substring it 3)))
-                              (magit-git-items "status" "-z" "--porcelain"
-                                               (magit-ignore-submodules-p)
-                                               "--" base))))
-          (magit-insert-section (untracked)
-            (magit-insert-heading "Untracked files:")
-            (dolist (file files)
-              (magit-insert-section (file file)
-                (insert (propertize file 'face 'magit-filename) ?\n)))
-            (insert ?\n)))))))
-
-(magit-define-section-jumper magit-jump-to-tracked "Tracked files" tracked)
-
-(defun magit-insert-tracked-files ()
-  "Insert a tree of tracked files.
-
-If the first element of `magit-diff-section-arguments' is a
-directory, then limit the list to files below that.  The value
-value of that variable can be set using \"D = f DIRECTORY RET g\"."
-  (when-let ((files (magit-list-files)))
-    (let* ((base (car magit-diff-section-file-args))
-           (base (and base (file-directory-p base) base)))
-      (magit-insert-section (tracked nil t)
-        (magit-insert-heading "Tracked files:")
-        (magit-insert-files files base)
-        (insert ?\n)))))
-
-(defun magit-insert-ignored-files ()
-  "Insert a tree of ignored files.
-
-If the first element of `magit-diff-section-arguments' is a
-directory, then limit the list to files below that.  The value
-of that variable can be set using \"D = f DIRECTORY RET g\"."
-  (when-let ((files (magit-ignored-files)))
-    (let* ((base (car magit-diff-section-file-args))
-           (base (and base (file-directory-p base) base)))
-      (magit-insert-section (tracked nil t)
-        (magit-insert-heading "Ignored files:")
-        (magit-insert-files files base)
-        (insert ?\n)))))
-
-(defun magit-insert-files (files directory)
-  (while (and files (string-prefix-p (or directory "") (car files)))
-    (let ((dir (file-name-directory (car files))))
-      (if (equal dir directory)
-          (let ((file (pop files)))
-            (magit-insert-section (file file)
-              (insert (propertize file 'face 'magit-filename) ?\n)))
-        (magit-insert-section (file dir t)
-          (insert (propertize dir 'file 'magit-filename) ?\n)
-          (magit-insert-heading)
-          (setq files (magit-insert-files files dir))))))
-  files)
-
-(provide 'magit-status)
-;;; magit-status.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.elc
deleted file mode 100644
index 308eb82e706e..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-status.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.el
deleted file mode 100644
index f8ea74c85f3d..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.el
+++ /dev/null
@@ -1,502 +0,0 @@
-;;; magit-submodule.el --- submodule support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Code:
-
-(require 'magit)
-
-(defvar x-stretch-cursor)
-(defvar bookmark-make-record-function)
-
-;;; Options
-
-(defcustom magit-module-sections-hook
-  '(magit-insert-modules-overview
-    magit-insert-modules-unpulled-from-upstream
-    magit-insert-modules-unpulled-from-pushremote
-    magit-insert-modules-unpushed-to-upstream
-    magit-insert-modules-unpushed-to-pushremote)
-  "Hook run by `magit-insert-modules'.
-
-That function isn't part of `magit-status-sections-hook's default
-value, so you have to add it yourself for this hook to have any
-effect."
-  :package-version '(magit . "2.11.0")
-  :group 'magit-status
-  :type 'hook)
-
-(defcustom magit-module-sections-nested t
-  "Whether `magit-insert-modules' wraps inserted sections.
-
-If this is non-nil, then only a single top-level section
-is inserted.  If it is nil, then all sections listed in
-`magit-module-sections-hook' become top-level sections."
-  :package-version '(magit . "2.11.0")
-  :group 'magit-status
-  :type 'boolean)
-
-(defcustom magit-submodule-list-mode-hook '(hl-line-mode)
-  "Hook run after entering Magit-Submodule-List mode."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-repolist
-  :type 'hook
-  :get 'magit-hook-custom-get
-  :options '(hl-line-mode))
-
-(defcustom magit-submodule-list-columns
-  '(("Path"     25 magit-modulelist-column-path   nil)
-    ("Version"  25 magit-repolist-column-version  nil)
-    ("Branch"   20 magit-repolist-column-branch   nil)
-    ("B<U" 3 magit-repolist-column-unpulled-from-upstream   ((:right-align t)))
-    ("B>U" 3 magit-repolist-column-unpushed-to-upstream     ((:right-align t)))
-    ("B<P" 3 magit-repolist-column-unpulled-from-pushremote ((:right-align t)))
-    ("B>P" 3 magit-repolist-column-unpushed-to-pushremote   ((:right-align t)))
-    ("B"   3 magit-repolist-column-branches                 ((:right-align t)))
-    ("S"   3 magit-repolist-column-stashes                  ((:right-align t))))
-  "List of columns displayed by `magit-list-submodules'.
-
-Each element has the form (HEADER WIDTH FORMAT PROPS).
-
-HEADER is the string displayed in the header.  WIDTH is the width
-of the column.  FORMAT is a function that is called with one
-argument, the repository identification (usually its basename),
-and with `default-directory' bound to the toplevel of its working
-tree.  It has to return a string to be inserted or nil.  PROPS is
-an alist that supports the keys `:right-align' and `:pad-right'."
-  :package-version '(magit . "2.8.0")
-  :group 'magit-repolist-mode
-  :type `(repeat (list :tag "Column"
-                       (string   :tag "Header Label")
-                       (integer  :tag "Column Width")
-                       (function :tag "Inserter Function")
-                       (repeat   :tag "Properties"
-                                 (list (choice :tag "Property"
-                                               (const :right-align)
-                                               (const :pad-right)
-                                               (symbol))
-                                       (sexp   :tag "Value"))))))
-
-;;; Popup
-
-;;;###autoload (autoload 'magit-submodule-popup "magit-submodule" nil t)
-(magit-define-popup magit-submodule-popup
-  "Popup console for submodule commands."
-  :man-page "git-submodule"
-  :switches '((?f "Force"            "--force")
-              (?r "Recursive"        "--recursive")
-              (?N "Do not fetch"     "--no-fetch")
-              (?C "Checkout tip"     "--checkout")
-              (?R "Rebase onto tip"  "--rebase")
-              (?M "Merge tip"        "--merge")
-              (?U "Use upstream tip" "--remote"))
-  :actions
-  '((?a "Add            git submodule add [--force]"
-        magit-submodule-add)
-    (?r "Register       git submodule init"
-        magit-submodule-register)
-    (?p "Populate       git submodule update --init"
-        magit-submodule-populate)
-    (?u "Update         git submodule update [--force] [--no-fetch]
-                     [--remote] [--recursive] [--checkout|--rebase|--merge]"
-        magit-submodule-update)
-    (?s "Synchronize    git submodule sync [--recursive]"
-        magit-submodule-synchronize)
-    (?d "Unpopulate     git submodule deinit [--force]"
-        magit-submodule-unpopulate)
-    nil
-    (?l "List all modules"  magit-list-submodules)
-    (?f "Fetch all modules" magit-fetch-modules))
-  :max-action-columns 1)
-
-(defun magit-submodule-filtered-arguments (&rest filters)
-  (--filter (and (member it filters) it)
-            (magit-submodule-arguments)))
-
-;;;###autoload
-(defun magit-submodule-add (url &optional path name args)
-  "Add the repository at URL as a module.
-
-Optional PATH is the path to the module relative to the root of
-the superproject.  If it is nil, then the path is determined
-based on the URL.  Optional NAME is the name of the module.  If
-it is nil, then PATH also becomes the name."
-  (interactive
-   (magit-with-toplevel
-     (let* ((url (magit-read-string-ns "Add submodule (remote url)"))
-            (path (let ((read-file-name-function
-                         (if (or (eq read-file-name-function 'ido-read-file-name)
-                                 (advice-function-member-p
-                                  'ido-read-file-name
-                                  read-file-name-function))
-                             ;; The Ido variant doesn't work properly here.
-                             #'read-file-name-default
-                           read-file-name-function)))
-                    (directory-file-name
-                     (file-relative-name
-                      (read-directory-name
-                       "Add submodules at path: " nil nil nil
-                       (and (string-match "\\([^./]+\\)\\(\\.git\\)?$" url)
-                            (match-string 1 url))))))))
-       (list url
-             (directory-file-name path)
-             (magit-submodule-read-name-for-path path)
-             (magit-submodule-filtered-arguments "--force")))))
-  (magit-with-toplevel
-    (magit-call-git "submodule" "add" (and name (list "--name" name))
-                    args "--" url path)
-    (unless (version< (magit-git-version) "2.12.0")
-      (magit-call-git "submodule" "absorbgitdirs" path))
-    (magit-refresh)))
-
-;;;###autoload
-(defun magit-submodule-read-name-for-path (path &optional prefer-short)
-  (let* ((path (directory-file-name (file-relative-name path)))
-         (name (file-name-nondirectory path)))
-    (push (if prefer-short path name) minibuffer-history)
-    (magit-read-string-ns
-     "Submodule name" nil (cons 'minibuffer-history 2)
-     (or (--keep (pcase-let ((`(,var ,val) (split-string it "=")))
-                   (and (equal val path)
-                        (cadr (split-string var "\\."))))
-                 (magit-git-lines "config" "--list" "-f" ".gitmodules"))
-         (if prefer-short name path)))))
-
-;;;###autoload
-(defun magit-submodule-register (modules)
-  "Register MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user."
-  ;; This command and the underlying "git submodule init" do NOT
-  ;; "initialize" modules.  They merely "register" modules in the
-  ;; super-projects $GIT_DIR/config file, the purpose of which is to
-  ;; allow users to change such values before actually initializing
-  ;; the modules.
-  (interactive
-   (list (magit-module-confirm "Register" 'magit-module-no-worktree-p)))
-  (magit-with-toplevel
-    (magit-run-git-async "submodule" "init" "--" modules)))
-
-;;;###autoload
-(defun magit-submodule-populate (modules)
-  "Create MODULES working directories, checking out the recorded commits.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user."
-  ;; This is the command that actually "initializes" modules.
-  ;; A module is initialized when it has a working directory,
-  ;; a gitlink, and a .gitmodules entry.
-  (interactive
-   (list (magit-module-confirm "Populate" 'magit-module-no-worktree-p)))
-  (magit-with-toplevel
-    (magit-run-git-async "submodule" "update" "--init" "--" modules)))
-
-;;;###autoload
-(defun magit-submodule-update (modules args)
-  "Update MODULES by checking out the recorded commits.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user."
-  ;; Unlike `git-submodule's `update' command ours can only update
-  ;; "initialized" modules by checking out other commits but not
-  ;; "initialize" modules by creating the working directories.
-  ;; To do the latter we provide the "setup" command.
-  (interactive
-   (list (magit-module-confirm "Update" 'magit-module-worktree-p)
-         (magit-submodule-filtered-arguments
-          "--force" "--remote" "--recursive" "--checkout" "--rebase" "--merge"
-          "--no-fetch")))
-  (magit-with-toplevel
-    (magit-run-git-async "submodule" "update" args "--" modules)))
-
-;;;###autoload
-(defun magit-submodule-synchronize (modules args)
-  "Synchronize url configuration of MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user."
-  (interactive
-   (list (magit-module-confirm "Synchronize" 'magit-module-worktree-p)
-         (magit-submodule-filtered-arguments "--recursive")))
-  (magit-with-toplevel
-    (magit-run-git-async "submodule" "sync" args "--" modules)))
-
-;;;###autoload
-(defun magit-submodule-unpopulate (modules args)
-  "Remove working directories of MODULES.
-
-With a prefix argument act on all suitable modules.  Otherwise,
-if the region selects modules, then act on those.  Otherwise, if
-there is a module at point, then act on that.  Otherwise read a
-single module from the user."
-  ;; Even though a package is "uninitialized" (it has no worktree)
-  ;; the super-projects $GIT_DIR/config may never-the-less set the
-  ;; module's url.  This may happen if you `deinit' and then `init'
-  ;; to register (NOT initialize).  Because the purpose of `deinit'
-  ;; is to remove the working directory AND to remove the url, this
-  ;; command does not limit itself to modules that have no working
-  ;; directory.
-  (interactive
-   (list (magit-module-confirm "Unpopulate")
-         (magit-submodule-filtered-arguments "--force")))
-  (magit-with-toplevel
-    (magit-run-git-async "submodule" "deinit" args "--" modules)))
-
-;;; Sections
-
-;;;###autoload
-(defun magit-insert-modules ()
-  "Insert submodule sections.
-Hook `magit-module-sections-hook' controls which module sections
-are inserted, and option `magit-module-sections-nested' controls
-whether they are wrapped in an additional section."
-  (when-let ((modules (magit-list-module-paths)))
-    (if magit-module-sections-nested
-        (magit-insert-section section (submodules nil t)
-          (magit-insert-heading
-            (format "%s (%s)"
-                    (propertize "Modules" 'face 'magit-section-heading)
-                    (length modules)))
-          (if (oref section hidden)
-              (oset section washer 'magit--insert-modules)
-            (magit--insert-modules)))
-      (magit--insert-modules))))
-
-(defun magit--insert-modules (&optional _section)
-  (magit-run-section-hook 'magit-module-sections-hook))
-
-;;;###autoload
-(defun magit-insert-modules-overview ()
-  "Insert sections for all modules.
-For each section insert the path and the output of `git describe --tags',
-or, failing that, the abbreviated HEAD commit hash."
-  (when-let ((modules (magit-list-module-paths)))
-    (magit-insert-section section (submodules nil t)
-      (magit-insert-heading
-        (format "%s (%s)"
-                (propertize "Modules overview" 'face 'magit-section-heading)
-                (length modules)))
-      (if (oref section hidden)
-          (oset section washer 'magit--insert-modules-overview)
-        (magit--insert-modules-overview)))))
-
-(defvar magit-modules-overview-align-numbers t)
-
-(defun magit--insert-modules-overview (&optional _section)
-  (magit-with-toplevel
-    (let* ((modules (magit-list-module-paths))
-           (path-format (format "%%-%is "
-                                (min (apply 'max (mapcar 'length modules))
-                                     (/ (window-width) 2))))
-           (branch-format (format "%%-%is " (min 25 (/ (window-width) 3)))))
-      (dolist (module modules)
-        (let ((default-directory
-                (expand-file-name (file-name-as-directory module))))
-          (magit-insert-section (submodule module t)
-            (insert (propertize (format path-format module)
-                                'face 'magit-diff-file-heading))
-            (if (not (file-exists-p ".git"))
-                (insert "(unpopulated)")
-              (insert (format branch-format
-                              (--if-let (magit-get-current-branch)
-                                  (propertize it 'face 'magit-branch-local)
-                                (propertize "(detached)" 'face 'warning))))
-              (--if-let (magit-git-string "describe" "--tags")
-                  (progn (when (and magit-modules-overview-align-numbers
-                                    (string-match-p "\\`[0-9]" it))
-                           (insert ?\s))
-                         (insert (propertize it 'face 'magit-tag)))
-                (--when-let (magit-rev-format "%h")
-                  (insert (propertize it 'face 'magit-hash)))))
-            (insert ?\n))))))
-  (insert ?\n))
-
-(defvar magit-submodules-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing] 'magit-list-submodules)
-    map)
-  "Keymap for `submodules' sections.")
-
-(defvar magit-submodule-section-map
-  (let ((map (make-sparse-keymap)))
-    (unless (featurep 'jkl)
-      (define-key map "\C-j"   'magit-submodule-visit))
-    (define-key map [C-return] 'magit-submodule-visit)
-    (define-key map [remap magit-visit-thing]  'magit-submodule-visit)
-    (define-key map [remap magit-delete-thing] 'magit-submodule-deinit)
-    (define-key map "K" 'magit-file-untrack)
-    (define-key map "R" 'magit-file-rename)
-    map)
-  "Keymap for `submodule' sections.")
-
-(defun magit-submodule-visit (module &optional other-window)
-  "Visit MODULE by calling `magit-status' on it.
-Offer to initialize MODULE if it's not checked out yet.
-With a prefix argument, visit in another window."
-  (interactive (list (or (magit-section-when submodule)
-                         (magit-read-module-path "Visit module"))
-                     current-prefix-arg))
-  (magit-with-toplevel
-    (let ((path (expand-file-name module)))
-      (if (and (not (file-exists-p (expand-file-name ".git" module)))
-               (not (y-or-n-p (format "Initialize submodule '%s' first?"
-                                      module))))
-          (when (file-exists-p path)
-            (dired-jump other-window (concat path "/.")))
-        (magit-run-git-async "submodule" "update" "--init" "--" module)
-        (set-process-sentinel
-         magit-this-process
-         (lambda (process event)
-           (let ((magit-process-raise-error t))
-             (magit-process-sentinel process event))
-           (when (and (eq (process-status      process) 'exit)
-                      (=  (process-exit-status process) 0))
-             (magit-diff-visit-directory path other-window))))))))
-
-;;;###autoload
-(defun magit-insert-modules-unpulled-from-upstream ()
-  "Insert sections for modules that haven't been pulled from the upstream.
-These sections can be expanded to show the respective commits."
-  (magit--insert-modules-logs "Modules unpulled from @{upstream}"
-                              'modules-unpulled-from-upstream
-                              "HEAD..@{upstream}"))
-
-;;;###autoload
-(defun magit-insert-modules-unpulled-from-pushremote ()
-  "Insert sections for modules that haven't been pulled from the push-remote.
-These sections can be expanded to show the respective commits."
-  (magit--insert-modules-logs "Modules unpulled from @{push}"
-                              'modules-unpulled-from-pushremote
-                              "HEAD..@{push}"))
-
-;;;###autoload
-(defun magit-insert-modules-unpushed-to-upstream ()
-  "Insert sections for modules that haven't been pushed to the upstream.
-These sections can be expanded to show the respective commits."
-  (magit--insert-modules-logs "Modules unmerged into @{upstream}"
-                              'modules-unpushed-to-upstream
-                              "@{upstream}..HEAD"))
-
-;;;###autoload
-(defun magit-insert-modules-unpushed-to-pushremote ()
-  "Insert sections for modules that haven't been pushed to the push-remote.
-These sections can be expanded to show the respective commits."
-  (magit--insert-modules-logs "Modules unpushed to @{push}"
-                              'modules-unpushed-to-pushremote
-                              "@{push}..HEAD"))
-
-(defun magit--insert-modules-logs (heading type range)
-  "For internal use, don't add to a hook."
-  (unless (magit-ignore-submodules-p)
-    (when-let ((modules (magit-list-module-paths)))
-      (magit-insert-section section ((eval type) nil t)
-        (string-match "\\`\\(.+\\) \\([^ ]+\\)\\'" heading)
-        (magit-insert-heading
-          (propertize (match-string 1 heading) 'face 'magit-section-heading) " "
-          (propertize (match-string 2 heading) 'face 'magit-branch-remote) ":")
-        (magit-with-toplevel
-          (dolist (module modules)
-            (when (magit-module-worktree-p module)
-              (let ((default-directory
-                      (expand-file-name (file-name-as-directory module))))
-                (when (magit-file-accessible-directory-p default-directory)
-                  (magit-insert-section sec (file module t)
-                    (magit-insert-heading
-                      (propertize module 'face 'magit-diff-file-heading) ":")
-                    (magit-git-wash
-                        (apply-partially 'magit-log-wash-log 'module)
-                      "-c" "push.default=current" "log" "--oneline" range)
-                    (when (> (point)
-                             (oref sec content))
-                      (delete-char -1))))))))
-        (if (> (point)
-               (oref section content))
-            (insert ?\n)
-          (magit-cancel-section))))))
-
-;;; List
-
-;;;###autoload
-(defun magit-list-submodules ()
-  "Display a list of the current repository's submodules."
-  (interactive)
-  (magit-display-buffer
-   (or (magit-mode-get-buffer 'magit-submodule-list-mode)
-       (magit-with-toplevel
-         (magit-generate-new-buffer 'magit-submodule-list-mode))))
-  (magit-submodule-list-mode)
-  (magit-submodule-list-refresh)
-  (tabulated-list-print))
-
-(defvar magit-submodule-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-repolist-mode-map)
-    map)
-  "Local keymap for Magit-Submodule-List mode buffers.")
-
-(define-derived-mode magit-submodule-list-mode tabulated-list-mode "Modules"
-  "Major mode for browsing a list of Git submodules."
-  :group 'magit-repolist-mode
-  (setq x-stretch-cursor        nil)
-  (setq tabulated-list-padding  0)
-  (setq tabulated-list-sort-key (cons "Path" nil))
-  (setq tabulated-list-format
-        (vconcat (mapcar (pcase-lambda (`(,title ,width ,_fn ,props))
-                           (nconc (list title width t)
-                                  (-flatten props)))
-                         magit-submodule-list-columns)))
-  (tabulated-list-init-header)
-  (add-hook 'tabulated-list-revert-hook 'magit-submodule-list-refresh nil t)
-  (setq imenu-prev-index-position-function
-        #'magit-imenu--submodule-prev-index-position-function)
-  (setq imenu-extract-index-name-function
-        #'magit-imenu--submodule-extract-index-name-function)
-  (setq-local bookmark-make-record-function
-              #'magit-bookmark--submodules-make-record))
-
-(defun magit-submodule-list-refresh ()
-  (setq tabulated-list-entries
-        (-keep (lambda (module)
-                 (let ((default-directory
-                         (expand-file-name (file-name-as-directory module))))
-                   (and (file-exists-p ".git")
-                        (list module
-                              (vconcat
-                               (--map (or (funcall (nth 2 it) module) "")
-                                      magit-submodule-list-columns))))))
-               (magit-list-module-paths))))
-
-(defun magit-modulelist-column-path (path)
-  "Insert the relative path of the submodule."
-  path)
-
-(provide 'magit-submodule)
-;;; magit-submodule.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.elc
deleted file mode 100644
index b55671598c9c..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-submodule.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.el
deleted file mode 100644
index b31d0d8b5f15..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.el
+++ /dev/null
@@ -1,146 +0,0 @@
-;;; magit-subtree.el --- subtree support for Magit  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Popup
-
-;;;###autoload (autoload 'magit-subtree-popup "magit-subtree" nil t)
-(magit-define-popup magit-subtree-popup
-  "Popup console for subtree commands."
-  :man-page "git-subtree"
-  :switches '("Switches for add, merge, push, and pull"
-              (?s "Squash" "--squash")
-              "Switches for split"
-              (?i "Ignore joins" "--ignore-joins")
-              (?j "Rejoin"       "--rejoin"))
-  :options  '("Options"
-              (?p "Prefix" "--prefix=" magit-subtree-read-prefix)
-              "Options for add, merge, and pull"
-              (?m "Message" "--message=")
-              "Options for split"
-              (?a "Annotate" "--annotate=")
-              (?b "Branch"   "--branch=")
-              (?o "Onto"     "--onto=" magit-read-branch-or-commit))
-  :actions  '((?a "Add"        magit-subtree-add)
-              (?m "Merge"      magit-subtree-merge)
-              (?p "Push"       magit-subtree-push)
-              (?c "Add commit" magit-subtree-add-commit)
-              (?f "Pull"       magit-subtree-pull)
-              (?s "Split"      magit-subtree-split))
-  :max-action-columns 3)
-
-(defun magit-subtree-read-prefix (prompt &optional default)
-  (let* ((insert-default-directory nil)
-         (topdir (magit-toplevel))
-         (prefix (read-directory-name (concat prompt ": ") topdir default)))
-    (if (file-name-absolute-p prefix)
-        ;; At least `ido-mode's variant is not compatible.
-        (if (string-prefix-p topdir prefix)
-            (file-relative-name prefix topdir)
-          (user-error "%s isn't inside the repository at %s" prefix topdir))
-      prefix)))
-
-;;; Commands
-
-(defun magit-subtree-prefix (prompt)
-  (--if-let (--first (string-prefix-p "--prefix=" it)
-                     (magit-subtree-arguments))
-      (substring it 9)
-    (magit-subtree-read-prefix prompt)))
-
-(defun magit-subtree-args ()
-  (-filter (lambda (arg)
-             (if (eq this-command 'magit-subtree-split)
-                 (or (equal arg "--ignore-joins")
-                     (equal arg "--rejoin")
-                     (string-prefix-p "--annotate=" arg)
-                     (string-prefix-p "--branch=" arg)
-                     (string-prefix-p "--onto=" arg))
-               (or (equal arg "--squash")
-                   (and (string-prefix-p "--message=" arg)
-                        (not (eq this-command 'magit-subtree-push))))))
-           (magit-subtree-arguments)))
-
-(defun magit-git-subtree (subcmd prefix &rest args)
-  (magit-run-git-async "subtree" subcmd (concat "--prefix=" prefix) args))
-
-;;;###autoload
-(defun magit-subtree-add (prefix repository ref args)
-  "Add REF from REPOSITORY as a new subtree at PREFIX."
-  (interactive
-   (cons (magit-subtree-prefix "Add subtree")
-         (let ((remote (magit-read-remote-or-url "From repository")))
-           (list remote
-                 (magit-read-refspec "Ref" remote)
-                 (magit-subtree-args)))))
-  (magit-git-subtree "add" prefix args repository ref))
-
-;;;###autoload
-(defun magit-subtree-add-commit (prefix commit args)
-  "Add COMMIT as a new subtree at PREFIX."
-  (interactive (list (magit-subtree-prefix "Add subtree")
-                     (magit-read-string-ns "Commit")
-                     (magit-subtree-args)))
-  (magit-git-subtree "add" prefix args commit))
-
-;;;###autoload
-(defun magit-subtree-merge (prefix commit args)
-  "Merge COMMIT into the PREFIX subtree."
-  (interactive (list (magit-subtree-prefix "Merge into subtree")
-                     (magit-read-string-ns "Commit")
-                     (magit-subtree-args)))
-  (magit-git-subtree "merge" prefix args commit))
-
-;;;###autoload
-(defun magit-subtree-pull (prefix repository ref args)
-  "Pull REF from REPOSITORY into the PREFIX subtree."
-  (interactive
-   (cons (magit-subtree-prefix "Pull into subtree")
-         (let ((remote (magit-read-remote-or-url "From repository")))
-           (list remote
-                 (magit-read-refspec "Ref" remote)
-                 (magit-subtree-args)))))
-  (magit-git-subtree "pull" prefix args repository ref))
-
-;;;###autoload
-(defun magit-subtree-push (prefix repository ref args)
-  "Extract the history of the subtree PREFIX and push it to REF on REPOSITORY."
-  (interactive (list (magit-subtree-prefix "Push subtree")
-                     (magit-read-remote-or-url "To repository")
-                     (magit-read-string-ns "To reference")
-                     (magit-subtree-args)))
-  (magit-git-subtree "push" prefix args repository ref))
-
-;;;###autoload
-(defun magit-subtree-split (prefix commit args)
-  "Extract the history of the subtree PREFIX."
-  (interactive (list (magit-subtree-prefix "Split subtree")
-                     (magit-read-string-ns "Commit")
-                     (magit-subtree-args)))
-  (magit-git-subtree "split" prefix args commit))
-
-(provide 'magit-subtree)
-;;; magit-subtree.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.elc
deleted file mode 100644
index 312ddee3ef46..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-subtree.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.el
deleted file mode 100644
index 1153e2ca4247..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.el
+++ /dev/null
@@ -1,132 +0,0 @@
-;;; magit-tag.el --- tag functionality  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements tag commands.
-
-;;; Code:
-
-(require 'magit)
-
-;;;###autoload (autoload 'magit-tag-popup "magit" nil t)
-(magit-define-popup magit-tag-popup
-  "Popup console for tag commands."
-  :man-page "git-tag"
-  :switches '((?a "Annotate" "--annotate")
-              (?f "Force"    "--force")
-              (?s "Sign"     "--sign"))
-  :options  '((?f "Sign"     "--local-user=" magit-read-gpg-secret-key))
-  :actions  '((?t "Create"   magit-tag)
-              (?k "Delete"   magit-tag-delete)
-              (?p "Prune"    magit-tag-prune))
-  :default-action 'magit-tag)
-
-;;;###autoload
-(defun magit-tag (name rev &optional args)
-  "Create a new tag with the given NAME at REV.
-With a prefix argument annotate the tag.
-\n(git tag [--annotate] NAME REV)"
-  (interactive (list (magit-read-tag "Tag name")
-                     (magit-read-branch-or-commit "Place tag on")
-                     (let ((args (magit-tag-arguments)))
-                       (when current-prefix-arg
-                         (cl-pushnew "--annotate" args))
-                       args)))
-  (magit-run-git-with-editor "tag" args name rev))
-
-;;;###autoload
-(defun magit-tag-delete (tags)
-  "Delete one or more tags.
-If the region marks multiple tags (and nothing else), then offer
-to delete those, otherwise prompt for a single tag to be deleted,
-defaulting to the tag at point.
-\n(git tag -d TAGS)"
-  (interactive (list (--if-let (magit-region-values 'tag)
-                         (magit-confirm t nil "Delete %i tags" nil it)
-                       (magit-read-tag "Delete tag" t))))
-  (magit-run-git "tag" "-d" tags))
-
-;;;###autoload
-(defun magit-tag-prune (tags remote-tags remote)
-  "Offer to delete tags missing locally from REMOTE, and vice versa."
-  (interactive
-   (let* ((remote (magit-read-remote "Prune tags using remote"))
-          (tags   (magit-list-tags))
-          (rtags  (prog2 (message "Determining remote tags...")
-                      (magit-remote-list-tags remote)
-                    (message "Determining remote tags...done")))
-          (ltags  (-difference tags rtags))
-          (rtags  (-difference rtags tags)))
-     (unless (or ltags rtags)
-       (message "Same tags exist locally and remotely"))
-     (unless (magit-confirm t
-               "Delete %s locally"
-               "Delete %i tags locally"
-               'noabort ltags)
-       (setq ltags nil))
-     (unless (magit-confirm t
-               "Delete %s from remote"
-               "Delete %i tags from remote"
-               'noabort rtags)
-       (setq rtags nil))
-     (list ltags rtags remote)))
-  (when tags
-    (magit-call-git "tag" "-d" tags))
-  (when remote-tags
-    (magit-run-git-async "push" remote (--map (concat ":" it) remote-tags))))
-
-;;;###autoload
-(defun magit-tag-release (tag)
-  "Create an opinionated release tag.
-
-Assume version tags that match \"\\\\`v?[0-9]\\\\(\\\\.[0-9]\\\\)*\\\\'\".
-Prompt for the name of the new tag using the highest existing tag
-as initial input and call \"git tag --annotate --sign -m MSG\" TAG,
-regardless of whether these arguments are enabled in the popup.
-Given a TAG \"v1.2.3\" and a repository \"/path/to/foo-bar\", the
-MESSAGE would be \"Foo-Bar 1.2.3\".
-
-Because it is so opinionated, this command is not available from
-the tag popup by default."
-  (interactive
-   (list (read-string "Create tag: "
-                      (car (nreverse
-                            (cl-sort (magit-list-tags) #'version<
-                                     :key (lambda (tag)
-                                            (if (string-prefix-p "v" tag)
-                                                (substring tag 1)
-                                              tag))))))))
-  (magit-run-git
-   "tag" "--annotate" "--sign"
-   "-m" (format "%s %s"
-                (capitalize (file-name-nondirectory
-                             (directory-file-name (magit-toplevel))))
-                (if (string-prefix-p "v" tag)
-                    (substring tag 1)
-                  tag))
-   tag)
-  (magit-show-refs))
-
-(provide 'magit-tag)
-;;; magit-tag.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.elc
deleted file mode 100644
index a55308eb015a..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-tag.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.el
deleted file mode 100644
index f2fd03ca6f5e..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.el
+++ /dev/null
@@ -1,978 +0,0 @@
-;;; magit-utils.el --- various utilities  -*- lexical-binding: t; coding: utf-8 -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Contains code from GNU Emacs https://www.gnu.org/software/emacs,
-;; released under the GNU General Public License version 3 or later.
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library defines several utility functions used by several
-;; other libraries which cannot depend on one another (because
-;; circular dependencies are not good).  Luckily most (all) of these
-;; functions have very little (nothing) to do with Git, so we not only
-;; have to do this, it even makes sense.
-
-;; Unfortunately there are also some options which are used by several
-;; libraries which cannot depend on one another, they are defined here
-;; too.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-(require 'subr-x)
-
-(require 'crm)
-
-(eval-when-compile (require 'ido))
-(declare-function ido-completing-read+ "ido-completing-read+"
-                  (prompt collection &optional predicate
-                          require-match initial-input
-                          hist def inherit-input-method))
-(declare-function Info-get-token "info" (pos start all &optional errorstring))
-
-(eval-when-compile (require 'vc-git))
-(declare-function vc-git--run-command-string "vc-git" (file &rest args))
-
-(defvar magit-wip-before-change-mode)
-
-;;; Options
-
-(defcustom magit-completing-read-function 'magit-builtin-completing-read
-  "Function to be called when requesting input from the user.
-
-If you have enabled `ivy-mode' or `helm-mode', then you don't
-have to customize this option; `magit-builtin-completing-read'
-will work just fine.  However, if you use Ido completion, then
-you do have to use `magit-ido-completion-read', because Ido is
-less well behaved than the former, more modern alternatives.
-
-If you would like to use Ivy or Helm completion with Magit but
-not enable the respective modes globally, then customize this
-option to use `ivy-completing-read' or
-`helm--completing-read-default'.  If you choose to use
-`ivy-completing-read', note that the items may always be shown in
-alphabetical order, depending on your version of Ivy."
-  :group 'magit-essentials
-  :type '(radio (function-item magit-builtin-completing-read)
-                (function-item magit-ido-completing-read)
-                (function-item ivy-completing-read)
-                (function-item helm--completing-read-default)
-                (function :tag "Other function")))
-
-(defcustom magit-dwim-selection
-  '((magit-stash-apply        nil t)
-    (magit-stash-branch       nil t)
-    (magit-stash-branch-here  nil t)
-    (magit-stash-format-patch nil t)
-    (magit-stash-drop         nil ask)
-    (magit-stash-pop          nil ask)
-    (forge-browse-commit      nil t)
-    (forge-browse-branch      nil t)
-    (forge-browse-remote      nil t)
-    (forge-browse-issue       nil t)
-    (forge-browse-pullreq     nil t)
-    (forge-visit-issue        nil t)
-    (forge-visit-pullreq      nil t))
-  "When not to offer alternatives and ask for confirmation.
-
-Many commands by default ask the user to select from a list of
-possible candidates.  They do so even when there is a thing at
-point that they can act on, which is then offered as the default.
-
-This option can be used to tell certain commands to use the thing
-at point instead of asking the user to select a candidate to act
-on, with or without confirmation.
-
-The value has the form ((COMMAND nil|PROMPT DEFAULT)...).
-
-- COMMAND is the command that should not prompt for a choice.
-  To have an effect, the command has to use the function
-  `magit-completing-read' or a utility function which in turn uses
-  that function.
-
-- If the command uses `magit-completing-read' multiple times, then
-  PROMPT can be used to only affect one of these uses.  PROMPT, if
-  non-nil, is a regular expression that is used to match against
-  the PROMPT argument passed to `magit-completing-read'.
-
-- DEFAULT specifies how to use the default.  If it is t, then
-  the DEFAULT argument passed to `magit-completing-read' is used
-  without confirmation.  If it is `ask', then the user is given
-  a chance to abort.  DEFAULT can also be nil, in which case the
-  entry has no effect."
-  :package-version '(magit . "2.12.0")
-  :group 'magit-commands
-  :type '(repeat
-          (list (symbol :tag "Command") ; It might not be fboundp yet.
-                (choice (const  :tag "for all prompts" nil)
-                        (regexp :tag "for prompts matching regexp"))
-                (choice (const  :tag "offer other choices" nil)
-                        (const  :tag "require confirmation" ask)
-                        (const  :tag "use default without confirmation" t)))))
-
-(defconst magit--confirm-actions
-  '((const reverse)           (const discard)
-    (const rename)            (const resurrect)
-    (const untrack)           (const trash)
-    (const delete)            (const abort-rebase)
-    (const abort-merge)       (const merge-dirty)
-    (const drop-stashes)      (const resect-bisect)
-    (const kill-process)      (const delete-unmerged-branch)
-    (const delete-pr-branch)
-    (const stage-all-changes) (const unstage-all-changes)
-    (const safe-with-wip)))
-
-(defcustom magit-no-confirm nil
-  "A list of symbols for actions Magit should not confirm, or t.
-
-Many potentially dangerous commands by default ask the user for
-confirmation.  Each of the below symbols stands for an action
-which, when invoked unintentionally or without being fully aware
-of the consequences, could lead to tears.  In many cases there
-are several commands that perform variations of a certain action,
-so we don't use the command names but more generic symbols.
-
-Applying changes:
-
-  `discard' Discarding one or more changes (i.e. hunks or the
-  complete diff for a file) loses that change, obviously.
-
-  `reverse' Reverting one or more changes can usually be undone
-  by reverting the reversion.
-
-  `stage-all-changes', `unstage-all-changes' When there are both
-  staged and unstaged changes, then un-/staging everything would
-  destroy that distinction.  Of course that also applies when
-  un-/staging a single change, but then less is lost and one does
-  that so often that having to confirm every time would be
-  unacceptable.
-
-Files:
-
-  `delete' When a file that isn't yet tracked by Git is deleted
-  then it is completely lost, not just the last changes.  Very
-  dangerous.
-
-  `trash' Instead of deleting a file it can also be move to the
-  system trash.  Obviously much less dangerous than deleting it.
-
-  Also see option `magit-delete-by-moving-to-trash'.
-
-  `resurrect' A deleted file can easily be resurrected by
-  \"deleting\" the deletion, which is done using the same command
-  that was used to delete the same file in the first place.
-
-  `untrack' Untracking a file can be undone by tracking it again.
-
-  `rename' Renaming a file can easily be undone.
-
-Sequences:
-
-  `reset-bisect' Aborting (known to Git as \"resetting\") a
-  bisect operation loses all information collected so far.
-
-  `abort-rebase' Aborting a rebase throws away all already
-  modified commits, but it's possible to restore those from the
-  reflog.
-
-  `abort-merge' Aborting a merge throws away all conflict
-  resolutions which has already been carried out by the user.
-
-  `merge-dirty' Merging with a dirty worktree can make it hard to
-  go back to the state before the merge was initiated.
-
-References:
-
-  `delete-unmerged-branch' Once a branch has been deleted it can
-  only be restored using low-level recovery tools provided by
-  Git.  And even then the reflog is gone.  The user always has
-  to confirm the deletion of a branch by accepting the default
-  choice (or selecting another branch), but when a branch has
-  not been merged yet, also make sure the user is aware of that.
-
-  `delete-pr-branch' When deleting a branch that was created from
-  a pull request and if no other branches still exist on that
-  remote, then `magit-branch-delete' offers to delete the remote
-  as well.  This should be safe because it only happens if no
-  other refs exist in the remotes namespace, and you can recreate
-  the remote if necessary.
-
-  `drop-stashes' Dropping a stash is dangerous because Git stores
-  stashes in the reflog.  Once a stash is removed, there is no
-  going back without using low-level recovery tools provided by
-  Git.  When a single stash is dropped, then the user always has
-  to confirm by accepting the default (or selecting another).
-  This action only concerns the deletion of multiple stashes at
-  once.
-
-Edit published history:
-
-  Without adding these symbols here, you will be warned before
-  editing commits that have already been pushed to one of the
-  branches listed in `magit-published-branches'.
-
-  `amend-published' Affects most commands that amend to \"HEAD\".
-
-  `rebase-published' Affects commands that perform interactive
-  rebases.  This includes commands from the commit popup that
-  modify a commit other than \"HEAD\", namely the various fixup
-  and squash variants.
-
-  `edit-published' Affects the commands `magit-edit-line-commit'
-  and `magit-diff-edit-hunk-commit'.  These two commands make
-  it quite easy to accidentally edit a published commit, so you
-  should think twice before configuring them not to ask for
-  confirmation.
-
-  To disable confirmation completely, add all three symbols here
-  or set `magit-published-branches' to nil.
-
-Various:
-
-  `kill-process' There seldom is a reason to kill a process.
-
-Global settings:
-
-  Instead of adding all of the above symbols to the value of this
-  option you can also set it to the atom `t', which has the same
-  effect as adding all of the above symbols.  Doing that most
-  certainly is a bad idea, especially because other symbols might
-  be added in the future.  So even if you don't want to be asked
-  for confirmation for any of these actions, you are still better
-  of adding all of the respective symbols individually.
-
-  When `magit-wip-before-change-mode' is enabled then these actions
-  can fairly easily be undone: `discard', `reverse',
-  `stage-all-changes', and `unstage-all-changes'.  If and only if
-  this mode is enabled, then `safe-with-wip' has the same effect
-  as adding all of these symbols individually."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-essentials
-  :group 'magit-commands
-  :type `(choice (const :tag "Always require confirmation" nil)
-                 (const :tag "Never require confirmation" t)
-                 (set   :tag "Require confirmation except for"
-                        ,@magit--confirm-actions)))
-
-(defcustom magit-slow-confirm '(drop-stashes)
-  "Whether to ask user \"y or n\" or \"yes or no\" questions.
-
-When this is nil, then `y-or-n-p' is used when the user has to
-confirm a potentially destructive action.  When this is t, then
-`yes-or-no-p' is used instead.  If this is a list of symbols
-identifying actions, then `yes-or-no-p' is used for those,
-`y-or-no-p' for all others.  The list of actions is the same as
-for `magit-no-confirm' (which see)."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-miscellaneous
-  :type `(choice (const :tag "Always ask \"yes or no\" questions" t)
-                 (const :tag "Always ask \"y or n\" questions" nil)
-                 (set   :tag "Ask \"yes or no\" questions only for"
-                        ,@magit--confirm-actions)))
-
-(defcustom magit-no-message nil
-  "A list of messages Magit should not display.
-
-Magit displays most echo area messages using `message', but a few
-are displayed using `magit-message' instead, which takes the same
-arguments as the former, FORMAT-STRING and ARGS.  `magit-message'
-forgoes printing a message if any member of this list is a prefix
-of the respective FORMAT-STRING.
-
-If Magit prints a message which causes you grief, then please
-first investigate whether there is another option which can be
-used to suppress it.  If that is not the case, then ask the Magit
-maintainers to start using `magit-message' instead of `message'
-in that case.  We are not proactively replacing all uses of
-`message' with `magit-message', just in case someone *might* find
-some of these messages useless.
-
-Messages which can currently be suppressed using this option are:
-* \"Turning on magit-auto-revert-mode...\""
-  :package-version '(magit . "2.8.0")
-  :group 'magit-miscellaneous
-  :type '(repeat string))
-
-(defcustom magit-ellipsis ?…
-  "Character used to abbreviate text.
-
-Currently this is used to abbreviate author names in the margin
-and in process buffers to elide `magit-git-global-arguments'."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-miscellaneous
-  :type 'character)
-
-(defcustom magit-update-other-window-delay 0.2
-  "Delay before automatically updating the other window.
-
-When moving around in certain buffers, then certain other
-buffers, which are being displayed in another window, may
-optionally be updated to display information about the
-section at point.
-
-When holding down a key to move by more than just one section,
-then that would update that buffer for each section on the way.
-To prevent that, updating the revision buffer is delayed, and
-this option controls for how long.  For optimal experience you
-might have to adjust this delay and/or the keyboard repeat rate
-and delay of your graphical environment or operating system."
-  :package-version '(magit . "2.3.0")
-  :group 'magit-miscellaneous
-  :type 'number)
-
-(defcustom magit-view-git-manual-method 'info
-  "How links to Git documentation are followed from Magit's Info manuals.
-
-`info'  Follow the link to the node in the `gitman' Info manual
-        as usual.  Unfortunately that manual is not installed by
-        default on some platforms, and when it is then the nodes
-        look worse than the actual manpages.
-
-`man'   View the respective man-page using the `man' package.
-
-`woman' View the respective man-page using the `woman' package."
-  :package-version '(magit . "2.9.0")
-  :group 'magit-miscellaneous
-  :type '(choice (const :tag "view info manual" info)
-                 (const :tag "view manpage using `man'" man)
-                 (const :tag "view manpage using `woman'" woman)))
-
-;;; User Input
-
-(defvar helm-completion-in-region-default-sort-fn)
-(defvar ivy-sort-functions-alist)
-
-(defvar magit-completing-read--silent-default nil)
-
-(defun magit-completing-read (prompt collection &optional
-                                     predicate require-match initial-input
-                                     hist def fallback)
-  "Read a choice in the minibuffer, or use the default choice.
-
-This is the function that Magit commands use when they need the
-user to select a single thing to act on.  The arguments have the
-same meaning as for `completing-read', except for FALLBACK, which
-is unique to this function and is described below.
-
-Instead of asking the user to choose from a list of possible
-candidates, this function may instead just return the default
-specified by DEF, with or without requiring user confirmation.
-Whether that is the case depends on PROMPT, `this-command' and
-`magit-dwim-selection'.  See the documentation of the latter for
-more information.
-
-If it does use the default without the user even having to
-confirm that, then `magit-completing-read--silent-default' is set
-to t, otherwise nil.
-
-If it does read a value in the minibuffer, then this function
-acts similarly to `completing-read', except for the following:
-
-- If REQUIRE-MATCH is nil and the user exits without a choice,
-  then nil is returned instead of an empty string.
-
-- If REQUIRE-MATCH is non-nil and the users exits without a
-  choice, an user-error is raised.
-
-- FALLBACK specifies a secondary default that is only used if
-  the primary default DEF is nil.  The secondary default is not
-  subject to `magit-dwim-selection' — if DEF is nil but FALLBACK
-  is not, then this function always asks the user to choose a
-  candidate, just as if both defaults were nil.
-
-- \": \" is appended to PROMPT.
-
-- PROMPT is modified to end with \" (default DEF|FALLBACK): \"
-  provided that DEF or FALLBACK is non-nil, that neither
-  `ivy-mode' nor `helm-mode' is enabled, and that
-  `magit-completing-read-function' is set to its default value of
-  `magit-builtin-completing-read'."
-  (setq magit-completing-read--silent-default nil)
-  (if-let ((dwim (and def
-                      (nth 2 (-first (pcase-lambda (`(,cmd ,re ,_))
-                                       (and (eq this-command cmd)
-                                            (or (not re)
-                                                (string-match-p re prompt))))
-                                     magit-dwim-selection)))))
-      (if (eq dwim 'ask)
-          (if (y-or-n-p (format "%s %s? " prompt def))
-              def
-            (user-error "Abort"))
-        (setq magit-completing-read--silent-default t)
-        def)
-    (unless def
-      (setq def fallback))
-    (let ((command this-command)
-          (reply (funcall magit-completing-read-function
-                          (concat prompt ": ")
-                          (if (and def (not (member def collection)))
-                              (cons def collection)
-                            collection)
-                          predicate
-                          require-match initial-input hist def)))
-      (setq this-command command)
-      (if (string= reply "")
-          (if require-match
-              (user-error "Nothing selected")
-            nil)
-        reply))))
-
-(defun magit--completion-table (collection)
-  (lambda (string pred action)
-    (if (eq action 'metadata)
-        '(metadata (display-sort-function . identity))
-      (complete-with-action action collection string pred))))
-
-(defun magit-builtin-completing-read
-  (prompt choices &optional predicate require-match initial-input hist def)
-  "Magit wrapper for standard `completing-read' function."
-  (unless (or (bound-and-true-p helm-mode)
-              (bound-and-true-p ivy-mode))
-    (setq prompt (magit-prompt-with-default prompt def))
-    (setq choices (magit--completion-table choices)))
-  (cl-letf (((symbol-function 'completion-pcm--all-completions)
-             #'magit-completion-pcm--all-completions))
-    (let ((ivy-sort-functions-alist nil))
-      (completing-read prompt choices
-                       predicate require-match
-                       initial-input hist def))))
-
-(defun magit-completing-read-multiple
-  (prompt choices &optional sep default hist keymap)
-  "Read multiple items from CHOICES, separated by SEP.
-
-Set up the `crm' variables needed to read multiple values with
-`read-from-minibuffer'.
-
-SEP is a regexp matching characters that can separate choices.
-When SEP is nil, it defaults to `crm-default-separator'.
-DEFAULT, HIST, and KEYMAP are passed to `read-from-minibuffer'.
-When KEYMAP is nil, it defaults to `crm-local-completion-map'.
-
-Unlike `completing-read-multiple', the return value is not split
-into a list."
-  (let* ((crm-separator (or sep crm-default-separator))
-         (crm-completion-table (magit--completion-table choices))
-         (choose-completion-string-functions
-          '(crm--choose-completion-string))
-         (minibuffer-completion-table #'crm--collection-fn)
-         (minibuffer-completion-confirm t)
-         (helm-completion-in-region-default-sort-fn nil)
-         (input
-          (cl-letf (((symbol-function 'completion-pcm--all-completions)
-                     #'magit-completion-pcm--all-completions))
-            (read-from-minibuffer
-             (concat prompt (and default (format " (%s)" default)) ": ")
-             nil (or keymap crm-local-completion-map)
-             nil hist default))))
-    (when (string-equal input "")
-      (or (setq input default)
-          (user-error "Nothing selected")))
-    input))
-
-(defun magit-ido-completing-read
-  (prompt choices &optional predicate require-match initial-input hist def)
-  "Ido-based `completing-read' almost-replacement.
-
-Unfortunately `ido-completing-read' is not suitable as a
-drop-in replacement for `completing-read', instead we use
-`ido-completing-read+' from the third-party package by the
-same name."
-  (if (require 'ido-completing-read+ nil t)
-      (ido-completing-read+ prompt choices predicate require-match
-                            initial-input hist def)
-    (display-warning 'magit "ido-completing-read+ is not installed
-
-To use Ido completion with Magit you need to install the
-third-party `ido-completing-read+' packages.  Falling
-back to built-in `completing-read' for now." :error)
-    (magit-builtin-completing-read prompt choices predicate require-match
-                                   initial-input hist def)))
-
-(defun magit-prompt-with-default (prompt def)
-  (if (and def (> (length prompt) 2)
-           (string-equal ": " (substring prompt -2)))
-      (format "%s (default %s): " (substring prompt 0 -2) def)
-    prompt))
-
-(defvar magit-minibuffer-local-ns-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map minibuffer-local-map)
-    (define-key map "\s" 'magit-whitespace-disallowed)
-    (define-key map "\t" 'magit-whitespace-disallowed)
-    map))
-
-(defun magit-whitespace-disallowed ()
-  "Beep to tell the user that whitespace is not allowed."
-  (interactive)
-  (ding)
-  (message "Whitespace isn't allowed here")
-  (setq defining-kbd-macro nil)
-  (force-mode-line-update))
-
-(defun magit-read-string (prompt &optional initial-input history default-value
-                                 inherit-input-method no-whitespace)
-  "Read a string from the minibuffer, prompting with string PROMPT.
-
-This is similar to `read-string', but
-* empty input is only allowed if DEFAULT-VALUE is non-nil in
-  which case that is returned,
-* whitespace is not allowed and leading and trailing whitespace is
-  removed automatically if NO-WHITESPACE is non-nil,
-* \": \" is appended to PROMPT, and
-* an invalid DEFAULT-VALUE is silently ignored."
-  (when default-value
-    (when (consp default-value)
-      (setq default-value (car default-value)))
-    (unless (stringp default-value)
-      (setq default-value nil)))
-  (let* ((minibuffer-completion-table nil)
-         (val (read-from-minibuffer
-               (magit-prompt-with-default (concat prompt ": ") default-value)
-               initial-input (and no-whitespace magit-minibuffer-local-ns-map)
-               nil history default-value inherit-input-method))
-         (trim (lambda (regexp string)
-                 (save-match-data
-                   (if (string-match regexp string)
-                       (replace-match "" t t string)
-                     string)))))
-    (when (and (string= val "") default-value)
-      (setq val default-value))
-    (when no-whitespace
-      (setq val (funcall trim "\\`\\(?:[ \t\n\r]+\\)"
-                         (funcall trim "\\(?:[ \t\n\r]+\\)\\'" val))))
-    (cond ((string= val "")
-           (user-error "Need non-empty input"))
-          ((and no-whitespace (string-match-p "[\s\t\n]" val))
-           (user-error "Input contains whitespace"))
-          (t val))))
-
-(defun magit-read-string-ns (prompt &optional initial-input history
-                                    default-value inherit-input-method)
-  "Call `magit-read-string' with non-nil NO-WHITESPACE."
-  (magit-read-string prompt initial-input history default-value
-                     inherit-input-method t))
-
-(defmacro magit-read-char-case (prompt verbose &rest clauses)
-  (declare (indent 2)
-           (debug (form form &rest (characterp form body))))
-  `(pcase (read-char-choice
-           (concat ,prompt
-                   ,(concat (mapconcat 'cadr clauses ", ")
-                            (and verbose ", or [C-g] to abort") " "))
-           ',(mapcar 'car clauses))
-     ,@(--map `(,(car it) ,@(cddr it)) clauses)))
-
-(defun magit-y-or-n-p (prompt &optional action)
-  "Ask user a \"y or n\" or a \"yes or no\" question using PROMPT.
-Which kind of question is used depends on whether
-ACTION is a member of option `magit-slow-confirm'."
-  (if (or (eq magit-slow-confirm t)
-          (and action (member action magit-slow-confirm)))
-      (yes-or-no-p prompt)
-    (y-or-n-p prompt)))
-
-(defvar magit--no-confirm-alist
-  '((safe-with-wip magit-wip-before-change-mode
-                   discard reverse stage-all-changes unstage-all-changes)))
-
-(cl-defun magit-confirm (action &optional prompt prompt-n noabort
-                                (items nil sitems))
-  (declare (indent defun))
-  (setq prompt-n (format (concat (or prompt-n prompt) "? ") (length items)))
-  (setq prompt   (format (concat (or prompt (magit-confirm-make-prompt action))
-                                 "? ")
-                         (car items)))
-  (or (cond ((and (not (eq action t))
-                  (or (eq magit-no-confirm t)
-                      (memq action magit-no-confirm)
-                      (cl-member-if (pcase-lambda (`(,key ,var . ,sub))
-                                      (and (memq key magit-no-confirm)
-                                           (memq action sub)
-                                           (or (not var)
-                                               (and (boundp var)
-                                                    (symbol-value var)))))
-                                    magit--no-confirm-alist)))
-             (or (not sitems) items))
-            ((not sitems)
-             (magit-y-or-n-p prompt action))
-            ((= (length items) 1)
-             (and (magit-y-or-n-p prompt action) items))
-            ((> (length items) 1)
-             (and (magit-y-or-n-p (concat (mapconcat #'identity items "\n")
-                                          "\n\n" prompt-n)
-                                  action)
-                  items)))
-      (if noabort nil (user-error "Abort"))))
-
-(defun magit-confirm-files (action files &optional prompt)
-  (when files
-    (unless prompt
-      (setq prompt (magit-confirm-make-prompt action)))
-    (magit-confirm action
-      (concat prompt " %s")
-      (concat prompt " %i files")
-      nil files)))
-
-(defun magit-confirm-make-prompt (action)
-  (let ((prompt (symbol-name action)))
-    (replace-regexp-in-string
-     "-" " " (concat (upcase (substring prompt 0 1)) (substring prompt 1)))))
-
-;;; Debug Utilities
-
-;;;###autoload
-(defun magit-emacs-Q-command ()
-  "Show a shell command that runs an uncustomized Emacs with only Magit loaded.
-See info node `(magit)Debugging Tools' for more information."
-  (interactive)
-  (let ((cmd (mapconcat
-              #'shell-quote-argument
-              `(,(concat invocation-directory invocation-name)
-                "-Q" "--eval" "(setq debug-on-error t)"
-                ,@(cl-mapcan
-                   (lambda (dir) (list "-L" dir))
-                   (delete-dups
-                    (mapcar (lambda (lib)
-                              (file-name-directory (locate-library lib)))
-                            '("magit" "magit-popup" "with-editor"
-                              "git-commit" "dash" "ghub"))))
-                ;; Avoid Emacs bug#16406 by using full path.
-                "-l" ,(file-name-sans-extension (locate-library "magit")))
-              " ")))
-    (message "Uncustomized Magit command saved to kill-ring, %s"
-             "please run it in a terminal.")
-    (kill-new cmd)))
-
-;;; Text Utilities
-
-(defmacro magit-bind-match-strings (varlist string &rest body)
-  "Bind variables to submatches according to VARLIST then evaluate BODY.
-Bind the symbols in VARLIST to submatches of the current match
-data, starting with 1 and incrementing by 1 for each symbol.  If
-the last match was against a string, then that has to be provided
-as STRING."
-  (declare (indent 2) (debug (listp form body)))
-  (let ((s (cl-gensym "string"))
-        (i 0))
-    `(let ((,s ,string))
-       (let ,(save-match-data
-               (--map (list it (list 'match-string (cl-incf i) s)) varlist))
-         ,@body))))
-
-(defun magit-delete-line ()
-  "Delete the rest of the current line."
-  (delete-region (point) (1+ (line-end-position))))
-
-(defun magit-delete-match (&optional num)
-  "Delete text matched by last search.
-If optional NUM is specified, only delete that subexpression."
-  (delete-region (match-beginning (or num 0))
-                 (match-end (or num 0))))
-
-(defun magit-file-line (file)
-  "Return the first line of FILE as a string."
-  (when (file-regular-p file)
-    (with-temp-buffer
-      (insert-file-contents file)
-      (buffer-substring-no-properties (point-min)
-                                      (line-end-position)))))
-
-(defun magit-file-lines (file &optional keep-empty-lines)
-  "Return a list of strings containing one element per line in FILE.
-Unless optional argument KEEP-EMPTY-LINES is t, trim all empty lines."
-  (when (file-regular-p file)
-    (with-temp-buffer
-      (insert-file-contents file)
-      (split-string (buffer-string) "\n" (not keep-empty-lines)))))
-
-(defun magit-set-header-line-format (string)
-  "Set the header-line using STRING.
-Propertize STRING with the `magit-header-line' face if no face is
-present, and pad the left and right sides of STRING equally such
-that it will align with the text area."
-  (let* ((header-line
-          (concat (propertize " "
-                              'display
-                              '(space :align-to 0))
-                  string
-                  (propertize
-                   " "
-                   'display
-                   `(space :width (+ left-fringe
-                                     left-margin
-                                     ,@(and (eq (car (window-current-scroll-bars))
-                                                'left)
-                                            '(scroll-bar)))))))
-         (len (length header-line)))
-    (setq header-line-format
-          (if (text-property-not-all 0 len 'face nil header-line)
-              (let ((face (get-text-property 0 'face string)))
-                (when (and (atom face)
-                           (magit-face-property-all face string))
-                  (add-face-text-property 0 1 face nil header-line)
-                  (add-face-text-property (1- len) len face nil header-line))
-                header-line)
-            (propertize header-line
-                        'face
-                        'magit-header-line)))))
-
-(defun magit-face-property-all (face string)
-  "Return non-nil if FACE is present in all of STRING."
-  (cl-loop for pos = 0 then (next-single-property-change pos 'face string)
-           unless pos
-             return t
-           for current = (get-text-property pos 'face string)
-           unless (if (consp current)
-                      (memq face current)
-                    (eq face current))
-             return nil))
-
-(defun magit--format-spec (format specification)
-  "Like `format-spec' but preserve text properties in SPECIFICATION."
-  (with-temp-buffer
-    (insert format)
-    (goto-char (point-min))
-    (while (search-forward "%" nil t)
-      (cond
-       ;; Quoted percent sign.
-       ((eq (char-after) ?%)
-        (delete-char 1))
-       ;; Valid format spec.
-       ((looking-at "\\([-0-9.]*\\)\\([a-zA-Z]\\)")
-        (let* ((num (match-string 1))
-               (spec (string-to-char (match-string 2)))
-               (val (assq spec specification)))
-          (unless val
-            (error "Invalid format character: `%%%c'" spec))
-          (setq val (cdr val))
-          ;; Pad result to desired length.
-          (let ((text (format (concat "%" num "s") val)))
-            ;; Insert first, to preserve text properties.
-            (if (next-property-change 0 (concat " " text))
-                ;; If the inserted text has properties, then preserve those.
-                (insert text)
-              ;; Otherwise preserve FORMAT's properties, like `format-spec'.
-              (insert-and-inherit text))
-            ;; Delete the specifier body.
-            (delete-region (+ (match-beginning 0) (length text))
-                           (+ (match-end 0) (length text)))
-            ;; Delete the percent sign.
-            (delete-region (1- (match-beginning 0)) (match-beginning 0)))))
-       ;; Signal an error on bogus format strings.
-       (t
-        (error "Invalid format string"))))
-    (buffer-string)))
-
-;;; Missing from Emacs
-
-(defun magit-kill-this-buffer ()
-  "Kill the current buffer."
-  (interactive)
-  (kill-buffer (current-buffer)))
-
-;;; Kludges for Emacs Bugs
-
-(defun magit-file-accessible-directory-p (filename)
-  "Like `file-accessible-directory-p' but work around an Apple bug.
-See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21573#17
-and https://github.com/magit/magit/issues/2295."
-  (and (file-directory-p filename)
-       (file-accessible-directory-p filename)))
-
-(when (version<= "25.1" emacs-version)
-  (with-eval-after-load 'vc-git
-    (defun vc-git-conflicted-files (directory)
-      "Return the list of files with conflicts in DIRECTORY."
-      (let* ((status
-              (vc-git--run-command-string directory "diff-files"
-                                          "--name-status"))
-             (lines (when status (split-string status "\n" 'omit-nulls)))
-             files)
-        (dolist (line lines files)
-          (when (string-match "\\([ MADRCU?!]\\)[ \t]+\\(.+\\)" line)
-            (let ((state (match-string 1 line))
-                  (file (match-string 2 line)))
-              (when (equal state "U")
-                (push (expand-file-name file directory) files)))))))))
-
-;; `completion-pcm--all-completions' reverses the completion list.  To
-;; preserve the order of our pre-sorted completions, we'll temporarily
-;; override it with the function below.  bug#24676
-(defun magit-completion-pcm--all-completions (prefix pattern table pred)
-  (if (completion-pcm--pattern-trivial-p pattern)
-      (all-completions (concat prefix (car pattern)) table pred)
-    (let* ((regex (completion-pcm--pattern->regex pattern))
-           (case-fold-search completion-ignore-case)
-           (completion-regexp-list (cons regex completion-regexp-list))
-           (compl (all-completions
-                   (concat prefix
-                           (if (stringp (car pattern)) (car pattern) ""))
-                   table pred)))
-      (if (not (functionp table))
-          compl
-        (let ((poss ()))
-          (dolist (c compl)
-            (when (string-match-p regex c) (push c poss)))
-          ;; This `nreverse' call is the only code change made to the
-          ;; `completion-pcm--all-completions' that shipped with Emacs 25.1.
-          (nreverse poss))))))
-
-;;; Kludges for Incompatible Modes
-
-(defvar whitespace-mode)
-
-(defun whitespace-dont-turn-on-in-magit-mode (fn)
-  "Prevent `whitespace-mode' from being turned on in Magit buffers.
-
-Because `whitespace-mode' uses font-lock and Magit does not, they
-are not compatible.  Therefore you cannot turn on that minor-mode
-in Magit buffers.  If you try to enable it anyway, then this
-advice prevents that.
-
-If the reason the attempt is made is that `global-whitespace-mode'
-is enabled, then that is done silently.  However if you call the local
-minor-mode interactively, then that results in an error.
-
-See `magit-diff-paint-whitespace' for an alternative."
-  (if (not (derived-mode-p 'magit-mode))
-      (funcall fn)
-    (setq whitespace-mode nil)
-    (when (eq this-command 'whitespace-mode)
-      (user-error
-       "Whitespace mode NOT enabled because it is not compatible with Magit"))))
-
-(advice-add 'whitespace-turn-on :around
-            'whitespace-dont-turn-on-in-magit-mode)
-
-;;; Kludges for Custom
-
-(defun magit-custom-initialize-reset (symbol exp)
-  "Initialize SYMBOL based on EXP.
-Set the symbol, using `set-default' (unlike
-`custom-initialize-reset' which uses the `:set' function if any.)
-The value is either the symbol's current value
- (as obtained using the `:get' function), if any,
-or the value in the symbol's `saved-value' property if any,
-or (last of all) the value of EXP."
-  (set-default-toplevel-value
-   symbol
-   (condition-case nil
-       (let ((def (default-toplevel-value symbol))
-             (getter (get symbol 'custom-get)))
-         (if getter (funcall getter symbol) def))
-     (error
-      (eval (let ((sv (get symbol 'saved-value)))
-              (if sv (car sv) exp)))))))
-
-(defun magit-hook-custom-get (symbol)
-  (if (symbol-file symbol 'defvar)
-      (default-toplevel-value symbol)
-    ;;
-    ;; Called by `custom-initialize-reset' on behalf of `symbol's
-    ;; `defcustom', which is being evaluated for the first time to
-    ;; set the initial value, but there's already a default value,
-    ;; which most likely was established by one or more `add-hook'
-    ;; calls.
-    ;;
-    ;; We combine the `standard-value' and the current value, while
-    ;; preserving the order established by `:options', and return
-    ;; the result of that to be used as the "initial" default value.
-    ;;
-    (let ((standard (eval (car (get symbol 'standard-value))))
-          (current (default-toplevel-value symbol))
-          (value nil))
-      (dolist (fn (get symbol 'custom-options))
-        (when (or (memq fn standard)
-                  (memq fn current))
-          (push fn value)))
-      (dolist (fn current)
-        (unless (memq fn value)
-          (push fn value)))
-      (nreverse value))))
-
-;;; Kludges for Info Manuals
-
-;;;###autoload
-(defun Info-follow-nearest-node--magit-gitman (fn &optional fork)
-  (if magit-view-git-manual-method
-      (let ((node (Info-get-token
-                   (point) "\\*note[ \n\t]+"
-                   "\\*note[ \n\t]+\\([^:]*\\):\\(:\\|[ \n\t]*(\\)?")))
-        (if (and node (string-match "^(gitman)\\(.+\\)" node))
-            (pcase magit-view-git-manual-method
-              (`man   (require 'man)
-                      (man (match-string 1 node)))
-              (`woman (require 'woman)
-                      (woman (match-string 1 node)))
-              (_
-               (user-error "Invalid value for `magit-view-git-documentation'")))
-          (funcall fn fork)))
-    (funcall fn fork)))
-
-;;;###autoload
-(advice-add 'Info-follow-nearest-node :around
-            'Info-follow-nearest-node--magit-gitman)
-
-;;;###autoload
-(defun org-man-export--magit-gitman (fn link description format)
-  (if (and (eq format 'texinfo)
-           (string-match-p "\\`git" link))
-      (replace-regexp-in-string "%s" link "
-@ifinfo
-@ref{%s,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href=\"http://git-scm.com/docs/%s\">%s(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the %s(1) manpage.
-@end iftex
-")
-    (funcall fn link description format)))
-
-;;;###autoload
-(advice-add 'org-man-export :around
-            'org-man-export--magit-gitman)
-
-;;; Miscellaneous
-
-(defun magit-message (format-string &rest args)
-  "Display a message at the bottom of the screen, or not.
-Like `message', except that if the users configured option
-`magit-no-message' to prevent the message corresponding to
-FORMAT-STRING to be displayed, then don't."
-  (unless (--first (string-prefix-p it format-string) magit-no-message)
-    (apply #'message format-string args)))
-
-(defun magit-msg (format-string &rest args)
-  "Display a message at the bottom of the screen, but don't log it.
-Like `message', except that `message-log-max' is bound to nil."
-  (let ((message-log-max nil))
-    (apply #'message format-string args)))
-
-(provide 'magit-utils)
-;;; magit-utils.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.elc
deleted file mode 100644
index 4cb6142ee219..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-utils.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.el
deleted file mode 100644
index 0bb7efc5b7cb..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.el
+++ /dev/null
@@ -1,370 +0,0 @@
-;;; magit-wip.el --- commit snapshots to work-in-progress refs  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library defines tree global modes which automatically commit
-;; snapshots to branch-specific work-in-progress refs before and after
-;; making changes, and two commands which can be used to do so on
-;; demand.
-
-;;; Code:
-
-(require 'magit-core)
-(require 'magit-log)
-
-;;; Options
-
-(defgroup magit-wip nil
-  "Automatically commit to work-in-progress refs."
-  :link '(info-link "(magit)Wip Modes")
-  :group 'magit-modes
-  :group 'magit-essentials)
-
-(defcustom magit-wip-after-save-local-mode-lighter " sWip"
-  "Lighter for Magit-Wip-After-Save-Local mode."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :type 'string)
-
-(defcustom magit-wip-after-apply-mode-lighter " aWip"
-  "Lighter for Magit-Wip-After-Apply mode."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :type 'string)
-
-(defcustom magit-wip-before-change-mode-lighter " cWip"
-  "Lighter for Magit-Wip-Before-Change mode."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :type 'string)
-
-(defcustom magit-wip-merge-branch nil
-  "Whether to merge the current branch into its wip ref.
-
-If non-nil and the current branch has new commits, then it is
-merged into the wip ref before creating a new wip commit.  This
-makes it easier to inspect wip history and the wip commits are
-never garbage collected.
-
-If nil and the current branch has new commits, then the wip ref
-is reset to the tip of the branch before creating a new wip
-commit.  With this setting wip commits are eventually garbage
-collected."
-  :package-version '(magit . "2.90.0")
-  :group 'magit-wip
-  :type 'boolean)
-
-(defcustom magit-wip-namespace "refs/wip/"
-  "Namespace used for work-in-progress refs.
-The wip refs are named \"<namespace/>index/<branchref>\"
-and \"<namespace/>wtree/<branchref>\".  When snapshots
-are created while the `HEAD' is detached then \"HEAD\"
-is used as `branch-ref'."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :type 'string)
-
-;;; Modes
-
-(define-minor-mode magit-wip-after-save-local-mode
-  "After saving, also commit to a worktree work-in-progress ref.
-
-After saving the current file-visiting buffer this mode also
-commits the changes to the worktree work-in-progress ref for
-the current branch.
-
-This mode should be enabled globally by turning on the globalized
-variant `magit-wip-after-save-mode'."
-  :package-version '(magit . "2.1.0")
-  :lighter magit-wip-after-save-local-mode-lighter
-  (if magit-wip-after-save-local-mode
-      (if (and buffer-file-name (magit-inside-worktree-p t))
-          (add-hook 'after-save-hook 'magit-wip-commit-buffer-file t t)
-        (setq magit-wip-after-save-local-mode nil)
-        (user-error "Need a worktree and a file"))
-    (remove-hook 'after-save-hook 'magit-wip-commit-buffer-file t)))
-
-(defun magit-wip-after-save-local-mode-turn-on ()
-  (and buffer-file-name
-       (magit-inside-worktree-p t)
-       (magit-file-tracked-p buffer-file-name)
-       (magit-wip-after-save-local-mode)))
-
-;;;###autoload
-(define-globalized-minor-mode magit-wip-after-save-mode
-  magit-wip-after-save-local-mode magit-wip-after-save-local-mode-turn-on
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip)
-
-(defun magit-wip-commit-buffer-file (&optional msg)
-  "Commit visited file to a worktree work-in-progress ref.
-
-Also see `magit-wip-after-save-mode' which calls this function
-automatically whenever a buffer visiting a tracked file is saved."
-  (interactive)
-  (--when-let (magit-wip-get-ref)
-    (magit-with-toplevel
-      (let ((file (file-relative-name buffer-file-name)))
-        (magit-wip-commit-worktree
-         it (list file)
-         (format (cond (msg)
-                       ((called-interactively-p 'any)
-                        "wip-save %s after save")
-                       (t
-                        "autosave %s after save"))
-                 file))))))
-
-;;;###autoload
-(define-minor-mode magit-wip-after-apply-mode
-  "Commit to work-in-progress refs.
-
-After applying a change using any \"apply variant\"
-command (apply, stage, unstage, discard, and reverse) commit the
-affected files to the current wip refs.  For each branch there
-may be two wip refs; one contains snapshots of the files as found
-in the worktree and the other contains snapshots of the entries
-in the index."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :lighter magit-wip-after-apply-mode-lighter
-  :global t)
-
-(defun magit-wip-commit-after-apply (&optional files msg)
-  (when magit-wip-after-apply-mode
-    (magit-wip-commit files msg)))
-
-;;;###autoload
-(define-minor-mode magit-wip-before-change-mode
-  "Commit to work-in-progress refs before certain destructive changes.
-
-Before invoking a revert command or an \"apply variant\"
-command (apply, stage, unstage, discard, and reverse) commit the
-affected tracked files to the current wip refs.  For each branch
-there may be two wip refs; one contains snapshots of the files
-as found in the worktree and the other contains snapshots of the
-entries in the index.
-
-Only changes to files which could potentially be affected by the
-command which is about to be called are committed."
-  :package-version '(magit . "2.1.0")
-  :group 'magit-wip
-  :lighter magit-wip-before-change-mode-lighter
-  :global t)
-
-(defun magit-wip-commit-before-change (&optional files msg)
-  (when magit-wip-before-change-mode
-    (magit-with-toplevel
-      (magit-wip-commit files msg))))
-
-;;; Extras
-
-(defvar-local magit-wip-buffer-backed-up nil)
-(put 'magit-wip-buffer-backed-up 'permanent-local t)
-
-;;;###autoload
-(defun magit-wip-commit-initial-backup ()
-  "Before saving, commit current file to a worktree wip ref.
-
-The user has to add this function to `before-save-hook'.
-
-Commit the current state of the visited file before saving the
-current buffer to that file.  This backs up the same version of
-the file as `backup-buffer' would, but stores the backup in the
-worktree wip ref, which is also used by the various Magit Wip
-modes, instead of in a backup file as `backup-buffer' would.
-
-This function ignores the variables that affect `backup-buffer'
-and can be used along-side that function, which is recommended
-because this function only backs up files that are tracked in
-a Git repository."
-  (when (and (not magit-wip-buffer-backed-up)
-             buffer-file-name
-             (magit-inside-worktree-p t)
-             (magit-file-tracked-p buffer-file-name))
-    (let ((magit-save-repository-buffers nil))
-      (magit-wip-commit-buffer-file "autosave %s before save"))
-    (setq magit-wip-buffer-backed-up t)))
-
-;;; Core
-
-(defun magit-wip-commit (&optional files msg)
-  "Commit all tracked files to the work-in-progress refs.
-
-Interactively, commit all changes to all tracked files using
-a generic commit message.  With a prefix-argument the commit
-message is read in the minibuffer.
-
-Non-interactively, only commit changes to FILES using MSG as
-commit message."
-  (interactive (list nil (if current-prefix-arg
-                             (magit-read-string "Wip commit message")
-                           "wip-save tracked files")))
-  (--when-let (magit-wip-get-ref)
-    (magit-wip-commit-index it files msg)
-    (magit-wip-commit-worktree it files msg)))
-
-(defun magit-wip-commit-index (ref files msg)
-  (let* ((wipref (magit--wip-index-ref ref))
-         (parent (magit-wip-get-parent ref wipref))
-         (tree   (magit-git-string "write-tree")))
-    (magit-wip-update-wipref ref wipref tree parent files msg "index")))
-
-(defun magit-wip-commit-worktree (ref files msg)
-  (let* ((wipref (magit--wip-wtree-ref ref))
-         (parent (magit-wip-get-parent ref wipref))
-         (tree (magit-with-temp-index parent "--reset"
-                 (if files
-                     (magit-call-git "add" "--" files)
-                   (magit-with-toplevel
-                     (magit-call-git "add" "-u" ".")))
-                 (magit-git-string "write-tree"))))
-    (magit-wip-update-wipref ref wipref tree parent files msg "worktree")))
-
-(defun magit-wip-update-wipref (ref wipref tree parent files msg start-msg)
-  (cond
-   ((and (not (equal parent wipref))
-         (or (not magit-wip-merge-branch)
-             (not (magit-rev-verify wipref))))
-    (setq start-msg (concat "start autosaving " start-msg))
-    (magit-update-ref wipref start-msg
-                      (magit-git-string "commit-tree" "--no-gpg-sign"
-                                        "-p" parent "-m" start-msg
-                                        (concat parent "^{tree}")))
-    (setq parent wipref))
-   ((and magit-wip-merge-branch
-         (or (not (magit-rev-ancestor-p ref wipref))
-             (not (magit-rev-ancestor-p
-                   (concat (magit-git-string "log" "--format=%H"
-                                             "-1" "--merges" wipref)
-                           "^2")
-                   ref))))
-    (setq start-msg (format "merge %s into %s" ref start-msg))
-    (magit-update-ref wipref start-msg
-                      (magit-git-string "commit-tree" "--no-gpg-sign"
-                                        "-p" wipref "-p" ref
-                                        "-m" start-msg
-                                        (concat ref "^{tree}")))
-    (setq parent wipref)))
-  (when (magit-git-failure "diff-tree" "--quiet" parent tree "--" files)
-    (unless (and msg (not (= (aref msg 0) ?\s)))
-      (let ((len (length files)))
-        (setq msg (concat
-                   (cond ((= len 0) "autosave tracked files")
-                         ((> len 1) (format "autosave %s files" len))
-                         (t (concat "autosave "
-                                    (file-relative-name (car files)
-                                                        (magit-toplevel)))))
-                   msg))))
-    (magit-update-ref wipref msg
-                      (magit-git-string "commit-tree" "--no-gpg-sign"
-                                        "-p" parent "-m" msg tree))))
-
-(defun magit-wip-get-ref ()
-  (let ((ref (or (magit-git-string "symbolic-ref" "HEAD") "HEAD")))
-    (and (magit-rev-verify ref)
-         ref)))
-
-(defun magit-wip-get-parent (ref wipref)
-  (if (and (magit-rev-verify wipref)
-           (equal (magit-git-string "merge-base" wipref ref)
-                  (magit-rev-verify ref)))
-      wipref
-    ref))
-
-(defun magit--wip-index-ref (&optional ref)
-  (magit--wip-ref "index/" ref))
-
-(defun magit--wip-wtree-ref (&optional ref)
-  (magit--wip-ref "wtree/" ref))
-
-(defun magit--wip-ref (namespace &optional ref)
-  (concat magit-wip-namespace namespace
-          (or (and ref (string-prefix-p "refs/" ref) ref)
-              (when-let ((branch (or ref (magit-get-current-branch))))
-                (concat "refs/heads/" branch))
-              "HEAD")))
-
-;;; Log
-
-(defun magit-wip-log-index (args files)
-  "Show log for the index wip ref of the current branch."
-  (interactive (magit-log-arguments))
-  (magit-log (list (magit--wip-index-ref)) args files))
-
-(defun magit-wip-log-worktree (args files)
-  "Show log for the worktree wip ref of the current branch."
-  (interactive (magit-log-arguments))
-  (magit-log (list (magit--wip-wtree-ref)) args files))
-
-(defun magit-wip-log-current (branch args files count)
-  "Show log for the current branch and its wip refs.
-With a negative prefix argument only show the worktree wip ref.
-The absolute numeric value of the prefix argument controls how
-many \"branches\" of each wip ref are shown."
-  (interactive
-   (nconc (list (or (magit-get-current-branch) "HEAD"))
-          (magit-log-arguments)
-          (list (prefix-numeric-value current-prefix-arg))))
-  (magit-wip-log branch args files count))
-
-(defun magit-wip-log (branch args files count)
-  "Show log for a branch and its wip refs.
-With a negative prefix argument only show the worktree wip ref.
-The absolute numeric value of the prefix argument controls how
-many \"branches\" of each wip ref are shown."
-  (interactive
-   (nconc (list (magit-completing-read
-                 "Log branch and its wip refs"
-                 (-snoc (magit-list-local-branch-names) "HEAD")
-                 nil t nil 'magit-revision-history
-                 (or (magit-branch-at-point)
-                     (magit-get-current-branch)
-                     "HEAD")))
-          (magit-log-arguments)
-          (list (prefix-numeric-value current-prefix-arg))))
-  (magit-log (nconc (list branch)
-                    (magit-wip-log-get-tips
-                     (magit--wip-wtree-ref branch)
-                     (abs count))
-                    (and (>= count 0)
-                         (magit-wip-log-get-tips
-                          (magit--wip-index-ref branch)
-                          (abs count))))
-             args files))
-
-(defun magit-wip-log-get-tips (wipref count)
-  (when-let ((reflog (magit-git-lines "reflog" wipref)))
-    (let (tips)
-      (while (and reflog (> count 1))
-        (setq reflog (cl-member "^[^ ]+ [^:]+: restart autosaving"
-                                reflog :test #'string-match-p))
-        (when (and (cadr reflog)
-                   (string-match "^[^ ]+ \\([^:]+\\)" (cadr reflog)))
-          (push (match-string 1 (cadr reflog)) tips))
-        (setq reflog (cddr reflog))
-        (cl-decf count))
-      (cons wipref (nreverse tips)))))
-
-(provide 'magit-wip)
-;;; magit-wip.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.elc
deleted file mode 100644
index 6190bc1e1305..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-wip.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.el
deleted file mode 100644
index 107e2cb7cc0d..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.el
+++ /dev/null
@@ -1,174 +0,0 @@
-;;; magit-worktree.el --- worktree support  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Jonas Bernoulli <jonas@bernoul.li>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; This library implements support for `git-worktree'.
-
-;;; Code:
-
-(require 'magit)
-
-;;; Commands
-
-;;;###autoload (autoload 'magit-worktree-popup "magit-worktree" nil t)
-(magit-define-popup magit-worktree-popup
-  "Popup console for worktree commands."
-  :man-page "git-worktree"
-  :actions  `((?b "Create new worktree"            magit-worktree-checkout)
-              (?c "Create new branch and worktree" magit-worktree-branch)
-              ,@(and (not (require (quote forge) nil t))
-                     '((?p "Create new worktree from pull-request"
-                           magit-worktree-checkout-pull-request)))
-              (?k "Delete worktree"                magit-worktree-delete)
-              (?g "Show status for worktree"       magit-worktree-status))
-  :max-action-columns 1)
-
-;;;###autoload
-(defun magit-worktree-checkout (path branch)
-  "Checkout BRANCH in a new worktree at PATH."
-  (interactive
-   (let ((branch (magit-read-local-branch-or-commit "Checkout")))
-     (list (read-directory-name (format "Checkout %s in new worktree: " branch))
-           branch)))
-  (magit-run-git "worktree" "add" (expand-file-name path) branch)
-  (magit-diff-visit-directory path))
-
-(defun magit-worktree-checkout-pull-request (path pr)
-  "Create, configure and checkout a new worktree from a pull-request.
-This is like `magit-checkout-pull-request', except that it
-also creates a new worktree. Please see the manual for more
-information."
-  (interactive
-   (let ((pr (magit-read-pull-request "Checkout pull request")))
-     (let-alist pr
-       (let ((path (let ((branch (magit--pullreq-branch pr t)))
-                     (read-directory-name
-                      (format "Checkout #%s as `%s' in new worktree: "
-                              .number branch)
-                      (file-name-directory
-                       (directory-file-name default-directory))
-                      nil nil
-                      (if (string-match-p "\\`pr-[0-9]+\\'" branch)
-                          (number-to-string .number)
-                        (format "%s-%s" .number .head.ref))))))
-         (when (equal path "")
-           (user-error "The empty string isn't a valid path"))
-         (list path pr)))))
-  (when (and (file-exists-p path)
-             (not (and (file-directory-p path)
-                       (= (length (directory-files "/tmp/testing/")) 2))))
-    (user-error "%s already exists and isn't empty" path))
-  (magit-worktree-checkout path
-                           (let ((inhibit-magit-refresh t))
-                             (magit-branch-pull-request pr))))
-
-;;;###autoload
-(defun magit-worktree-branch (path branch start-point &optional force)
-  "Create a new BRANCH and check it out in a new worktree at PATH."
-  (interactive
-   `(,(read-directory-name "Create worktree: ")
-     ,@(butlast (magit-branch-read-args "Create and checkout branch"))
-     ,current-prefix-arg))
-  (magit-run-git "worktree" "add" (if force "-B" "-b")
-                 branch (expand-file-name path) start-point)
-  (magit-diff-visit-directory path))
-
-(defun magit-worktree-delete (worktree)
-  "Delete a worktree, defaulting to the worktree at point.
-The primary worktree cannot be deleted."
-  (interactive
-   (list (magit-completing-read "Delete worktree"
-                                (cdr (magit-list-worktrees))
-                                nil t nil nil
-                                (magit-section-when (worktree)))))
-  (if (file-directory-p (expand-file-name ".git" worktree))
-      (user-error "Deleting %s would delete the shared .git directory" worktree)
-    (let ((primary (file-name-as-directory (caar (magit-list-worktrees)))))
-      (magit-confirm-files (if magit-delete-by-moving-to-trash 'trash 'delete)
-                           (list "worktree"))
-      (when (file-exists-p worktree)
-        (let ((delete-by-moving-to-trash magit-delete-by-moving-to-trash))
-          (delete-directory worktree t magit-delete-by-moving-to-trash)))
-      (if (file-exists-p default-directory)
-          (magit-run-git "worktree" "prune")
-        (let ((default-directory primary))
-          (magit-run-git "worktree" "prune"))
-        (when (derived-mode-p 'magit-status-mode)
-          (kill-buffer)
-          (magit-status-internal primary))))))
-
-(defun magit-worktree-status (worktree)
-  "Show the status for the worktree at point.
-If there is no worktree at point, then read one in the
-minibuffer.  If the worktree at point is the one whose
-status is already being displayed in the current buffer,
-then show it in Dired instead."
-  (interactive
-   (list (or (magit-section-when (worktree))
-             (magit-completing-read
-              "Show status for worktree"
-              (cl-delete (directory-file-name (magit-toplevel))
-                         (magit-list-worktrees)
-                         :test #'equal :key #'car)))))
-  (magit-diff-visit-directory worktree))
-
-;;; Sections
-
-(defvar magit-worktree-section-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap magit-visit-thing]  'magit-worktree-status)
-    (define-key map [remap magit-delete-thing] 'magit-worktree-delete)
-    map)
-  "Keymap for `worktree' sections.")
-
-(defun magit-insert-worktrees ()
-  "Insert sections for all worktrees.
-If there is only one worktree, then insert nothing."
-  (let ((worktrees (magit-list-worktrees)))
-    (when (> (length worktrees) 1)
-      (magit-insert-section (worktrees)
-        (magit-insert-heading "Worktrees:")
-        (let* ((cols
-                (mapcar (pcase-lambda (`(,path ,barep ,commit ,branch))
-                          (cons (cond
-                                 (branch (propertize branch
-                                                     'face 'magit-branch-local))
-                                 (commit (propertize (magit-rev-abbrev commit)
-                                                     'face 'magit-hash))
-                                 (barep  "(bare)"))
-                                path))
-                        worktrees))
-               (align (1+ (-max (--map (string-width (car it)) cols)))))
-          (pcase-dolist (`(,head . ,path) cols)
-            (magit-insert-section (worktree path)
-              (insert head)
-              (indent-to align)
-              (insert (let ((r (file-relative-name path))
-                            (a (abbreviate-file-name path)))
-                        (if (< (string-width r) (string-width a)) r a)))
-              (insert ?\n))))
-        (insert ?\n)))))
-
-(provide 'magit-worktree)
-;;; magit-worktree.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.elc
deleted file mode 100644
index c3f7eb084f1d..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit-worktree.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.el b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.el
deleted file mode 100644
index b25cb4b57548..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.el
+++ /dev/null
@@ -1,616 +0,0 @@
-;;; magit.el --- A Git porcelain inside Emacs  -*- lexical-binding: t; coding: utf-8 -*-
-
-;; Copyright (C) 2008-2018  The Magit Project Contributors
-;;
-;; You should have received a copy of the AUTHORS.md file which
-;; lists all contributors.  If not, see http://magit.vc/authors.
-
-;; Author: Marius Vollmer <marius.vollmer@gmail.com>
-;; Maintainer: Jonas Bernoulli <jonas@bernoul.li>
-;;	Kyle Meyer        <kyle@kyleam.com>
-;;	Noam Postavsky    <npostavs@users.sourceforge.net>
-;; Former-Maintainers:
-;;	Nicolas Dudebout  <nicolas.dudebout@gatech.edu>
-;;	Peter J. Weisberg <pj@irregularexpressions.net>
-;;	Phil Jackson      <phil@shellarchive.co.uk>
-;;	Rémi Vanicat      <vanicat@debian.org>
-;;	Yann Hodique      <yann.hodique@gmail.com>
-
-;; Keywords: git tools vc
-;; Homepage: https://github.com/magit/magit
-
-;; Magit requires at least GNU Emacs 25.1 and Git 2.0.0.
-
-;; Magit is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-;;
-;; Magit is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-;; License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with Magit.  If not, see http://www.gnu.org/licenses.
-
-;;; Commentary:
-
-;; Magit is an interface to the version control system Git,
-;; implemented as an Emacs package.  Magit aspires to be a complete
-;; Git porcelain.  While we cannot (yet) claim, that Magit wraps and
-;; improves upon each and every Git command, it is complete enough to
-;; allow even experienced Git users to perform almost all of their
-;; daily version control tasks directly from within Emacs.  While many
-;; fine Git clients exist, only Magit and Git itself deserve to be
-;; called porcelains.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-
-(require 'with-editor)
-(require 'git-commit)
-(require 'magit-core)
-(require 'magit-diff)
-(require 'magit-apply)
-(require 'magit-log)
-(require 'magit-repos)
-
-(require 'format-spec)
-(require 'package nil t) ; used in `magit-version'
-
-(defconst magit--minimal-git "2.0.0")
-(defconst magit--minimal-emacs "25.1")
-
-;;; Faces
-
-(defface magit-header-line
-  '((t :inherit magit-section-heading))
-  "Face for the `header-line' in some Magit modes.
-Note that some modes, such as `magit-log-select-mode', have their
-own faces for the `header-line', or for parts of the
-`header-line'."
-  :group 'magit-faces)
-
-(defface magit-header-line-key
-  '((t :inherit magit-popup-key))
-  "Face for keys in the `header-line'."
-  :group 'magit-faces)
-
-(defface magit-dimmed
-  '((((class color) (background light)) :foreground "grey50")
-    (((class color) (background  dark)) :foreground "grey50"))
-  "Face for text that shouldn't stand out."
-  :group 'magit-faces)
-
-(defface magit-hash
-  '((((class color) (background light)) :foreground "grey60")
-    (((class color) (background  dark)) :foreground "grey40"))
-  "Face for the sha1 part of the log output."
-  :group 'magit-faces)
-
-(defface magit-tag
-  '((((class color) (background light)) :foreground "Goldenrod4")
-    (((class color) (background  dark)) :foreground "LightGoldenrod2"))
-  "Face for tag labels shown in log buffer."
-  :group 'magit-faces)
-
-(defface magit-branch-remote
-  '((((class color) (background light)) :foreground "DarkOliveGreen4")
-    (((class color) (background  dark)) :foreground "DarkSeaGreen2"))
-  "Face for remote branch head labels shown in log buffer."
-  :group 'magit-faces)
-
-(defface magit-branch-remote-head
-  '((((class color) (background light)) :inherit magit-branch-remote :box t)
-    (((class color) (background  dark)) :inherit magit-branch-remote :box t))
-  "Face for current branch."
-  :group 'magit-faces)
-
-(defface magit-branch-local
-  '((((class color) (background light)) :foreground "SkyBlue4")
-    (((class color) (background  dark)) :foreground "LightSkyBlue1"))
-  "Face for local branches."
-  :group 'magit-faces)
-
-(defface magit-branch-current
-  '((((class color) (background light)) :inherit magit-branch-local :box t)
-    (((class color) (background  dark)) :inherit magit-branch-local :box t))
-  "Face for current branch."
-  :group 'magit-faces)
-
-(defface magit-head
-  '((((class color) (background light)) :inherit magit-branch-local)
-    (((class color) (background  dark)) :inherit magit-branch-local))
-  "Face for the symbolic ref `HEAD'."
-  :group 'magit-faces)
-
-(defface magit-refname
-  '((((class color) (background light)) :foreground "grey30")
-    (((class color) (background  dark)) :foreground "grey80"))
-  "Face for refnames without a dedicated face."
-  :group 'magit-faces)
-
-(defface magit-refname-stash
-  '((t :inherit magit-refname))
-  "Face for stash refnames."
-  :group 'magit-faces)
-
-(defface magit-refname-wip
-  '((t :inherit magit-refname))
-  "Face for wip refnames."
-  :group 'magit-faces)
-
-(defface magit-refname-pullreq
-  '((t :inherit magit-refname))
-  "Face for pullreq refnames."
-  :group 'magit-faces)
-
-(defface magit-keyword
-  '((t :inherit font-lock-string-face))
-  "Face for parts of commit messages inside brackets."
-  :group 'magit-faces)
-
-(defface magit-keyword-squash
-  '((t :inherit font-lock-warning-face))
-  "Face for squash! and fixup! keywords in commit messages."
-  :group 'magit-faces)
-
-(defface magit-signature-good
-  '((t :foreground "green"))
-  "Face for good signatures."
-  :group 'magit-faces)
-
-(defface magit-signature-bad
-  '((t :foreground "red" :weight bold))
-  "Face for bad signatures."
-  :group 'magit-faces)
-
-(defface magit-signature-untrusted
-  '((t :foreground "cyan"))
-  "Face for good untrusted signatures."
-  :group 'magit-faces)
-
-(defface magit-signature-expired
-  '((t :foreground "orange"))
-  "Face for signatures that have expired."
-  :group 'magit-faces)
-
-(defface magit-signature-expired-key
-  '((t :inherit magit-signature-expired))
-  "Face for signatures made by an expired key."
-  :group 'magit-faces)
-
-(defface magit-signature-revoked
-  '((t :foreground "violet red"))
-  "Face for signatures made by a revoked key."
-  :group 'magit-faces)
-
-(defface magit-signature-error
-  '((t :foreground "firebrick3"))
-  "Face for signatures that cannot be checked (e.g. missing key)."
-  :group 'magit-faces)
-
-(defface magit-cherry-unmatched
-  '((t :foreground "cyan"))
-  "Face for unmatched cherry commits."
-  :group 'magit-faces)
-
-(defface magit-cherry-equivalent
-  '((t :foreground "magenta"))
-  "Face for equivalent cherry commits."
-  :group 'magit-faces)
-
-(defface magit-filename
-  '((t :weight normal))
-  "Face for filenames."
-  :group 'magit-faces)
-
-;;; Dispatch Popup
-
-;;;###autoload (autoload 'magit-dispatch-popup "magit" nil t)
-(magit-define-popup magit-dispatch-popup
-  "Popup console for dispatching other popups."
-  :actions '("Popup and dwim commands"
-             (?A "Cherry-picking"  magit-cherry-pick-popup)
-             (?b "Branching"       magit-branch-popup)
-             (?B "Bisecting"       magit-bisect-popup)
-             (?c "Committing"      magit-commit-popup)
-             (?d "Diffing"         magit-diff-popup)
-             (?D "Change diffs"    magit-diff-refresh-popup)
-             (?e "Ediff dwimming"  magit-ediff-dwim)
-             (?E "Ediffing"        magit-ediff-popup)
-             (?f "Fetching"        magit-fetch-popup)
-             (?F "Pulling"         magit-pull-popup)
-             (?l "Logging"         magit-log-popup)
-             (?L "Change logs"     magit-log-refresh-popup)
-             (?m "Merging"         magit-merge-popup)
-             (?M "Remoting"        magit-remote-popup)
-             (?o "Submodules"      magit-submodule-popup)
-             (?O "Subtrees"        magit-subtree-popup)
-             (?P "Pushing"         magit-push-popup)
-             (?r "Rebasing"        magit-rebase-popup)
-             (?t "Tagging"         magit-tag-popup)
-             (?T "Notes"           magit-notes-popup)
-             (?V "Reverting"       magit-revert-popup)
-             (?w "Apply patches"   magit-am-popup)
-             (?W "Format patches"  magit-patch-popup)
-             (?X "Resetting"       magit-reset-popup)
-             (?y "Show Refs"       magit-show-refs-popup)
-             (?z "Stashing"        magit-stash-popup)
-             (?! "Running"         magit-run-popup)
-             (?% "Worktree"        magit-worktree-popup)
-             (lambda ()
-               (and (with-current-buffer magit-pre-popup-buffer
-                      (derived-mode-p 'magit-mode))
-                    (propertize "Applying changes" 'face 'magit-popup-heading)))
-             (?a "Apply"           magit-apply)
-             (?s "Stage"           magit-stage)
-             (?u "Unstage"         magit-unstage)
-             (?v "Reverse"         magit-reverse)
-             (?S "Stage all"       magit-stage-modified)
-             (?U "Unstage all"     magit-unstage-all)
-             (?k "Discard"         magit-discard)
-             (lambda ()
-               (and (with-current-buffer magit-pre-popup-buffer
-                      (derived-mode-p 'magit-mode))
-                    (propertize "Essential commands" 'face 'magit-popup-heading)))
-             (?g  "    refresh current buffer"   magit-refresh)
-             ;; These bindings only work because of :setup-function.
-             (?\t   "  toggle section at point"  magit-section-toggle)
-             (?\r   "  visit thing at point"     magit-visit-thing)
-             ;; This binding has no effect and only appears to do
-             ;; so because it is identical to the global binding.
-             ("C-h m" "show all key bindings"    describe-mode))
-  :setup-function 'magit-dispatch-popup-setup
-  :max-action-columns (lambda (heading)
-                        (pcase heading
-                          ("Popup and dwim commands" 4)
-                          ("Applying changes" 3)
-                          ("Essential commands" 1))))
-
-(defvar magit-dispatch-popup-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map magit-popup-mode-map)
-    (cond ((featurep 'jkl)
-           (define-key map [tab]    'magit-invoke-popup-action)
-           (define-key map [return] 'magit-invoke-popup-action))
-          (t
-           (define-key map (kbd "C-i") 'magit-invoke-popup-action)
-           (define-key map (kbd "C-m") 'magit-invoke-popup-action)))
-    map)
-  "Keymap used by `magit-dispatch-popup'.")
-
-(defun magit-dispatch-popup-setup (val def)
-  (magit-popup-default-setup val def)
-  (use-local-map magit-dispatch-popup-map)
-  ;; This is necessary for users (i.e. me) who have broken the
-  ;; connection between C-i (aka TAB) and tab, and C-m (aka RET)
-  ;; and return.
-  (magit-popup-put
-   :actions (nconc (magit-popup-get :actions)
-                   (list (make-magit-popup-event :key 'tab
-                                                 :fun 'magit-section-toggle)
-                         (make-magit-popup-event :key 'return
-                                                 :fun 'magit-visit-thing)))))
-
-;;; Git Popup
-
-(defcustom magit-shell-command-verbose-prompt t
-  "Whether to show the working directory when reading a command.
-This affects `magit-git-command', `magit-git-command-topdir',
-`magit-shell-command', and `magit-shell-command-topdir'."
-  :package-version '(magit . "2.11.0")
-  :group 'magit-commands
-  :type 'boolean)
-
-(defvar magit-git-command-history nil)
-
-;;;###autoload (autoload 'magit-run-popup "magit" nil t)
-(magit-define-popup magit-run-popup
-  "Popup console for running raw Git commands."
-  :actions '((?! "Git Subcommand (in topdir)" magit-git-command-topdir)
-             (?k "Gitk"                       magit-run-gitk)
-             (?p "Git Subcommand (in pwd)"    magit-git-command)
-             (?a "Gitk --all"                 magit-run-gitk-all)
-             (?s "Shell command (in topdir)"  magit-shell-command-topdir)
-             (?b "Gitk --branches"            magit-run-gitk-branches)
-             (?S "Shell command (in pwd)"     magit-shell-command)
-             (?g "Git Gui"                    magit-run-git-gui))
-  :default-action 'magit-git-command
-  :max-action-columns 2)
-
-;;;###autoload
-(defun magit-git-command (command)
-  "Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer. \"git \" is
-used as initial input, but can be deleted to run another command.
-
-With a prefix argument COMMAND is run in the top-level directory
-of the current working tree, otherwise in `default-directory'."
-  (interactive (list (magit-read-shell-command nil "git ")))
-  (magit--shell-command command))
-
-;;;###autoload
-(defun magit-git-command-topdir (command)
-  "Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer. \"git \" is
-used as initial input, but can be deleted to run another command.
-
-COMMAND is run in the top-level directory of the current
-working tree."
-  (interactive (list (magit-read-shell-command t "git ")))
-  (magit--shell-command command (magit-toplevel)))
-
-;;;###autoload
-(defun magit-shell-command (command)
-  "Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer.  With a
-prefix argument COMMAND is run in the top-level directory of
-the current working tree, otherwise in `default-directory'."
-  (interactive (list (magit-read-shell-command)))
-  (magit--shell-command command))
-
-;;;###autoload
-(defun magit-shell-command-topdir (command)
-  "Execute COMMAND asynchronously; display output.
-
-Interactively, prompt for COMMAND in the minibuffer.  COMMAND
-is run in the top-level directory of the current working tree."
-  (interactive (list (magit-read-shell-command t)))
-  (magit--shell-command command (magit-toplevel)))
-
-(defun magit--shell-command (command &optional directory)
-  (let ((default-directory (or directory default-directory))
-        (process-environment process-environment))
-    (push "GIT_PAGER=cat" process-environment)
-    (magit-start-process shell-file-name nil
-                         shell-command-switch command))
-  (magit-process-buffer))
-
-(defun magit-read-shell-command (&optional toplevel initial-input)
-  (let ((dir (abbreviate-file-name
-              (if (or toplevel current-prefix-arg)
-                  (or (magit-toplevel)
-                      (magit--not-inside-repository-error))
-                default-directory))))
-    (read-shell-command (if magit-shell-command-verbose-prompt
-                            (format "Async shell command in %s: " dir)
-                          "Async shell command: ")
-                        initial-input 'magit-git-command-history)))
-
-;;; Font-Lock Keywords
-
-(defconst magit-font-lock-keywords
-  (eval-when-compile
-    `((,(concat "(\\(magit-define-section-jumper\\)\\_>"
-                "[ \t'\(]*"
-                "\\(\\(?:\\sw\\|\\s_\\)+\\)?")
-       (1 'font-lock-keyword-face)
-       (2 'font-lock-function-name-face nil t))
-      (,(concat "(" (regexp-opt '("magit-insert-section"
-                                  "magit-section-case"
-                                  "magit-section-when"
-                                  "magit-bind-match-strings"
-                                  "magit-with-temp-index"
-                                  "magit-with-blob"
-                                  "magit-with-toplevel") t)
-                "\\_>")
-       . 1))))
-
-(font-lock-add-keywords 'emacs-lisp-mode magit-font-lock-keywords)
-
-;;; Version
-
-(defvar magit-version 'undefined
-  "The version of Magit that you're using.
-Use the function by the same name instead of this variable.")
-
-;;;###autoload
-(defun magit-version (&optional print-dest)
-  "Return the version of Magit currently in use.
-If optional argument PRINT-DEST is non-nil, output
-stream (interactively, the echo area, or the current buffer with
-a prefix argument), also print the used versions of Magit, Git,
-and Emacs to it."
-  (interactive (list (if current-prefix-arg (current-buffer) t)))
-  (let ((magit-git-global-arguments nil)
-        (toplib (or load-file-name buffer-file-name))
-        debug)
-    (unless (and toplib
-                 (equal (file-name-nondirectory toplib) "magit.el"))
-      (setq toplib (locate-library "magit.el")))
-    (setq toplib (and toplib (file-chase-links toplib)))
-    (push toplib debug)
-    (when toplib
-      (let* ((topdir (file-name-directory toplib))
-             (gitdir (expand-file-name
-                      ".git" (file-name-directory
-                              (directory-file-name topdir))))
-             (static (locate-library "magit-version.el" nil (list topdir)))
-             (static (and static (file-chase-links static))))
-        (or (progn
-              (push 'repo debug)
-              (when (and (file-exists-p gitdir)
-                         ;; It is a repo, but is it the Magit repo?
-                         (file-exists-p
-                          (expand-file-name "../lisp/magit.el" gitdir)))
-                (push t debug)
-                ;; Inside the repo the version file should only exist
-                ;; while running make.
-                (when (and static (not noninteractive))
-                  (ignore-errors (delete-file static)))
-                (setq magit-version
-                      (let ((default-directory topdir))
-                        (magit-git-string "describe" "--tags" "--dirty")))))
-            (progn
-              (push 'static debug)
-              (when (and static (file-exists-p static))
-                (push t debug)
-                (load-file static)
-                magit-version))
-            (when (featurep 'package)
-              (push 'elpa debug)
-              (ignore-errors
-                (--when-let (assq 'magit package-alist)
-                  (push t debug)
-                  (setq magit-version
-                        (and (fboundp 'package-desc-version)
-                             (package-version-join
-                              (package-desc-version (cadr it))))))))
-            (progn
-              (push 'debug debug)
-              (let ((dirname (file-name-nondirectory
-                              (directory-file-name topdir))))
-                (when (string-match "\\`magit-\\([0-9]\\{8\\}\\.[0-9]*\\)"
-                                    dirname)
-                  (setq magit-version (match-string 1 dirname))))))))
-    (if (stringp magit-version)
-        (when print-dest
-          (princ (format "Magit %s, Git %s, Emacs %s, %s"
-                         (or magit-version "(unknown)")
-                         (or (let ((magit-git-debug
-                                    (lambda (err)
-                                      (display-warning '(magit git)
-                                                       err :error))))
-                               (magit-git-version t))
-                             "(unknown)")
-                         emacs-version
-                         system-type)
-                 print-dest))
-      (setq debug (reverse debug))
-      (setq magit-version 'error)
-      (when magit-version
-        (push magit-version debug))
-      (unless (equal (getenv "TRAVIS") "true")
-        ;; The repository is a sparse clone.
-        (message "Cannot determine Magit's version %S" debug)))
-    magit-version))
-
-;;; Debugging Tools
-
-(defun magit-debug-git-executable ()
-  "Display a buffer with information about `magit-git-executable'.
-See info node `(magit)Debugging Tools' for more information."
-  (interactive)
-  (with-current-buffer (get-buffer-create "*magit-git-debug*")
-    (pop-to-buffer (current-buffer))
-    (erase-buffer)
-    (insert (concat
-             (format "magit-git-executable: %S" magit-git-executable)
-             (and (not (file-name-absolute-p magit-git-executable))
-                  (format " [%S]" (executable-find magit-git-executable)))
-             (format " (%s)\n"
-                     (let* ((errmsg nil)
-                            (magit-git-debug (lambda (err) (setq errmsg err))))
-                       (or (magit-git-version t) errmsg)))))
-    (insert (format "exec-path: %S\n" exec-path))
-    (--when-let (cl-set-difference
-                 (-filter #'file-exists-p (remq nil (parse-colon-path
-                                                     (getenv "PATH"))))
-                 (-filter #'file-exists-p (remq nil exec-path))
-                 :test #'file-equal-p)
-      (insert (format "  entries in PATH, but not in exec-path: %S\n" it)))
-    (dolist (execdir exec-path)
-      (insert (format "  %s (%s)\n" execdir (car (file-attributes execdir))))
-      (when (file-directory-p execdir)
-        (dolist (exec (directory-files
-                       execdir t (concat
-                                  "\\`git" (regexp-opt exec-suffixes) "\\'")))
-          (insert (format "    %s (%s)\n" exec
-                          (let* ((magit-git-executable exec)
-                                 (errmsg nil)
-                                 (magit-git-debug (lambda (err) (setq errmsg err))))
-                            (or (magit-git-version t) errmsg)))))))))
-
-;;; Startup Asserts
-
-(defun magit-startup-asserts ()
-  (when-let ((val (getenv "GIT_DIR")))
-    (setenv "GIT_DIR")
-    (message "Magit unset $GIT_DIR (was %S).  See \
-https://github.com/magit/magit/wiki/Don't-set-$GIT_DIR-and-alike" val))
-  (when-let ((val (getenv "GIT_WORK_TREE")))
-    (setenv "GIT_WORK_TREE")
-    (message "Magit unset $GIT_WORK_TREE (was %S).  See \
-https://github.com/magit/magit/wiki/Don't-set-$GIT_DIR-and-alike" val))
-  (let ((version (magit-git-version)))
-    (when (and version
-               (version< version magit--minimal-git)
-               (not (equal (getenv "TRAVIS") "true")))
-      (display-warning 'magit (format "\
-Magit requires Git >= %s, you are using %s.
-
-If this comes as a surprise to you, because you do actually have
-a newer version installed, then that probably means that the
-older version happens to appear earlier on the `$PATH'.  If you
-always start Emacs from a shell, then that can be fixed in the
-shell's init file.  If you start Emacs by clicking on an icon,
-or using some sort of application launcher, then you probably
-have to adjust the environment as seen by graphical interface.
-For X11 something like ~/.xinitrc should work.
-
-If you use Tramp to work inside remote Git repositories, then you
-have to make sure a suitable Git is used on the remote machines
-too.\n" magit--minimal-git version) :error)))
-  (when (version< emacs-version magit--minimal-emacs)
-    (display-warning 'magit (format "\
-Magit requires Emacs >= %s, you are using %s.
-
-If this comes as a surprise to you, because you do actually have
-a newer version installed, then that probably means that the
-older version happens to appear earlier on the `$PATH'.  If you
-always start Emacs from a shell, then that can be fixed in the
-shell's init file.  If you start Emacs by clicking on an icon,
-or using some sort of application launcher, then you probably
-have to adjust the environment as seen by graphical interface.
-For X11 something like ~/.xinitrc should work.\n"
-                                    magit--minimal-emacs emacs-version)
-                     :error)))
-
-;;; Loading Libraries
-
-(provide 'magit)
-
-(cl-eval-when (load eval)
-  (require 'magit-status)
-  (require 'magit-refs)
-  (require 'magit-files)
-  (require 'magit-collab)
-  (require 'magit-reset)
-  (require 'magit-branch)
-  (require 'magit-merge)
-  (require 'magit-tag)
-  (require 'magit-worktree)
-  (require 'magit-notes)
-  (require 'magit-sequence)
-  (require 'magit-commit)
-  (require 'magit-remote)
-  (require 'magit-bisect)
-  (require 'magit-stash)
-  (require 'magit-blame)
-  (require 'magit-obsolete)
-  (unless (load "magit-autoloads" t t)
-    (require 'magit-submodule)
-    (require 'magit-subtree)
-    (require 'magit-ediff)
-    (require 'magit-extras)
-    (require 'git-rebase)
-    (require 'magit-imenu)
-    (require 'magit-bookmark)))
-
-(eval-after-load 'bookmark
-  '(require 'magit-bookmark))
-
-(if after-init-time
-    (progn (magit-startup-asserts)
-           (magit-version))
-  (add-hook 'after-init-hook #'magit-startup-asserts t)
-  (add-hook 'after-init-hook #'magit-version t))
-
-;;; magit.el ends here
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.elc b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.elc
deleted file mode 100644
index 6250a4b46aee..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.elc
+++ /dev/null
Binary files differdiff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info
deleted file mode 100644
index 9798fed97662..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info
+++ /dev/null
@@ -1,184 +0,0 @@
-This is magit.info, produced by makeinfo version 6.5 from magit.texi.
-
-     Copyright (C) 2015-2018 Jonas Bernoulli <jonas@bernoul.li>
-
-     You can redistribute this document and/or modify it under the terms
-     of the GNU General Public License as published by the Free Software
-     Foundation, either version 3 of the License, or (at your option)
-     any later version.
-
-     This document is distributed in the hope that it will be useful,
-     but WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* Magit: (magit).       Using Git from Emacs with Magit.
-END-INFO-DIR-ENTRY
-
-
-Indirect:
-magit.info-1: 753
-magit.info-2: 305279
-
-Tag Table:
-(Indirect)
-Node: Top753
-Node: Introduction6269
-Node: Installation10992
-Node: Installing from an Elpa Archive11332
-Node: Installing from the Git Repository12435
-Node: Post-Installation Tasks15188
-Node: Getting Started16473
-Node: Interface Concepts21820
-Node: Modes and Buffers22151
-Node: Switching Buffers23896
-Node: Naming Buffers28439
-Node: Quitting Windows31746
-Node: Automatic Refreshing of Magit Buffers33378
-Node: Automatic Saving of File-Visiting Buffers36146
-Node: Automatic Reverting of File-Visiting Buffers37331
-Node: Risk of Reverting Automatically42327
-Node: Sections44710
-Node: Section Movement45651
-Node: Section Visibility49748
-Node: Section Hooks54607
-Node: Section Types and Values57014
-Node: Section Options58317
-Node: Popup Buffers and Prefix Commands58789
-Node: Completion Confirmation and the Selection61170
-Node: Action Confirmation61607
-Node: Completion and Confirmation68953
-Node: The Selection72139
-Node: The hunk-internal region75038
-Node: Support for Completion Frameworks76127
-Node: Additional Completion Options80943
-Node: Running Git81542
-Node: Viewing Git Output81815
-Node: Git Process Status82948
-Node: Running Git Manually83913
-Node: Git Executable86315
-Node: Global Git Arguments88597
-Node: Inspecting89403
-Node: Status Buffer90550
-Node: Status Sections93314
-Node: Status Header Sections98117
-Node: Status Module Sections100747
-Node: Status Options103252
-Node: Repository List105006
-Node: Logging107164
-Node: Refreshing Logs109611
-Node: Log Buffer110996
-Node: Log Margin114791
-Node: Select from Log117431
-Node: Reflog119535
-Node: Cherries121052
-Node: Diffing122779
-Node: Refreshing Diffs125726
-Node: Diff Buffer129217
-Node: Diff Options133555
-Node: Revision Buffer137830
-Node: Ediffing140368
-Node: References Buffer143964
-Node: References Sections153729
-Node: Bisecting154590
-Node: Visiting Blobs156328
-Node: Blaming156838
-Node: Manipulating162613
-Node: Repository Setup162929
-Node: Staging and Unstaging163969
-Node: Staging from File-Visiting Buffers168050
-Node: Applying169218
-Node: Committing171111
-Node: Initiating a Commit171694
-Node: Editing Commit Messages175015
-Node: Branching185411
-Node: The Two Remotes185641
-Node: The Branch Popup188258
-Node: The Branch Config Popup205311
-Node: Auxillary Branch Commands211252
-Node: Merging212355
-Node: Resolving Conflicts216280
-Node: Rebasing221281
-Node: Editing Rebase Sequences225438
-Node: Information About In-Progress Rebase228468
-Ref: Information About In-Progress Rebase-Footnote-1237217
-Node: Cherry Picking237813
-Node: Reverting242065
-Node: Resetting243428
-Node: Stashing245039
-Node: Transferring249552
-Node: Remotes249790
-Node: The Remote Popup249946
-Node: The Remote Config Popup253414
-Node: Fetching255070
-Node: Pulling256426
-Node: Pushing257262
-Node: Creating and Sending Patches261997
-Node: Applying Patches262834
-Node: Miscellaneous264420
-Node: Tagging264736
-Node: Notes266077
-Node: Submodules268388
-Node: Listing Submodules268602
-Node: Submodule Popup270526
-Node: Subtree272979
-Node: Worktree274219
-Node: Common Commands275429
-Node: Wip Modes277176
-Node: Minor Mode for Buffers Visiting Files286051
-Node: Minor Mode for Buffers Visiting Blobs291458
-Node: Customizing292271
-Node: Per-Repository Configuration293939
-Node: Essential Settings295588
-Node: Safety295912
-Node: Performance297677
-Node: Microsoft Windows Performance305279
-Node: MacOS Performance306470
-Ref: MacOS Performance-Footnote-1307706
-Ref: MacOS Performance-Footnote-2307788
-Ref: MacOS Performance-Footnote-3307848
-Node: Plumbing308014
-Node: Calling Git308837
-Node: Getting a Value from Git310362
-Node: Calling Git for Effect313448
-Node: Section Plumbing319968
-Node: Creating Sections320196
-Node: Section Selection324096
-Node: Matching Sections325776
-Node: Refreshing Buffers331228
-Node: Conventions334370
-Node: Theming Faces334562
-Node: FAQ342677
-Node: FAQ - How to ...?343119
-Node: How to show git's output?343479
-Node: How to install the gitman info manual?344233
-Node: How to show diffs for gpg-encrypted files?345203
-Node: How does branching and pushing work?345799
-Node: Can Magit be used as ediff-version-control-package?346162
-Node: FAQ - Issues and Errors348151
-Node: Magit is slow349083
-Node: I changed several thousand files at once and now Magit is unusable349297
-Node: I am having problems committing350026
-Node: I am using MS Windows and cannot push with Magit350507
-Node: I am using OS X and SOMETHING works in shell but not in Magit351124
-Node: Diffs contain control sequences351930
-Node: Expanding a file to show the diff causes it to disappear353043
-Node: Point is wrong in the COMMIT_EDITMSG buffer353594
-Node: The mode-line information isn't always up-to-date354640
-Node: A branch and tag sharing the same name breaks SOMETHING355722
-Node: My Git hooks work on the command-line but not inside Magit356610
-Node: git-commit-mode isn't used when committing from the command-line357447
-Node: Point ends up inside invisible text when jumping to a file-visiting buffer359714
-Node: Debugging Tools360512
-Node: Keystroke Index362399
-Node: Command Index394412
-Node: Function Index429285
-Node: Variable Index444739
-
-End Tag Table
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-1 b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-1
deleted file mode 100644
index 4699ff7ca8ff..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-1
+++ /dev/null
@@ -1,7899 +0,0 @@
-This is magit.info, produced by makeinfo version 6.5 from magit.texi.
-
-     Copyright (C) 2015-2018 Jonas Bernoulli <jonas@bernoul.li>
-
-     You can redistribute this document and/or modify it under the terms
-     of the GNU General Public License as published by the Free Software
-     Foundation, either version 3 of the License, or (at your option)
-     any later version.
-
-     This document is distributed in the hope that it will be useful,
-     but WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* Magit: (magit).       Using Git from Emacs with Magit.
-END-INFO-DIR-ENTRY
-
-
-File: magit.info,  Node: Top,  Next: Introduction,  Up: (dir)
-
-Magit User Manual
-*****************
-
-Magit is an interface to the version control system Git, implemented as
-an Emacs package.  Magit aspires to be a complete Git porcelain.  While
-we cannot (yet) claim that Magit wraps and improves upon each and every
-Git command, it is complete enough to allow even experienced Git users
-to perform almost all of their daily version control tasks directly from
-within Emacs.  While many fine Git clients exist, only Magit and Git
-itself deserve to be called porcelains.
-
-This manual is for Magit version 2.13.0 (2.13.0-201-g865c5bdac+1).
-
-     Copyright (C) 2015-2018 Jonas Bernoulli <jonas@bernoul.li>
-
-     You can redistribute this document and/or modify it under the terms
-     of the GNU General Public License as published by the Free Software
-     Foundation, either version 3 of the License, or (at your option)
-     any later version.
-
-     This document is distributed in the hope that it will be useful,
-     but WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-* Menu:
-
-* Introduction::
-* Installation::
-* Getting Started::
-* Interface Concepts::
-* Inspecting::
-* Manipulating::
-* Transferring::
-* Miscellaneous::
-* Customizing::
-* Plumbing::
-* FAQ::
-* Debugging Tools::
-* Keystroke Index::
-* Command Index::
-* Function Index::
-* Variable Index::
-
-— The Detailed Node Listing —
-
-Installation
-
-* Installing from an Elpa Archive::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-
-Interface Concepts
-
-* Modes and Buffers::
-* Sections::
-* Popup Buffers and Prefix Commands::
-* Completion, Confirmation and the Selection: Completion Confirmation and the Selection.
-* Running Git::
-
-Modes and Buffers
-
-* Switching Buffers::
-* Naming Buffers::
-* Quitting Windows::
-* Automatic Refreshing of Magit Buffers::
-* Automatic Saving of File-Visiting Buffers::
-* Automatic Reverting of File-Visiting Buffers::
-
-
-Sections
-
-* Section Movement::
-* Section Visibility::
-* Section Hooks::
-* Section Types and Values::
-* Section Options::
-
-
-Completion, Confirmation and the Selection
-
-* Action Confirmation::
-* Completion and Confirmation::
-* The Selection::
-* The hunk-internal region::
-* Support for Completion Frameworks::
-* Additional Completion Options::
-
-
-Running Git
-
-* Viewing Git Output::
-* Git Process Status::
-* Running Git Manually::
-* Git Executable::
-* Global Git Arguments::
-
-
-Inspecting
-
-* Status Buffer::
-* Repository List::
-* Logging::
-* Diffing::
-* Ediffing::
-* References Buffer::
-* Bisecting::
-* Visiting Blobs::
-* Blaming::
-
-Status Buffer
-
-* Status Sections::
-* Status Header Sections::
-* Status Module Sections::
-* Status Options::
-
-
-Logging
-
-* Refreshing Logs::
-* Log Buffer::
-* Log Margin::
-* Select from Log::
-* Reflog::
-* Cherries::
-
-
-Diffing
-
-* Refreshing Diffs::
-* Diff Buffer::
-* Diff Options::
-* Revision Buffer::
-
-
-References Buffer
-
-* References Sections::
-
-
-Manipulating
-
-* Repository Setup::
-* Staging and Unstaging::
-* Applying::
-* Committing::
-* Branching::
-* Merging::
-* Resolving Conflicts::
-* Rebasing::
-* Cherry Picking::
-* Resetting::
-* Stashing::
-
-Staging and Unstaging
-
-* Staging from File-Visiting Buffers::
-
-
-Committing
-
-* Initiating a Commit::
-* Editing Commit Messages::
-
-
-Branching
-
-* The Two Remotes::
-* The Branch Popup::
-* The Branch Config Popup::
-* Auxillary Branch Commands::
-
-
-Rebasing
-
-* Editing Rebase Sequences::
-* Information About In-Progress Rebase::
-
-
-Cherry Picking
-
-* Reverting::
-
-
-Transferring
-
-* Remotes::
-* Fetching::
-* Pulling::
-* Pushing::
-* Creating and Sending Patches::
-* Applying Patches::
-
-Remotes
-
-* The Remote Popup::
-* The Remote Config Popup::
-
-
-Miscellaneous
-
-* Tagging::
-* Notes::
-* Submodules::
-* Subtree::
-* Worktree::
-* Common Commands::
-* Wip Modes::
-* Minor Mode for Buffers Visiting Files::
-* Minor Mode for Buffers Visiting Blobs::
-
-Submodules
-
-* Listing Submodules::
-* Submodule Popup::
-
-
-Customizing
-
-* Per-Repository Configuration::
-* Essential Settings::
-
-Essential Settings
-
-* Safety::
-* Performance::
-
-
-Plumbing
-
-* Calling Git::
-* Section Plumbing::
-* Refreshing Buffers::
-* Conventions::
-
-Calling Git
-
-* Getting a Value from Git::
-* Calling Git for Effect::
-
-
-Section Plumbing
-
-* Creating Sections::
-* Section Selection::
-* Matching Sections::
-
-
-Conventions
-
-* Theming Faces::
-
-
-FAQ
-
-* FAQ - How to ...?::
-* FAQ - Issues and Errors::
-
-FAQ - How to ...?
-
-* How to show git's output?::
-* How to install the gitman info manual?::
-* How to show diffs for gpg-encrypted files?::
-* How does branching and pushing work?::
-* Can Magit be used as ediff-version-control-package?::
-
-
-FAQ - Issues and Errors
-
-* Magit is slow::
-* I changed several thousand files at once and now Magit is unusable::
-* I am having problems committing::
-* I am using MS Windows and cannot push with Magit::
-* I am using OS X and SOMETHING works in shell, but not in Magit: I am using OS X and SOMETHING works in shell but not in Magit.
-* Diffs contain control sequences::
-* Expanding a file to show the diff causes it to disappear::
-* Point is wrong in the COMMIT_EDITMSG buffer::
-* The mode-line information isn't always up-to-date::
-* A branch and tag sharing the same name breaks SOMETHING::
-* My Git hooks work on the command-line but not inside Magit::
-* git-commit-mode isn't used when committing from the command-line::
-* Point ends up inside invisible text when jumping to a file-visiting buffer::
-
-
-
-
-File: magit.info,  Node: Introduction,  Next: Installation,  Prev: Top,  Up: Top
-
-1 Introduction
-**************
-
-Magit is an interface to the version control system Git, implemented as
-an Emacs package.  Magit aspires to be a complete Git porcelain.  While
-we cannot (yet) claim that Magit wraps and improves upon each and every
-Git command, it is complete enough to allow even experienced Git users
-to perform almost all of their daily version control tasks directly from
-within Emacs.  While many fine Git clients exist, only Magit and Git
-itself deserve to be called porcelains.
-
-   Staging and otherwise applying changes is one of the most important
-features in a Git porcelain and here Magit outshines anything else,
-including Git itself.  Git’s own staging interface (‘git add --patch’)
-is so cumbersome that many users only use it in exceptional cases.  In
-Magit staging a hunk or even just part of a hunk is as trivial as
-staging all changes made to a file.
-
-   The most visible part of Magit’s interface is the status buffer,
-which displays information about the current repository.  Its content is
-created by running several Git commands and making their output
-actionable.  Among other things, it displays information about the
-current branch, lists unpulled and unpushed changes and contains
-sections displaying the staged and unstaged changes.  That might sound
-noisy, but, since sections are collapsible, it’s not.
-
-   To stage or unstage a change one places the cursor on the change and
-then types ‘s’ or ‘u’.  The change can be a file or a hunk, or when the
-region is active (i.e.  when there is a selection) several files or
-hunks, or even just part of a hunk.  The change or changes that these
-commands - and many others - would act on are highlighted.
-
-   Magit also implements several other "apply variants" in addition to
-staging and unstaging.  One can discard or reverse a change, or apply it
-to the working tree.  Git’s own porcelain only supports this for staging
-and unstaging and you would have to do something like ‘git diff ... |
-??? | git apply ...’ to discard, revert, or apply a single hunk on the
-command line.  In fact that’s exactly what Magit does internally (which
-is what lead to the term "apply variants").
-
-   Magit isn’t just for Git experts, but it does assume some prior
-experience with Git as well as Emacs.  That being said, many users have
-reported that using Magit was what finally taught them what Git is
-capable of and how to use it to its fullest.  Other users wished they
-had switched to Emacs sooner so that they would have gotten their hands
-on Magit earlier.
-
-   While one has to know the basic features of Emacs to be able to make
-full use of Magit, acquiring just enough Emacs skills doesn’t take long
-and is worth it, even for users who prefer other editors.  Vim users are
-advised to give Evil (https://bitbucket.org/lyro/evil/wiki/Home), the
-"Extensible VI Layer for Emacs", and Spacemacs
-(https://github.com/syl20bnr/spacemacs), an "Emacs starter-kit focused
-on Evil" a try.
-
-   Magit provides a consistent and efficient Git porcelain.  After a
-short learning period, you will be able to perform most of your daily
-version control tasks faster than you would on the command line.  You
-will likely also start using features that seemed too daunting in the
-past.
-
-   Magit fully embraces Git.  It exposes many advanced features using a
-simple but flexible interface instead of only wrapping the trivial ones
-like many GUI clients do.  Of course Magit supports logging, cloning,
-pushing, and other commands that usually don’t fail in spectacular ways;
-but it also supports tasks that often cannot be completed in a single
-step.  Magit fully supports tasks such as merging, rebasing,
-cherry-picking, reverting, and blaming by not only providing a command
-to initiate these tasks but also by displaying context sensitive
-information along the way and providing commands that are useful for
-resolving conflicts and resuming the sequence after doing so.
-
-   Magit wraps and in many cases improves upon at least the following
-Git porcelain commands: ‘add’, ‘am’, ‘bisect’, ‘blame’, ‘branch’,
-‘checkout’, ‘cherry’, ‘cherry-pick’, ‘clean’, ‘clone’, ‘commit’,
-‘config’, ‘describe’, ‘diff’, ‘fetch’, ‘format-patch’, ‘init’, ‘log’,
-‘merge’, ‘merge-tree’, ‘mv’, ‘notes’, ‘pull’, ‘rebase’, ‘reflog’,
-‘remote’, ‘request-pull’, ‘reset’, ‘revert’, ‘rm’, ‘show’, ‘stash’,
-‘submodule’, ‘subtree’, ‘tag’, and ‘worktree.’ Many more Magit porcelain
-commands are implemented on top of Git plumbing commands.
-
-
-File: magit.info,  Node: Installation,  Next: Getting Started,  Prev: Introduction,  Up: Top
-
-2 Installation
-**************
-
-Magit can be installed using Emacs’ package manager or manually from its
-development repository.
-
-* Menu:
-
-* Installing from an Elpa Archive::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-
-
-File: magit.info,  Node: Installing from an Elpa Archive,  Next: Installing from the Git Repository,  Up: Installation
-
-2.1 Installing from an Elpa Archive
-===================================
-
-Magit is available from Melpa and Melpa-Stable.  If you haven’t used
-Emacs’ package manager before, then it is high time you familiarize
-yourself with it by reading the documentation in the Emacs manual, see
-*note (emacs)Packages::.  Then add one of the archives to
-‘package-archives’:
-
-   • To use Melpa:
-
-     (require 'package)
-     (add-to-list 'package-archives
-                  '("melpa" . "http://melpa.org/packages/") t)
-
-   • To use Melpa-Stable:
-
-     (require 'package)
-     (add-to-list 'package-archives
-                  '("melpa-stable" . "http://stable.melpa.org/packages/") t)
-
-   Once you have added your preferred archive, you need to update the
-local package list using:
-
-     M-x package-refresh-contents RET
-
-   Once you have done that, you can install Magit and its dependencies
-using:
-
-     M-x package-install RET magit RET
-
-   Now see *note Post-Installation Tasks::.
-
-
-File: magit.info,  Node: Installing from the Git Repository,  Next: Post-Installation Tasks,  Prev: Installing from an Elpa Archive,  Up: Installation
-
-2.2 Installing from the Git Repository
-======================================
-
-Magit depends on the ‘dash’, ‘magit-popup’, ‘ghub’ and ‘with-editor’
-libraries which are available from Melpa and Melpa-Stable.  Install them
-using ‘M-x package-install RET <package> RET’.  Of course you may also
-install them manually from their development repository.
-
-   (An ancient release of Magit is also available from Marmalade, but no
-new versions will be uploaded.  Marmalade is unmaintained — its
-maintainer has stopped responding to support requests from package
-authors or even just to create new accounts so that new authors can
-upload their packages in the first place.)
-
-   Then clone the Magit repository:
-
-     $ git clone https://github.com/magit/magit.git ~/.emacs.d/site-lisp/magit
-     $ cd ~/.emacs.d/site-lisp/magit
-
-   Then compile the libraries and generate the info manuals:
-
-     $ make
-
-   If you haven’t installed ‘dash’, ‘magit-popup’, ‘ghub’ and
-‘with-editor’ from Melpa or at ‘/path/to/magit/../<package>’, then you
-have to tell ‘make’ where to find them.  To do so create the file
-‘/path/to/magit/config.mk’ with the following content before running
-‘make’:
-
-     LOAD_PATH  = -L /path/to/magit/lisp
-     LOAD_PATH += -L /path/to/dash
-     LOAD_PATH += -L /path/to/magit-popup
-     LOAD_PATH += -L /path/to/ghub
-     LOAD_PATH += -L /path/to/with-editor
-
-   Finally add this to your init file:
-
-     (add-to-list 'load-path "~/.emacs.d/site-lisp/magit/lisp")
-     (require 'magit)
-
-     (with-eval-after-load 'info
-       (info-initialize)
-       (add-to-list 'Info-directory-list
-                    "~/.emacs.d/site-lisp/magit/Documentation/"))
-
-   Note that you have to add the ‘lisp’ subdirectory to the ‘load-path’,
-not the top-level of the repository, and that elements of ‘load-path’
-should not end with a slash, while those of ‘Info-directory-list’
-should.
-
-   Instead of requiring the feature ‘magit’, you could load just the
-autoload definitions, by loading the file ‘magit-autoloads.el’.
-
-     (load "/path/to/magit/lisp/magit-autoloads")
-
-   Instead of running Magit directly from the repository by adding that
-to the ‘load-path’, you might want to instead install it in some other
-directory using ‘sudo make install’ and setting ‘load-path’ accordingly.
-
-   To update Magit use:
-
-     $ git pull
-     $ make
-
-   At times it might be necessary to run ‘make clean all’ instead.
-
-   To view all available targets use ‘make help’.
-
-   Now see *note Post-Installation Tasks::.
-
-
-File: magit.info,  Node: Post-Installation Tasks,  Prev: Installing from the Git Repository,  Up: Installation
-
-2.3 Post-Installation Tasks
-===========================
-
-After installing Magit you should verify that you are indeed using the
-Magit, Git, and Emacs releases you think you are using.  It’s best to
-restart Emacs before doing so, to make sure you are not using an
-outdated value for ‘load-path’.
-
-     M-x magit-version RET
-
-   should display something like
-
-     Magit 2.8.0, Git 2.10.2, Emacs 25.1.1, gnu/linux
-
-   Then you might also want to read about options that many users likely
-want to customize.  See *note Essential Settings::.
-
-   To be able to follow cross references to Git manpages found in this
-manual, you might also have to manually install the ‘gitman’ info
-manual, or advice ‘Info-follow-nearest-node’ to instead open the actual
-manpage.  See *note How to install the gitman info manual?::.
-
-   If you are completely new to Magit then see *note Getting Started::.
-
-   If you run into problems, then please see the *note FAQ::.  Also see
-the *note Debugging Tools::.
-
-   And last but not least please consider making a donation, to ensure
-that I can keep working on Magit.  See <https://magit.vc/donations>.
-for various donation options.
-
-
-File: magit.info,  Node: Getting Started,  Next: Interface Concepts,  Prev: Installation,  Up: Top
-
-3 Getting Started
-*****************
-
-This short tutorial describes the most essential features that many
-Magitians use on a daily basis.  It only scratches the surface but
-should be enough to get you started.
-
-   IMPORTANT: It is safest if you clone some repository just for this
-tutorial.  Alternatively you can use an existing local repository, but
-if you do that, then you should commit all uncommitted changes before
-proceeding.
-
-   To display information about the current Git repository, type ‘M-x
-magit-status RET’.  You will be using this command a lot, and should
-therefore give it a global key binding.  This is what we recommend:
-
-     (global-set-key (kbd "C-x g") 'magit-status)
-
-   Most Magit commands are commonly invoked from the status buffer.  It
-can be considered the primary interface for interacting with Git using
-Magit.  Many other Magit buffers may exist at a given time, but they are
-often created from this buffer.
-
-   Depending on what state your repository is in, this buffer may
-contain sections titled "Staged changes", "Unstaged changes", "Unmerged
-into origin/master", "Unpushed to origin/master", and many others.
-
-   Since we are starting from a safe state, which you can easily return
-to (by doing a ‘git reset --hard PRE-MAGIT-STATE’), there currently are
-not staged or unstaged changes.  Edit some files and save the changes.
-Then go back to the status buffer, while at the same time refreshing it,
-by typing ‘C-x g’.  (When the status buffer, or any Magit buffer for
-that matter, is the current buffer, then you can also use just ‘g’ to
-refresh it).
-
-   Move between sections using ‘p’ and ‘n’.  Note that the bodies of
-some sections are hidden.  Type ‘TAB’ to expand or collapse the section
-at point.  You can also use ‘C-tab’ to cycle the visibility of the
-current section and its children.  Move to a file section inside the
-section named "Unstaged changes" and type ‘s’ to stage the changes you
-have made to that file.  That file now appears under "Staged changes".
-
-   Magit can stage and unstage individual hunks, not just complete
-files.  Move to the file you have just staged, expand it using ‘TAB’,
-move to one of the hunks using ‘n’, and unstage just that by typing ‘u’.
-Note how the staging (‘s’) and unstaging (‘u’) commands operate on the
-change at point.  Many other commands behave the same way.
-
-   You can also un-/stage just part of a hunk.  Inside the body of a
-hunk section (move there using ‘C-n’), set the mark using ‘C-SPC’ and
-move down until some added and/or removed lines fall inside the region
-but not all of them.  Again type ‘s’ to stage.
-
-   It is also possible to un-/stage multiple files at once.  Move to a
-file section, type ‘C-SPC’, move to the next file using ‘n’, and then
-‘s’ to stage both files.  Note that both the mark and point have to be
-on the headings of sibling sections for this to work.  If the region
-looks like it does in other buffers, then it doesn’t select Magit
-sections that can be acted on as a unit.
-
-   And then of course you want to commit your changes.  Type ‘c’.  This
-shows the committing popup buffer featuring various commit variants and
-arguments that can be passed to ‘git commit’.  Do not worry about those
-for now.  We want to create a "normal" commit, which is done by typing
-‘c’ again.
-
-   Now two new buffers appear.  One is for writing the commit message,
-the other shows a diff with the changes that you are about to committed.
-Write a message and then type ‘C-c C-c’ to actually create the commit.
-
-   You probably don’t want to push the commit you just created because
-you just committed some random changes, but if that is not the case you
-could push it by typing ‘P’ to bring up the push popup and then ‘p’ to
-push to a branch with the same name as the local branch onto the remote
-configured as the push-remote.  (If the push-remote is not configured
-yet, then you would first be prompted for the remote to push to.)
-
-   So far we have mentioned the commit, push, and log popups.  These are
-probably among the popups you will be using the most, but many others
-exist.  To show a popup that lists all other popups (as well as the
-various apply commands and some other fundamental commands), type ‘h’.
-Try a few.
-
-   The key bindings in that popup correspond to the bindings in Magit
-buffers, including but not limited to the status buffer.  So you could
-type ‘h d’ to bring up the diff popup, but once you remember that "d"
-stands for "diff", you would usually do so by just typing ‘d’.  But the
-"popup of popups" is useful even once you have memorized all the
-bindings, as it can provide easy access to Magit commands from non-Magit
-buffers.  You should create a global key binding for this command too:
-
-     (global-set-key (kbd "C-x M-g") 'magit-dispatch-popup)
-
-   In the same vein, you might also want to enable
-‘global-magit-file-mode’ to get some more Magit key bindings in regular
-file-visiting buffers (see *note Minor Mode for Buffers Visiting
-Files::).
-
-   It is not necessary that you do so now, but if you stick with Magit,
-then it is highly recommended that you read the next section too.
-
-
-File: magit.info,  Node: Interface Concepts,  Next: Inspecting,  Prev: Getting Started,  Up: Top
-
-4 Interface Concepts
-********************
-
-* Menu:
-
-* Modes and Buffers::
-* Sections::
-* Popup Buffers and Prefix Commands::
-* Completion, Confirmation and the Selection: Completion Confirmation and the Selection.
-* Running Git::
-
-
-File: magit.info,  Node: Modes and Buffers,  Next: Sections,  Up: Interface Concepts
-
-4.1 Modes and Buffers
-=====================
-
-Magit provides several major-modes.  For each of these modes there
-usually exists only one buffer per repository.  Separate modes and thus
-buffers exist for commits, diffs, logs, and some other things.
-
-   Besides these special purpose buffers, there also exists an overview
-buffer, called the *status buffer*.  Its usually from this buffer that
-the user invokes Git commands, or creates or visits other buffers.
-
-   In this manual we often speak about "Magit buffers".  By that we mean
-buffers whose major-modes derive from ‘magit-mode’.
-
-‘M-x magit-toggle-buffer-lock’     (‘magit-toggle-buffer-lock’)
-
-     This command locks the current buffer to its value or if the buffer
-     is already locked, then it unlocks it.
-
-     Locking a buffer to its value prevents it from being reused to
-     display another value.  The name of a locked buffer contains its
-     value, which allows telling it apart from other locked buffers and
-     the unlocked buffer.
-
-     Not all Magit buffers can be locked to their values, for example it
-     wouldn’t make sense to lock a status buffer.
-
-     There can only be a single unlocked buffer using a certain
-     major-mode per repository.  So when a buffer is being unlocked and
-     another unlocked buffer already exists for that mode and
-     repository, then the former buffer is instead deleted and the
-     latter is displayed in its place.
-
-* Menu:
-
-* Switching Buffers::
-* Naming Buffers::
-* Quitting Windows::
-* Automatic Refreshing of Magit Buffers::
-* Automatic Saving of File-Visiting Buffers::
-* Automatic Reverting of File-Visiting Buffers::
-
-
-File: magit.info,  Node: Switching Buffers,  Next: Naming Buffers,  Up: Modes and Buffers
-
-4.1.1 Switching Buffers
------------------------
-
- -- Function: magit-display-buffer buffer
-
-     This function is a wrapper around ‘display-buffer’ and is used to
-     display any Magit buffer.  It displays BUFFER in some window and,
-     unlike ‘display-buffer’, also selects that window, provided
-     ‘magit-display-buffer-noselect’ is ‘nil’.  It also runs the hooks
-     mentioned below.
-
- -- Variable: magit-display-buffer-noselect
-
-     When this is non-nil, then ‘magit-display-buffer’ only displays the
-     buffer but forgoes also selecting the window.  This variable should
-     not be set globally, it is only intended to be let-bound, by code
-     that automatically updates "the other window".  This is used for
-     example when the revision buffer is updated when you move inside
-     the log buffer.
-
- -- User Option: magit-display-buffer-function
-
-     The function specified here is called by ‘magit-display-buffer’
-     with one argument, a buffer, to actually display that buffer.  This
-     function should call ‘display-buffer’ with that buffer as first and
-     a list of display actions as second argument.
-
-     Magit provides several functions, listed below, that are suitable
-     values for this option.  If you want to use different rules, then a
-     good way of doing that is to start with a copy of one of these
-     functions and then adjust it to your needs.
-
-     Instead of using a wrapper around ‘display-buffer’, that function
-     itself can be used here, in which case the display actions have to
-     be specified by adding them to ‘display-buffer-alist’ instead.
-
-     To learn about display actions, see *note (elisp)Choosing a Window
-     for Display::.
-
- -- Function: magit-display-buffer-traditional buffer
-
-     This function is the current default value of the option
-     ‘magit-display-buffer-function’.  Before that option and this
-     function were added, the behavior was hard-coded in many places all
-     over the code base but now all the rules are contained in this one
-     function (except for the "noselect" special case mentioned above).
-
- -- Function: magit-display-buffer-same-window-except-diff-v1
-
-     This function displays most buffers in the currently selected
-     window.  If a buffer’s mode derives from ‘magit-diff-mode’ or
-     ‘magit-process-mode’, it is displayed in another window.
-
- -- Function: magit-display-buffer-fullframe-status-v1
-
-     This function fills the entire frame when displaying a status
-     buffer.  Otherwise, it behaves like
-     ‘magit-display-buffer-traditional’.
-
- -- Function: magit-display-buffer-fullframe-status-topleft-v1
-
-     This function fills the entire frame when displaying a status
-     buffer.  It behaves like ‘magit-display-buffer-fullframe-status-v1’
-     except that it displays buffers that derive from ‘magit-diff-mode’
-     or ‘magit-process-mode’ to the top or left of the current buffer
-     rather than to the bottom or right.  As a result, Magit buffers
-     tend to pop up on the same side as they would if
-     ‘magit-display-buffer-traditional’ were in use.
-
- -- Function: magit-display-buffer-fullcolumn-most-v1
-
-     This function displays most buffers so that they fill the entire
-     height of the frame.  However, the buffer is displayed in another
-     window if (1) the buffer’s mode derives from ‘magit-process-mode’,
-     or (2) the buffer’s mode derives from ‘magit-diff-mode’, provided
-     that the mode of the current buffer derives from ‘magit-log-mode’
-     or ‘magit-cherry-mode’.
-
- -- User Option: magit-pre-display-buffer-hook
-
-     This hook is run by ‘magit-display-buffer’ before displaying the
-     buffer.
-
- -- Function: magit-save-window-configuration
-
-     This function saves the current window configuration.  Later when
-     the buffer is buried, it may be restored by
-     ‘magit-restore-window-configuration’.
-
- -- User Option: magit-post-display-buffer-hook
-
-     This hook is run by ‘magit-display-buffer’ after displaying the
-     buffer.
-
- -- Function: magit-maybe-set-dedicated
-
-     This function remembers if a new window had to be created to
-     display the buffer, or whether an existing window was reused.  This
-     information is later used by ‘magit-mode-quit-window’, to determine
-     whether the window should be deleted when its last Magit buffer is
-     buried.
-
-
-File: magit.info,  Node: Naming Buffers,  Next: Quitting Windows,  Prev: Switching Buffers,  Up: Modes and Buffers
-
-4.1.2 Naming Buffers
---------------------
-
- -- User Option: magit-generate-buffer-name-function
-
-     The function used to generate the names of Magit buffers.
-
-     Such a function should take the options
-     ‘magit-uniquify-buffer-names’ as well as ‘magit-buffer-name-format’
-     into account.  If it doesn’t, then should be clearly stated in the
-     doc-string.  And if it supports %-sequences beyond those mentioned
-     in the doc-string of the option ‘magit-buffer-name-format’, then
-     its own doc-string should describe the additions.
-
- -- Function: magit-generate-buffer-name-default-function mode
-
-     This function returns a buffer name suitable for a buffer whose
-     major-mode is MODE and which shows information about the repository
-     in which ‘default-directory’ is located.
-
-     This function uses ‘magit-buffer-name-format’ and supporting all of
-     the %-sequences mentioned the documentation of that option.  It
-     also respects the option ‘magit-uniquify-buffer-names’.
-
- -- User Option: magit-buffer-name-format
-
-     The format string used to name Magit buffers.
-
-     At least the following %-sequences are supported:
-
-        • ‘%m’
-
-          The name of the major-mode, but with the ‘-mode’ suffix
-          removed.
-
-        • ‘%M’
-
-          Like ‘%m’ but abbreviate ‘magit-status-mode’ as ‘magit’.
-
-        • ‘%v’
-
-          The value the buffer is locked to, in parentheses, or an empty
-          string if the buffer is not locked to a value.
-
-        • ‘%V’
-
-          Like ‘%v’, but the string is prefixed with a space, unless it
-          is an empty string.
-
-        • ‘%t’
-
-          The top-level directory of the working tree of the repository,
-          or if ‘magit-uniquify-buffer-names’ is non-nil an abbreviation
-          of that.
-
-        • ‘%x’
-
-          If ‘magit-uniquify-buffer-names’ is nil "*", otherwise the
-          empty string.  Due to limitations of the ‘uniquify’ package,
-          buffer names must end with the path.
-
-        • ‘%T’
-
-          Obsolete, use "%t%x" instead.  Like ‘%t’, but append an
-          asterisk if and only if ‘magit-uniquify-buffer-names’ is nil.
-
-     The value should always contain ‘%m’ or ‘%M’, ‘%v’ or ‘%V’, and
-     ‘%t’ (or the obsolete ‘%T’).  If ‘magit-uniquify-buffer-names’ is
-     non-nil, then the value must end with ‘%t’ or ‘%t%x’ (or the
-     obsolete ‘%T’).  See issue #2841.
-
- -- User Option: magit-uniquify-buffer-names
-
-     This option controls whether the names of Magit buffers are
-     uniquified.  If the names are not being uniquified, then they
-     contain the full path of the top-level of the working tree of the
-     corresponding repository.  If they are being uniquified, then they
-     end with the basename of the top-level, or if that would conflict
-     with the name used for other buffers, then the names of all these
-     buffers are adjusted until they no longer conflict.
-
-     This is done using the ‘uniquify’ package; customize its options to
-     control how buffer names are uniquified.
-
-
-File: magit.info,  Node: Quitting Windows,  Next: Automatic Refreshing of Magit Buffers,  Prev: Naming Buffers,  Up: Modes and Buffers
-
-4.1.3 Quitting Windows
-----------------------
-
-‘q’     (‘magit-mode-bury-buffer’)
-
-     This command buries the current Magit buffer.  With a prefix
-     argument, it instead kills the buffer.
-
- -- User Option: magit-bury-buffer-function
-
-     The function used to actually bury or kill the current buffer.
-
-     ‘magit-mode-bury-buffer’ calls this function with one argument.  If
-     the argument is non-nil, then the function has to kill the current
-     buffer.  Otherwise it has to bury it alive.  The default value
-     currently is ‘magit-restore-window-configuration’.
-
- -- Function: magit-restore-window-configuration kill-buffer
-
-     Bury or kill the current buffer using ‘quit-window’, which is
-     called with KILL-BUFFER as first and the selected window as second
-     argument.
-
-     Then restore the window configuration that existed right before the
-     current buffer was displayed in the selected frame.  Unfortunately
-     that also means that point gets adjusted in all the buffers, which
-     are being displayed in the selected frame.
-
- -- Function: magit-mode-quit-window kill-buffer
-
-     Bury or kill the current buffer using ‘quit-window’, which is
-     called with KILL-BUFFER as first and the selected window as second
-     argument.
-
-     Then, if the window was originally created to display a Magit
-     buffer and the buried buffer was the last remaining Magit buffer
-     that was ever displayed in the window, then that is deleted.
-
-
-File: magit.info,  Node: Automatic Refreshing of Magit Buffers,  Next: Automatic Saving of File-Visiting Buffers,  Prev: Quitting Windows,  Up: Modes and Buffers
-
-4.1.4 Automatic Refreshing of Magit Buffers
--------------------------------------------
-
-After running a command which may change the state of the current
-repository, the current Magit buffer and the corresponding status buffer
-are refreshed.  The status buffer may optionally be automatically
-refreshed whenever a buffer is saved to a file inside the respective
-repository.
-
-   Automatically refreshing Magit buffers ensures that the displayed
-information is up-to-date most of the time but can lead to a noticeable
-delay in big repositories.  Other Magit buffers are not refreshed to
-keep the delay to a minimum and also because doing so can sometimes be
-undesirable.
-
-   Buffers can also be refreshed explicitly, which is useful in buffers
-that weren’t current during the last refresh and after changes were made
-to the repository outside of Magit.
-
-‘g’     (‘magit-refresh’)
-
-     This command refreshes the current buffer if its major mode derives
-     from ‘magit-mode’ as well as the corresponding status buffer.
-
-     If the option ‘magit-revert-buffers’ calls for it, then it also
-     reverts all unmodified buffers that visit files being tracked in
-     the current repository.
-
-‘G’     (‘magit-refresh-all’)
-
-     This command refreshes all Magit buffers belonging to the current
-     repository and also reverts all unmodified buffers that visit files
-     being tracked in the current repository.
-
-     The file-visiting buffers are always reverted, even if
-     ‘magit-revert-buffers’ is nil.
-
- -- User Option: magit-refresh-buffer-hook
-
-     This hook is run in each Magit buffer that was refreshed during the
-     current refresh - normally the current buffer and the status
-     buffer.
-
- -- User Option: magit-refresh-status-buffer
-
-     When this option is non-nil, then the status buffer is
-     automatically refreshed after running git for side-effects, in
-     addition to the current Magit buffer, which is always refreshed
-     automatically.
-
-     Only set this to nil after exhausting all other options to improve
-     performance.
-
- -- Function: magit-after-save-refresh-status
-
-     This function is intended to be added to ‘after-save-hook’.  After
-     doing that the corresponding status buffer is refreshed whenever a
-     buffer is saved to a file inside a repository.
-
-     Note that refreshing a Magit buffer is done by re-creating its
-     contents from scratch, which can be slow in large repositories.  If
-     you are not satisfied with Magit’s performance, then you should
-     obviously not add this function to that hook.
-
-
-File: magit.info,  Node: Automatic Saving of File-Visiting Buffers,  Next: Automatic Reverting of File-Visiting Buffers,  Prev: Automatic Refreshing of Magit Buffers,  Up: Modes and Buffers
-
-4.1.5 Automatic Saving of File-Visiting Buffers
------------------------------------------------
-
-File-visiting buffers are by default saved at certain points in time.
-This doesn’t guarantee that Magit buffers are always up-to-date, but,
-provided one only edits files by editing them in Emacs and uses only
-Magit to interact with Git, one can be fairly confident.  When in doubt
-or after outside changes, type ‘g’ (‘magit-refresh’) to save and refresh
-explicitly.
-
- -- User Option: magit-save-repository-buffers
-
-     This option controls whether file-visiting buffers are saved before
-     certain events.
-
-     If this is non-nil then all modified file-visiting buffers
-     belonging to the current repository may be saved before running
-     commands, before creating new Magit buffers, and before explicitly
-     refreshing such buffers.  If this is ‘dontask’ then this is done
-     without user intervention.  If it is ‘t’ then the user has to
-     confirm each save.
-
-
-File: magit.info,  Node: Automatic Reverting of File-Visiting Buffers,  Prev: Automatic Saving of File-Visiting Buffers,  Up: Modes and Buffers
-
-4.1.6 Automatic Reverting of File-Visiting Buffers
---------------------------------------------------
-
-By default Magit automatically reverts buffers that are visiting files
-that are being tracked in a Git repository, after they have changed on
-disk.  When using Magit one often changes files on disk by running git,
-i.e.  "outside Emacs", making this a rather important feature.
-
-   For example, if you discard a change in the status buffer, then that
-is done by running ‘git apply --reverse ...’, and Emacs considers the
-file to have "changed on disk".  If Magit did not automatically revert
-the buffer, then you would have to type ‘M-x revert-buffer RET RET’ in
-the visiting buffer before you could continue making changes.
-
- -- User Option: magit-auto-revert-mode
-
-     When this mode is enabled, then buffers that visit tracked files,
-     are automatically reverted after the visited files changed on disk.
-
- -- User Option: global-auto-revert-mode
-
-     When this mode is enabled, then any file-visiting buffer is
-     automatically reverted after the visited file changed on disk.
-
-     If you like buffers that visit tracked files to be automatically
-     reverted, then you might also like any buffer to be reverted, not
-     just those visiting tracked files.  If that is the case, then
-     enable this mode _instead of_ ‘magit-auto-revert-mode’.
-
- -- User Option: magit-auto-revert-immediately
-
-     This option controls whether Magit reverts buffers immediately.
-
-     If this is non-nil and either ‘global-auto-revert-mode’ or
-     ‘magit-auto-revert-mode’ is enabled, then Magit immediately reverts
-     buffers by explicitly calling ‘auto-revert-buffers’ after running
-     git for side-effects.
-
-     If ‘auto-revert-use-notify’ is non-nil (and file notifications are
-     actually supported), then ‘magit-auto-revert-immediately’ does not
-     have to be non-nil, because the reverts happen immediately anyway.
-
-     If ‘magit-auto-revert-immediately’ and ‘auto-revert-use-notify’ are
-     both ‘nil’, then reverts happen after ‘auto-revert-interval’
-     seconds of user inactivity.  That is not desirable.
-
- -- User Option: auto-revert-use-notify
-
-     This option controls whether file notification functions should be
-     used.  Note that this variable unfortunately defaults to ‘t’ even
-     on systems on which file notifications cannot be used.
-
- -- User Option: magit-auto-revert-tracked-only
-
-     This option controls whether ‘magit-auto-revert-mode’ only reverts
-     tracked files or all files that are located inside Git
-     repositories, including untracked files and files located inside
-     Git’s control directory.
-
- -- Command: auto-revert-mode
-
-     The global mode ‘magit-auto-revert-mode’ works by turning on this
-     local mode in the appropriate buffers (but
-     ‘global-auto-revert-mode’ is implemented differently).  You can
-     also turn it on or off manually, which might be necessary if Magit
-     does not notice that a previously untracked file now is being
-     tracked or vice-versa.
-
- -- User Option: auto-revert-stop-on-user-input
-
-     This option controls whether the arrival of user input suspends the
-     automatic reverts for ‘auto-revert-interval’ seconds.
-
- -- User Option: auto-revert-interval
-
-     This option controls for how many seconds Emacs waits before
-     resuming suspended reverts.
-
- -- User Option: auto-revert-buffer-list-filter
-
-     This option specifies an additional filter used by
-     ‘auto-revert-buffers’ to determine whether a buffer should be
-     reverted or not.
-
-     This option is provided by ‘magit’, which also redefines
-     ‘auto-revert-buffers’ to respect it.  Magit users who do not turn
-     on the local mode ‘auto-revert-mode’ themselves, are best served by
-     setting the value to ‘magit-auto-revert-repository-buffers-p’.
-
-     However the default is nil, to not disturb users who do use the
-     local mode directly.  If you experience delays when running Magit
-     commands, then you should consider using one of the predicates
-     provided by Magit - especially if you also use Tramp.
-
-     Users who do turn on ‘auto-revert-mode’ in buffers in which Magit
-     doesn’t do that for them, should likely not use any filter.  Users
-     who turn on ‘global-auto-revert-mode’, do not have to worry about
-     this option, because it is disregarded if the global mode is
-     enabled.
-
- -- User Option: auto-revert-verbose
-
-     This option controls whether Emacs reports when a buffer has been
-     reverted.
-
-   The options with the ‘auto-revert-’ prefix are located in the Custom
-group named ‘auto-revert’.  The other, magit-specific, options are
-located in the ‘magit’ group.
-
-* Menu:
-
-* Risk of Reverting Automatically::
-
-
-File: magit.info,  Node: Risk of Reverting Automatically,  Up: Automatic Reverting of File-Visiting Buffers
-
-Risk of Reverting Automatically
-...............................
-
-For the vast majority users automatically reverting file-visiting
-buffers after they have changed on disk is harmless.
-
-   If a buffer is modified (i.e.  it contains changes that haven’t been
-saved yet), then Emacs would refuse to automatically revert it.  If you
-save a previously modified buffer, then that results in what is seen by
-Git as an uncommitted change.  Git would then refuse to carry out any
-commands that would cause these changes to be lost.  In other words, if
-there is anything that could be lost, then either Git or Emacs would
-refuse to discard the changes.
-
-   However if you do use file-visiting buffers as a sort of ad hoc
-"staging area", then the automatic reverts could potentially cause data
-loss.  So far I have only heard from one user who uses such a workflow.
-
-   An example: You visit some file in a buffer, edit it, and save the
-changes.  Then, outside of Emacs (or at least not using Magit or by
-saving the buffer) you change the file on disk again.  At this point the
-buffer is the only place where the intermediate version still exists.
-You have saved the changes to disk, but that has since been overwritten.
-Meanwhile Emacs considers the buffer to be unmodified (because you have
-not made any changes to it since you last saved it to the visited file)
-and therefore would not object to it being automatically reverted.  At
-this point an Auto-Revert mode would kick in.  It would check whether
-the buffer is modified and since that is not the case it would revert
-it.  The intermediate version would be lost.  (Actually you could still
-get it back using the ‘undo’ command.)
-
-   If your workflow depends on Emacs preserving the intermediate version
-in the buffer, then you have to disable all Auto-Revert modes.  But
-please consider that such a workflow would be dangerous even without
-using an Auto-Revert mode, and should therefore be avoided.  If Emacs
-crashed or if you quit Emacs by mistake, then you would also lose the
-buffer content.  There would be no autosave file still containing the
-intermediate version (because that was deleted when you saved the
-buffer) and you would not be asked whether you want to save the buffer
-(because it isn’t modified).
-
-
-File: magit.info,  Node: Sections,  Next: Popup Buffers and Prefix Commands,  Prev: Modes and Buffers,  Up: Interface Concepts
-
-4.2 Sections
-============
-
-Magit buffers are organized into nested sections, which can be collapsed
-and expanded, similar to how sections are handled in Org mode.  Each
-section also has a type, and some sections also have a value.  For each
-section type there can also be a local keymap, shared by all sections of
-that type.
-
-   Taking advantage of the section value and type, many commands operate
-on the current section, or when the region is active and selects
-sections of the same type, all of the selected sections.  Commands that
-only make sense for a particular section type (as opposed to just
-behaving differently depending on the type) are usually bound in section
-type keymaps.
-
-* Menu:
-
-* Section Movement::
-* Section Visibility::
-* Section Hooks::
-* Section Types and Values::
-* Section Options::
-
-
-File: magit.info,  Node: Section Movement,  Next: Section Visibility,  Up: Sections
-
-4.2.1 Section Movement
-----------------------
-
-To move within a section use the usual keys (‘C-p’, ‘C-n’, ‘C-b’, ‘C-f’
-etc), whose global bindings are not shadowed.  To move to another
-section use the following commands.
-
-‘p’     (‘magit-section-backward’)
-
-     When not at the beginning of a section, then move to the beginning
-     of the current section.  At the beginning of a section, instead
-     move to the beginning of the previous visible section.
-
-‘n’     (‘magit-section-forward’)
-
-     Move to the beginning of the next visible section.
-
-‘M-p’     (‘magit-section-backward-siblings’)
-
-     Move to the beginning of the previous sibling section.  If there is
-     no previous sibling section, then move to the parent section
-     instead.
-
-‘M-n’     (‘magit-section-forward-siblings’)
-
-     Move to the beginning of the next sibling section.  If there is no
-     next sibling section, then move to the parent section instead.
-
-‘^’     (‘magit-section-up’)
-
-     Move to the beginning of the parent of the current section.
-
-   The above commands all call the hook ‘magit-section-movement-hook’.
-Any of the functions listed below can be used as members of this hook.
-
- -- Variable: magit-section-movement-hook
-
-     This hook is run by all of the above movement commands, after
-     arriving at the destination.
-
- -- Function: magit-hunk-set-window-start
-
-     This hook function ensures that the beginning of the current
-     section is visible, provided it is a ‘hunk’ section.  Otherwise, it
-     does nothing.  This function is a member of the hook’s default
-     value.
-
- -- Function: magit-section-set-window-start
-
-     This hook function ensures that the beginning of the current
-     section is visible, regardless of the section’s type.  If you add
-     this to ‘magit-section-movement-hook’, then you must remove the
-     hunk-only variant in turn.
-
- -- Function: magit-log-maybe-show-more-commits
-
-     This hook function only has an effect in log buffers, and ‘point’
-     is on the "show more" section.  If that is the case, then it
-     doubles the number of commits that are being shown.  This function
-     is a member of the hook’s default value.
-
- -- Function: magit-log-maybe-update-revision-buffer
-
-     When moving inside a log buffer, then this function updates the
-     revision buffer, provided it is already being displayed in another
-     window of the same frame.  This function is a member of the hook’s
-     default value.
-
- -- Function: magit-log-maybe-update-blob-buffer
-
-     When moving inside a log buffer and another window of the same
-     frame displays a blob buffer, then this function instead displays
-     the blob buffer for the commit at point in that window.
-
- -- Function: magit-status-maybe-update-revision-buffer
-
-     When moving inside a status buffer, then this function updates the
-     revision buffer, provided it is already being displayed in another
-     window of the same frame.
-
- -- Function: magit-status-maybe-update-blob-buffer
-
-     When moving inside a status buffer and another window of the same
-     frame displays a blob buffer, then this function instead displays
-     the blob buffer for the commit at point in that window.
-
- -- User Option: magit-update-other-window-delay
-
-     Delay before automatically updating the other window.
-
-     When moving around in certain buffers, then certain other buffers,
-     which are being displayed in another window, may optionally be
-     updated to display information about the section at point.
-
-     When holding down a key to move by more than just one section, then
-     that would update that buffer for each section on the way.  To
-     prevent that, updating the revision buffer is delayed, and this
-     option controls for how long.  For optimal experience you might
-     have to adjust this delay and/or the keyboard repeat rate and delay
-     of your graphical environment or operating system.
-
-
-File: magit.info,  Node: Section Visibility,  Next: Section Hooks,  Prev: Section Movement,  Up: Sections
-
-4.2.2 Section Visibility
-------------------------
-
-Magit provides many commands for changing the visibility of sections,
-but all you need to get started are the next two.
-
-‘TAB’     (‘magit-section-toggle’)
-
-     Toggle the visibility of the body of the current section.
-
-‘C-<tab>’     (‘magit-section-cycle’)
-
-     Cycle the visibility of current section and its children.
-
-‘M-<tab>’     (‘magit-section-cycle-diffs’)
-
-     Cycle the visibility of diff-related sections in the current
-     buffer.
-
-‘S-<tab>’     (‘magit-section-cycle-global’)
-
-     Cycle the visibility of all sections in the current buffer.
-
-‘1’     (‘magit-section-show-level-1’)
-‘2’     (‘magit-section-show-level-2’)
-‘3’     (‘magit-section-show-level-3’)
-‘4’     (‘magit-section-show-level-4’)
-
-     Show sections surrounding the current section up to level N.
-
-‘M-1’     (‘magit-section-show-level-1-all’)
-‘M-2’     (‘magit-section-show-level-2-all’)
-‘M-3’     (‘magit-section-show-level-3-all’)
-‘M-4’     (‘magit-section-show-level-4-all’)
-
-     Show all sections up to level N.
-
-   Some functions, which are used to implement the above commands, are
-also exposed as commands themselves.  By default no keys are bound to
-these commands, as they are generally perceived to be much less useful.
-But your mileage may vary.
-
- -- Command: magit-section-show
-
-     Show the body of the current section.
-
- -- Command: magit-section-hide
-
-     Hide the body of the current section.
-
- -- Command: magit-section-show-headings
-
-     Recursively show headings of children of the current section.  Only
-     show the headings.  Previously shown text-only bodies are hidden.
-
- -- Command: magit-section-show-children
-
-     Recursively show the bodies of children of the current section.
-     With a prefix argument show children down to the level of the
-     current section, and hide deeper children.
-
- -- Command: magit-section-hide-children
-
-     Recursively hide the bodies of children of the current section.
-
- -- Command: magit-section-toggle-children
-
-     Toggle visibility of bodies of children of the current section.
-
-   When a buffer is first created then some sections are shown expanded
-while others are not.  This is hard coded.  When a buffer is refreshed
-then the previous visibility is preserved.  The initial visibility of
-certain sections can also be overwritten using the hook
-‘magit-section-set-visibility-hook’.
-
- -- User Option: magit-section-initial-visibility-alist
-
-     This options can be used to override the initial visibility of
-     sections.  In the future it will also be used to define the
-     defaults, but currently a section’s default is still hardcoded.
-
-     The value is an alist.  Each element maps a section type or lineage
-     to the initial visibility state for such sections.  The state has
-     to be one of ‘show’ or ‘hide’, or a function that returns one of
-     these symbols.  A function is called with the section as the only
-     argument.
-
-     Use the command ‘magit-describe-section-briefly’ to determine a
-     section’s lineage or type.  The vector in the output is the section
-     lineage and the type is the first element of that vector.
-     Wildcards can be used, see ‘magit-section-match’.
-
- -- User Option: magit-section-cache-visibility
-
-     This option controls for which sections the previous visibility
-     state should be restored if a section disappears and later appears
-     again.  The value is a boolean or a list of section types.  If t,
-     then the visibility of all sections is cached.  Otherwise this is
-     only done for sections whose type matches one of the listed types.
-
-     This requires that the function ‘magit-section-cached-visibility’
-     is a member of ‘magit-section-set-visibility-hook’.
-
- -- Variable: magit-section-set-visibility-hook
-
-     This hook is run when first creating a buffer and also when
-     refreshing an existing buffer, and is used to determine the
-     visibility of the section currently being inserted.
-
-     Each function is called with one argument, the section being
-     inserted.  It should return ‘hide’ or ‘show’, or to leave the
-     visibility undefined ‘nil’.  If no function decides on the
-     visibility and the buffer is being refreshed, then the visibility
-     is preserved; or if the buffer is being created, then the hard
-     coded default is used.
-
-     Usually this should only be used to set the initial visibility but
-     not during refreshes.  If ‘magit-insert-section--oldroot’ is
-     non-nil, then the buffer is being refreshed and these functions
-     should immediately return ‘nil’.
-
-
-File: magit.info,  Node: Section Hooks,  Next: Section Types and Values,  Prev: Section Visibility,  Up: Sections
-
-4.2.3 Section Hooks
--------------------
-
-Which sections are inserted into certain buffers is controlled with
-hooks.  This includes the status and the refs buffers.  For other
-buffers, e.g.  log and diff buffers, this is not possible.  The command
-‘magit-describe-section’ can be used to see which hook (if any) was
-responsible for inserting the section at point.
-
-   For buffers whose sections can be customized by the user, a hook
-variable called ‘magit-TYPE-sections-hook’ exists.  This hook should be
-changed using ‘magit-add-section-hook’.  Avoid using ‘add-hooks’ or the
-Custom interface.
-
-   The various available section hook variables are described later in
-this manual along with the appropriate "section inserter functions".
-
- -- Function: magit-add-section-hook hook function &optional at append
-          local
-
-     Add the function FUNCTION to the value of section hook HOOK.
-
-     Add FUNCTION at the beginning of the hook list unless optional
-     APPEND is non-nil, in which case FUNCTION is added at the end.  If
-     FUNCTION already is a member then move it to the new location.
-
-     If optional AT is non-nil and a member of the hook list, then add
-     FUNCTION next to that instead.  Add before or after AT, or replace
-     AT with FUNCTION depending on APPEND.  If APPEND is the symbol
-     ‘replace’, then replace AT with FUNCTION.  For any other non-nil
-     value place FUNCTION right after AT.  If nil, then place FUNCTION
-     right before AT.  If FUNCTION already is a member of the list but
-     AT is not, then leave FUNCTION where ever it already is.
-
-     If optional LOCAL is non-nil, then modify the hook’s buffer-local
-     value rather than its global value.  This makes the hook local by
-     copying the default value.  That copy is then modified.
-
-     HOOK should be a symbol.  If HOOK is void, it is first set to nil.
-     HOOK’s value must not be a single hook function.  FUNCTION should
-     be a function that takes no arguments and inserts one or multiple
-     sections at point, moving point forward.  FUNCTION may choose not
-     to insert its section(s), when doing so would not make sense.  It
-     should not be abused for other side-effects.
-
-   To remove a function from a section hook, use ‘remove-hook’.
-
-
-File: magit.info,  Node: Section Types and Values,  Next: Section Options,  Prev: Section Hooks,  Up: Sections
-
-4.2.4 Section Types and Values
-------------------------------
-
-Each section has a type, for example ‘hunk’, ‘file’, and ‘commit’.
-Instances of certain section types also have a value.  The value of a
-section of type ‘file’, for example, is a file name.
-
-   Users usually do not have to worry about a section’s type and value,
-but knowing them can be handy at times.
-
-‘M-x magit-describe-section-briefly’     (‘magit-describe-section-briefly’)
-
-     Show information about the section at point in the echo area, as
-     "#<magit-section VALUE [TYPE PARENT-TYPE...] BEGINNING-END>".
-
-   Many commands behave differently depending on the type of the section
-at point and/or somehow consume the value of that section.  But that is
-only one of the reasons why the same key may do something different,
-depending on what section is current.
-
-   Additionally for each section type a keymap *might* be defined, named
-‘magit-TYPE-section-map’.  That keymap is used as text property keymap
-of all text belonging to any section of the respective type.  If such a
-map does not exist for a certain type, then you can define it yourself,
-and it will automatically be used.
-
-
-File: magit.info,  Node: Section Options,  Prev: Section Types and Values,  Up: Sections
-
-4.2.5 Section Options
----------------------
-
-This section describes options that have an effect on more than just a
-certain type of sections.  As you can see there are not many of those.
-
- -- User Option: magit-section-show-child-count
-
-     Whether to append the number of children to section headings.  This
-     only affects sections that could benefit from this information.
-
-
-File: magit.info,  Node: Popup Buffers and Prefix Commands,  Next: Completion Confirmation and the Selection,  Prev: Sections,  Up: Interface Concepts
-
-4.3 Popup Buffers and Prefix Commands
-=====================================
-
-Many Magit commands are implemented using *popup buffers*.  First the
-user invokes a *popup* or *prefix* command, which causes a popup buffer
-with the available *infix* arguments and *suffix* commands to be
-displayed.  The user then optionally toggles/sets some arguments and
-finally invokes one of the suffix commands.
-
-   This is implemented in the library ‘magit-popup’.  Earlier releases
-used the library ‘magit-key-mode’.  A future release will switch to a
-yet-to-be-written successor, which will likely be named ‘transient’.
-
-   Because ‘magit-popup’ can also be used by other packages without
-having to depend on all of Magit, it is documented in its own manual.
-See *note (magit-popup)Top::.
-
-‘C-c C-c’     (‘magit-dispatch-popup’)
-
-     This popup command shows a buffer featuring all other Magit popup
-     commands as well as some other commands that are not popup commands
-     themselves.
-
-   This command is also, or especially, useful outside Magit buffers, so
-you should setup a global binding:
-
-     (global-set-key (kbd "C-x M-g") 'magit-dispatch-popup)
-
-   Most popups set their initial arguments according to the
-corresponding ‘magit-*-arguments’ variable.  Two popups, the log and
-diff popups (see *note Logging:: and *note Diffing::), may behave a bit
-differently, depending on the value of ‘magit-use-sticky-arguments’.
-
- -- User Option: magit-use-sticky-arguments
-
-     This option controls how diff and log commands reuse arguments from
-     existing buffers.
-
-     When ‘t’ (the default value), the log or diff popup reuses the
-     arguments from the current repository’s log or diff buffer,
-     respectively.  When no log or diff buffer exists for the current
-     repository, these popups use the default value of
-     ‘magit-log-arguments’ or ‘magit-diff-arguments’.
-
-     When ‘current’, log and diff popups will only reuse the arguments
-     if the current buffer is derived from ‘magit-log-mode’ or
-     ‘magit-diff-mode’, respectively.
-
-     When ‘nil’, the default value of ‘magit-log-arguments’ or
-     ‘magit-diff-arguments’ is always used.
-
-
-File: magit.info,  Node: Completion Confirmation and the Selection,  Next: Running Git,  Prev: Popup Buffers and Prefix Commands,  Up: Interface Concepts
-
-4.4 Completion, Confirmation and the Selection
-==============================================
-
-* Menu:
-
-* Action Confirmation::
-* Completion and Confirmation::
-* The Selection::
-* The hunk-internal region::
-* Support for Completion Frameworks::
-* Additional Completion Options::
-
-
-File: magit.info,  Node: Action Confirmation,  Next: Completion and Confirmation,  Up: Completion Confirmation and the Selection
-
-4.4.1 Action Confirmation
--------------------------
-
-By default many actions that could potentially lead to data loss have to
-be confirmed.  This includes many very common actions, so this can
-quickly become annoying.  Many of these actions can be undone and if you
-have thought about how to undo certain mistakes, then it should be safe
-to disable confirmation for the respective actions.
-
-   The option ‘magit-no-confirm’ can be used to tell Magit to perform
-certain actions without the user having to confirm them.  Note that
-while this option can only be used to disable confirmation for a
-specific set of actions, the next section explains another way of
-telling Magit to ask fewer questions.
-
- -- User Option: magit-no-confirm
-
-     The value of this option is a list of symbols, representing actions
-     that do not have to be confirmed by the user before being carried
-     out.
-
-     By default many potentially dangerous commands ask the user for
-     confirmation.  Each of the below symbols stands for an action
-     which, when invoked unintentionally or without being fully aware of
-     the consequences, could lead to tears.  In many cases there are
-     several commands that perform variations of a certain action, so we
-     don’t use the command names but more generic symbols.
-
-        • Applying changes:
-
-             • ‘discard’ Discarding one or more changes (i.e.  hunks or
-               the complete diff for a file) loses that change,
-               obviously.
-
-             • ‘reverse’ Reverting one or more changes can usually be
-               undone by reverting the reversion.
-
-             • ‘stage-all-changes’, ‘unstage-all-changes’ When there are
-               both staged and unstaged changes, then un-/staging
-               everything would destroy that distinction.  Of course
-               that also applies when un-/staging a single change, but
-               then less is lost and one does that so often that having
-               to confirm every time would be unacceptable.
-
-        • Files:
-
-             • ‘delete’ When a file that isn’t yet tracked by Git is
-               deleted, then it is completely lost, not just the last
-               changes.  Very dangerous.
-
-             • ‘trash’ Instead of deleting a file it can also be move to
-               the system trash.  Obviously much less dangerous than
-               deleting it.
-
-               Also see option ‘magit-delete-by-moving-to-trash’.
-
-             • ‘resurrect’ A deleted file can easily be resurrected by
-               "deleting" the deletion, which is done using the same
-               command that was used to delete the same file in the
-               first place.
-
-             • ‘untrack’ Untracking a file can be undone by tracking it
-               again.
-
-             • ‘rename’ Renaming a file can easily be undone.
-
-        • Sequences:
-
-             • ‘reset-bisect’ Aborting (known to Git as "resetting") a
-               bisect operation loses all information collected so far.
-
-             • ‘abort-rebase’ Aborting a rebase throws away all already
-               modified commits, but it’s possible to restore those from
-               the reflog.
-
-             • ‘abort-merge’ Aborting a merge throws away all conflict
-               resolutions which have already been carried out by the
-               user.
-
-             • ‘merge-dirty’ Merging with a dirty worktree can make it
-               hard to go back to the state before the merge was
-               initiated.
-
-        • References:
-
-             • ‘delete-unmerged-branch’ Once a branch has been deleted,
-               it can only be restored using low-level recovery tools
-               provided by Git.  And even then the reflog is gone.  The
-               user always has to confirm the deletion of a branch by
-               accepting the default choice (or selecting another
-               branch), but when a branch has not been merged yet, also
-               make sure the user is aware of that.
-
-             • ‘delete-pr-branch’ When deleting a branch that was
-               created from a pull request and if no other branches
-               still exist on that remote, then ‘magit-branch-delete’
-               offers to delete the remote as well.  This should be safe
-               because it only happens if no other refs exist in the
-               remotes namespace, and you can recreate the remote if
-               necessary.
-
-             • ‘drop-stashes’ Dropping a stash is dangerous because Git
-               stores stashes in the reflog.  Once a stash is removed,
-               there is no going back without using low-level recovery
-               tools provided by Git.  When a single stash is dropped,
-               then the user always has to confirm by accepting the
-               default (or selecting another).  This action only
-               concerns the deletion of multiple stashes at once.
-
-        • Edit published history:
-
-          Without adding these symbols here, you will be warned before
-          editing commits that have already been pushed to one of the
-          branches listed in ‘magit-published-branches’.
-
-             • ‘amend-published’ Affects most commands that amend to
-               "HEAD".
-
-             • ‘rebase-published’ Affects commands that perform
-               interactive rebases.  This includes commands from the
-               commit popup that modify a commit other than "HEAD",
-               namely the various fixup and squash variants.
-
-             • ‘edit-published’ Affects the commands
-               ‘magit-edit-line-commit’ and
-               ‘magit-diff-edit-hunk-commit’.  These two commands make
-               it quite easy to accidentally edit a published commit, so
-               you should think twice before configuring them not to ask
-               for confirmation.
-
-          To disable confirmation completely, add all three symbols here
-          or set ‘magit-published-branches’ to ‘nil’.
-
-        • Various:
-
-             • ‘kill-process’ There seldom is a reason to kill a
-               process.
-
-        • Global settings:
-
-          Instead of adding all of the above symbols to the value of
-          this option, you can also set it to the atom ‘t’, which has
-          the same effect as adding all of the above symbols.  Doing
-          that most certainly is a bad idea, especially because other
-          symbols might be added in the future.  So even if you don’t
-          want to be asked for confirmation for any of these actions,
-          you are still better of adding all of the respective symbols
-          individually.
-
-          When ‘magit-wip-before-change-mode’ is enabled, then the
-          following actions can be undone fairly easily: ‘discard’,
-          ‘reverse’, ‘stage-all-changes’, and ‘unstage-all-changes’.  If
-          and only if this mode is enabled, then ‘safe-with-wip’ has the
-          same effect as adding all of these symbols individually.
-
-
-File: magit.info,  Node: Completion and Confirmation,  Next: The Selection,  Prev: Action Confirmation,  Up: Completion Confirmation and the Selection
-
-4.4.2 Completion and Confirmation
----------------------------------
-
-Many Magit commands ask the user to select from a list of possible
-things to act on, while offering the most likely choice as the default.
-For many of these commands the default is the thing at point, provided
-that it actually is a valid thing to act on.  For many commands that act
-on a branch, the current branch serves as the default if there is no
-branch at point.
-
-   These commands combine asking for confirmation and asking for a
-target to act on into a single action.  The user can confirm the default
-target using ‘RET’ or abort using ‘C-g’.  This is similar to a
-‘y-or-n-p’ prompt, but the keys to confirm or abort differ.
-
-   At the same time the user is also given the opportunity to select
-another target, which is useful because for some commands and/or in some
-situations you might want to select the action before selecting the
-target by moving to it.
-
-   However you might find that for some commands you always want to use
-the default target, if any, or even that you want the command to act on
-the default without requiring any confirmation at all.  The option
-‘magit-dwim-selection’ can be used to configure certain commands to that
-effect.
-
-   Note that when the region is active then many commands act on the
-things that are selected using a mechanism based on the region, in many
-cases after asking for confirmation.  This region-based mechanism is
-called the "selection" and is described in detail in the next section.
-When a selection exists that is valid for the invoked command, then that
-command never offers to act on something else, and whether it asks for
-confirmation is not controlled by this option.
-
-   Also note that Magit asks for confirmation of certain actions that
-are not coupled with completion (or the selection).  Such dialogs are
-also not affected by this option and are described in the previous
-section.
-
- -- User Option: magit-dwim-selection
-
-   This option can be used to tell certain commands to use the thing at
-point instead of asking the user to select a candidate to act on, with
-or without confirmation.
-
-   The value has the form ‘((COMMAND nil|PROMPT DEFAULT)...)’.
-
-   • COMMAND is the command that should not prompt for a choice.  To
-     have an effect, the command has to use the function
-     ‘magit-completing-read’ or a utility function which in turn uses
-     that function.
-
-   • If the command uses ‘magit-completing-read’ multiple times, then
-     PROMPT can be used to only affect one of these uses.  PROMPT, if
-     non-nil, is a regular expression that is used to match against the
-     PROMPT argument passed to ‘magit-completing-read’.
-
-   • DEFAULT specifies how to use the default.  If it is ‘t’, then the
-     DEFAULT argument passed to ‘magit-completing-read’ is used without
-     confirmation.  If it is ‘ask’, then the user is given a chance to
-     abort.  DEFAULT can also be ‘nil’, in which case the entry has no
-     effect.
-
-
-File: magit.info,  Node: The Selection,  Next: The hunk-internal region,  Prev: Completion and Confirmation,  Up: Completion Confirmation and the Selection
-
-4.4.3 The Selection
--------------------
-
-If the region is active, then many Magit commands act on the things that
-are selected using a mechanism based on the region instead of one single
-thing.  When the region is not active, then these commands act on the
-thing at point or read a single thing to act on.  This is described in
-the previous section — this section only covers how multiple things are
-selected, how that is visualized, and how certain commands behave when
-that is the case.
-
-   Magit’s mechanism for selecting multiple things, or rather sections
-that represent these things, is based on the Emacs region, but the area
-that Magit considers to be selected is typically larger than the region
-and additional restrictions apply.
-
-   Magit makes a distinction between a region that qualifies as forming
-a valid Magit selection and a region that does not.  If the region does
-not qualify, then it is displayed as it is in other Emacs buffers.  If
-the region does qualify as a Magit selection, then the selection is
-always visualized, while the region itself is only visualized if it
-begins and ends on the same line.
-
-   For a region to qualify as a Magit selection, it must begin in the
-heading of one section and end in the heading of a sibling section.
-Note that if the end of the region is at the very beginning of section
-heading (i.e.  at the very beginning of a line) then that section is
-considered to be *inside* the selection.
-
-   This is not consistent with how the region is normally treated in
-Emacs — if the region ends at the beginning of a line, then that line is
-outside the region.  Due to how Magit visualizes the selection, it
-should be obvious that this difference exists.
-
-   Not every command acts on every valid selection.  Some commands do
-not even consider the location of point, others may act on the section
-at point but not support acting on the selection, and even commands that
-do support the selection of course only do so if it selects things that
-they can act on.
-
-   This is the main reason why the selection must include the section at
-point.  Even if a selection exists, the invoked command may disregard
-it, in which case it may act on the current section only.  It is much
-safer to only act on the current section but not the other selected
-sections than it is to act on the current section *instead* of the
-selected sections.  The latter would be much more surprising and if the
-current section always is part of the selection, then that cannot
-happen.
-
- -- Variable: magit-keep-region-overlay
-
-     This variable controls whether the region is visualized as usual
-     even when a valid Magit selection or a hunk-internal region exists.
-     See the doc-string for more information.
-
-
-File: magit.info,  Node: The hunk-internal region,  Next: Support for Completion Frameworks,  Prev: The Selection,  Up: Completion Confirmation and the Selection
-
-4.4.4 The hunk-internal region
-------------------------------
-
-Somewhat related to the Magit selection described in the previous
-section is the hunk-internal region.
-
-   Like the selection, the hunk-internal region is based on the Emacs
-region but causes that region to not be visualized as it would in other
-Emacs buffers, and includes the line on which the region ends even if it
-ends at the very beginning of that line.
-
-   Unlike the selection, which is based on a region that must begin in
-the heading of one section and ends in the section of a sibling section,
-the hunk-internal region must begin inside the *body* of a hunk section
-and end in the body of the *same* section.
-
-   The hunk-internal region is honored by "apply" commands, which can,
-among other targets, act on a hunk.  If the hunk-internal region is
-active, then such commands act only on the marked part of the hunk
-instead of on the complete hunk.
-
-
-File: magit.info,  Node: Support for Completion Frameworks,  Next: Additional Completion Options,  Prev: The hunk-internal region,  Up: Completion Confirmation and the Selection
-
-4.4.5 Support for Completion Frameworks
----------------------------------------
-
-The built-in option ‘completing-read-function’ specifies the low-level
-function used by ‘completing-read’ to ask a user to select from a list
-of choices.  Its default value is ‘completing-read-default’.
-Alternative completion frameworks typically activate themselves by
-substituting their own implementation.
-
-   Mostly for historic reasons Magit provides a similar option named
-‘magit-completing-read-function’, which only controls the low-level
-function used by ‘magit-completing-read’.  This option also makes it
-possible to use a different completing mechanism for Magit than for the
-rest of Emacs, but doing that is not recommend.
-
-   You most likely don’t have to customize the magit-specific option to
-use an alternative completion framework.  For example, if you enable
-‘ivy-mode’, then Magit will respect that, and if you enable ‘helm-mode’,
-then you are done too.
-
-   However if you want to use Ido, then ‘ido-mode’ won’t do the trick.
-You will also have to install the ‘ido-completing-read+’ package and use
-‘magit-ido-completing-read’ as ‘magit-completing-read-function’.
-
- -- User Option: magit-completing-read-function
-
-     The value of this variable is the low-level function used to
-     perform completion by code that uses ‘magit-completing-read’ (as
-     opposed to the built-in ‘completing-read’).
-
-     The default value, ‘magit-builtin-completing-read’, is suitable for
-     the standard completion mechanism, ‘ivy-mode’, and ‘helm-mode’ at
-     least.
-
-     The built-in ‘completing-read’ and ‘completing-read-default’ are
-     *not* suitable to be used here.  ‘magit-builtin-completing-read’
-     performs some additional work, and any function used in its place
-     has to do the same.
-
- -- Function: magit-builtin-completing-read prompt choices &optional
-          predicate require-match initial-input hist def
-
-     This function performs completion using the built-in
-     ‘completion-read’ and does some additional magit-specific work.
-
- -- Function: magit-ido-completing-read prompt choices &optional
-          predicate require-match initial-input hist def
-
-     This function performs completion using ‘ido-completing-read+’ from
-     the package by the same name (which you have to explicitly install)
-     and does some additional magit-specific work.
-
-     We have to use ‘ido-completing-read+’ instead of the
-     ‘ido-completing-read’ that comes with Ido itself, because the
-     latter, while intended as a drop-in replacement, cannot serve that
-     purpose because it violates too many of the implicit conventions.
-
- -- Function: magit-completing-read prompt choices &optional predicate
-          require-match initial-input hist def fallback
-
-     This is the function that Magit commands use when they need the
-     user to select a single thing to act on.  The arguments have the
-     same meaning as for ‘completing-read’, except for FALLBACK, which
-     is unique to this function and is described below.
-
-     Instead of asking the user to choose from a list of possible
-     candidates, this function may just return the default specified by
-     DEF, with or without requiring user confirmation.  Whether that is
-     the case depends on PROMPT, ‘this-command’ and
-     ‘magit-dwim-selection’.  See the documentation of the latter for
-     more information.
-
-     If it does read a value in the minibuffer, then this function acts
-     similar to ‘completing-read’, except for the following:
-
-        • If REQUIRE-MATCH is ‘nil’ and the user exits without a choice,
-          then ‘nil’ is returned instead of an empty string.
-
-        • If REQUIRE-MATCH is non-nil and the users exits without a
-          choice, an user-error is raised.
-
-        • FALLBACK specifies a secondary default that is only used if
-          the primary default DEF is ‘nil’.  The secondary default is
-          not subject to ‘magit-dwim-selection’ — if DEF is ‘nil’ but
-          FALLBACK is not, then this function always asks the user to
-          choose a candidate, just as if both defaults were ‘nil’.
-
-        • ": " is appended to PROMPT.
-
-        • PROMPT is modified to end with \" (default DEF|FALLBACK): \"
-          provided that DEF or FALLBACK is non-nil, that neither
-          ‘ivy-mode’ nor ‘helm-mode’ is enabled, and that
-          ‘magit-completing-read-function’ is set to its default value
-          of ‘magit-builtin-completing-read’.
-
-
-File: magit.info,  Node: Additional Completion Options,  Prev: Support for Completion Frameworks,  Up: Completion Confirmation and the Selection
-
-4.4.6 Additional Completion Options
------------------------------------
-
- -- User Option: magit-list-refs-sortby
-
-     For many commands that read a ref or refs from the user, the value
-     of this option can be used to control the order of the refs.  Valid
-     values include any key accepted by the ‘--sort’ flag of ‘git
-     for-each-ref’.  By default, refs are sorted alphabetically by their
-     full name (e.g., "refs/heads/master").
-
-
-File: magit.info,  Node: Running Git,  Prev: Completion Confirmation and the Selection,  Up: Interface Concepts
-
-4.5 Running Git
-===============
-
-* Menu:
-
-* Viewing Git Output::
-* Git Process Status::
-* Running Git Manually::
-* Git Executable::
-* Global Git Arguments::
-
-
-File: magit.info,  Node: Viewing Git Output,  Next: Git Process Status,  Up: Running Git
-
-4.5.1 Viewing Git Output
-------------------------
-
-Magit runs Git either for side-effects (e.g.  when pushing) or to get
-some value (e.g.  the name of the current branch).
-
-   When Git is run for side-effects, the process output is logged in a
-per-repository log buffer, which can be consulted using the
-‘magit-process’ command when things don’t go as expected.
-
-   The output/errors for up to ‘magit-process-log-max’ Git commands are
-retained.
-
-‘$’     (‘magit-process’)
-
-     This commands displays the process buffer for the current
-     repository.
-
-   Inside that buffer, the usual key bindings for navigating and showing
-sections are available.  There is one additional command.
-
-‘k’     (‘magit-process-kill’)
-
-     This command kills the process represented by the section at point.
-
- -- User Option: magit-git-debug
-
-     When this is non-nil then the output of all calls to git are logged
-     in the process buffer.  This is useful when debugging, otherwise it
-     just negatively affects performance.
-
-
-File: magit.info,  Node: Git Process Status,  Next: Running Git Manually,  Prev: Viewing Git Output,  Up: Running Git
-
-4.5.2 Git Process Status
-------------------------
-
-When a Git process is running for side-effects, Magit displays an
-indicator in the mode line, using the ‘magit-mode-line-process’ face.
-
-   If the Git process exits successfully, the process indicator is
-removed from the mode line immediately.
-
-   In the case of a Git error, the process indicator is not removed, but
-is instead highlighted with the ‘magit-mode-line-process-error’ face,
-and the error details from the process buffer are provided as a tooltip
-for mouse users.  This error indicator persists in the mode line until
-the next magit buffer refresh.
-
-   If you do not wish process errors to be indicated in the mode line,
-customize the ‘magit-process-display-mode-line-error’ user option.
-
-   Process errors are additionally indicated at the top of the status
-buffer.
-
-
-File: magit.info,  Node: Running Git Manually,  Next: Git Executable,  Prev: Git Process Status,  Up: Running Git
-
-4.5.3 Running Git Manually
---------------------------
-
-While Magit provides many Emacs commands to interact with Git, it does
-not cover everything.  In those cases your existing Git knowledge will
-come in handy.  Magit provides some commands for running arbitrary Git
-commands by typing them into the minibuffer, instead of having to switch
-to a shell.
-
-‘!’     (‘magit-run-popup’)
-
-     Shows the popup buffer featuring the below suffix commands.
-
-‘! !’     (‘magit-git-command-topdir’)
-
-     This command reads a command from the user and executes it in the
-     top-level directory of the current working tree.
-
-     The string "git " is used as initial input when prompting the user
-     for the command.  It can be removed to run another command.
-
-‘! p’     (‘magit-git-command’)
-
-     This command reads a command from the user and executes it in
-     ‘default-directory’.  With a prefix argument the command is
-     executed in the top-level directory of the current working tree
-     instead.
-
-     The string "git " is used as initial input when prompting the user
-     for the command.  It can be removed to run another command.
-
-‘! s’     (‘magit-shell-command-topdir’)
-
-     This command reads a command from the user and executes it in the
-     top-level directory of the current working tree.
-
-‘! S’     (‘magit-shell-command’)
-
-     This command reads a command from the user and executes it in
-     ‘default-directory’.  With a prefix argument the command is
-     executed in the top-level directory of the current working tree
-     instead.
-
- -- User Option: magit-shell-command-verbose-prompt
-
-     Whether the prompt, used by the the above commands when reading a
-     shell command, shows the directory in which it will be run.
-
-   These suffix commands start external gui tools.
-
-‘! k’     (‘magit-run-gitk’)
-
-     This command runs ‘gitk’ in the current repository.
-
-‘! a’     (‘magit-run-gitk-all’)
-
-     This command runs ‘gitk --all’ in the current repository.
-
-‘! b’     (‘magit-run-gitk-branches’)
-
-     This command runs ‘gitk --branches’ in the current repository.
-
-‘! g’     (‘magit-run-git-gui’)
-
-     This command runs ‘git gui’ in the current repository.
-
-
-File: magit.info,  Node: Git Executable,  Next: Global Git Arguments,  Prev: Running Git Manually,  Up: Running Git
-
-4.5.4 Git Executable
---------------------
-
-Except on MS Windows, Magit defaults to running Git without specifying
-the path to the git executable.  Instead the first executable found by
-Emacs on ‘exec-path’ is used (whose value in turn is set based on the
-value of the environment variable ‘$PATH’ when Emacs was started).
-
-   This has the advantage that it continues to work even when using
-Tramp to connect to a remote machine on which the executable is found in
-a different place.  The downside is that if you have multiple versions
-of Git installed, then you might end up using another version than the
-one you think you are using.
-
-‘M-x magit-version’     (‘magit-version’)
-
-     This command shows the currently used versions of Magit, Git, and
-     Emacs in the echo area.  Non-interactively this just returns the
-     Magit version.
-
-   When the ‘system-type’ is ‘windows-nt’, then ‘magit-git-executable’
-is set to an absolute path when Magit is first loaded.  This is
-necessary because Git on that platform comes with several wrapper
-scripts for the actual git binary, which are also placed on ‘$PATH’, and
-using one of these wrappers instead of the binary would degrade
-performance horribly.
-
-   If Magit doesn’t find the correct executable then you *can* work
-around that by setting ‘magit-git-executable’ to an absolute path.  But
-note that doing so is a kludge.  It is better to make sure the order in
-the environment variable ‘$PATH’ is correct, and that Emacs is started
-with that environment in effect.  The command
-‘magit-debug-git-executable’ can be useful to find out where Emacs is
-searching for git.  If you have to connect from Windows to a non-Windows
-machine, then you must change the value to "git".
-
- -- User Option: magit-git-executable
-
-     The git executable used by Magit, either the full path to the
-     executable or the string "git" to let Emacs find the executable
-     itself, using the standard mechanism for doing such things.
-
-‘M-x magit-debug-git-executable’     (‘magit-debug-git-executable’)
-
-     Display a buffer with information about ‘magit-git-executable’.
-
-
-File: magit.info,  Node: Global Git Arguments,  Prev: Git Executable,  Up: Running Git
-
-4.5.5 Global Git Arguments
---------------------------
-
- -- User Option: magit-git-global-arguments
-
-     The arguments set here are used every time the git executable is
-     run as a subprocess.  They are placed right after the executable
-     itself and before the git command - as in ‘git HERE... COMMAND
-     REST’.  For valid arguments see *note (gitman)git::.
-
-     Be careful what you add here, especially if you are using Tramp to
-     connect to servers with ancient Git versions.  Never remove
-     anything that is part of the default value, unless you really know
-     what you are doing.  And think very hard before adding something;
-     it will be used every time Magit runs Git for any purpose.
-
-
-File: magit.info,  Node: Inspecting,  Next: Manipulating,  Prev: Interface Concepts,  Up: Top
-
-5 Inspecting
-************
-
-The functionality provided by Magit can be roughly divided into three
-groups: inspecting existing data, manipulating existing data or adding
-new data, and transferring data.  Of course that is a rather crude
-distinction that often falls short, but it’s more useful than no
-distinction at all.  This section is concerned with inspecting data, the
-next two with manipulating and transferring it.  Then follows a section
-about miscellaneous functionality, which cannot easily be fit into this
-distinction.
-
-   Of course other distinctions make sense too, e.g.  Git’s distinction
-between porcelain and plumbing commands, which for the most part is
-equivalent to Emacs’ distinction between interactive commands and
-non-interactive functions.  All of the sections mentioned before are
-mainly concerned with the porcelain – Magit’s plumbing layer is
-described later.
-
-* Menu:
-
-* Status Buffer::
-* Repository List::
-* Logging::
-* Diffing::
-* Ediffing::
-* References Buffer::
-* Bisecting::
-* Visiting Blobs::
-* Blaming::
-
-
-File: magit.info,  Node: Status Buffer,  Next: Repository List,  Up: Inspecting
-
-5.1 Status Buffer
-=================
-
-While other Magit buffers contain e.g.  one particular diff or one
-particular log, the status buffer contains the diffs for staged and
-unstaged changes, logs for unpushed and unpulled commits, lists of
-stashes and untracked files, and information related to the current
-branch.
-
-   During certain incomplete operations – for example when a merge
-resulted in a conflict – additional information is displayed that helps
-proceeding with or aborting the operation.
-
-   The command ‘magit-status’ displays the status buffer belonging to
-the current repository in another window.  This command is used so often
-that it should be bound globally.  We recommend using ‘C-x g’:
-
-     (global-set-key (kbd "C-x g") 'magit-status)
-
-‘C-x g’     (‘magit-status’)
-
-     Show the status of the current Git repository in a buffer.  With a
-     prefix argument prompt for a repository to be shown.  With two
-     prefix arguments prompt for an arbitrary directory.  If that
-     directory isn’t the root of an existing repository, then offer to
-     initialize it as a new repository.
-
- -- User Option: magit-repository-directories
-
-     List of directories that are Git repositories or contain Git
-     repositories.
-
-     Each element has the form ‘(DIRECTORY . DEPTH)’.  DIRECTORY has to
-     be a directory or a directory file-name, a string.  DEPTH, an
-     integer, specifies the maximum depth to look for Git repositories.
-     If it is 0, then only add DIRECTORY itself.
-
- -- User Option: magit-repository-directories-depth
-
-     The maximum depth to look for Git repositories.  This option is
-     obsolete and only used for elements of the option
-     ‘magit-repository-directories’ (which see) that don’t specify the
-     depth directly.
-
- -- Command: ido-enter-magit-status
-
-     From an Ido prompt used to open a file, instead drop into
-     ‘magit-status’.  This is similar to ‘ido-magic-delete-char’, which,
-     despite its name, usually causes a Dired buffer to be created.
-
-     To make this command available, use something like:
-
-          (add-hook 'ido-setup-hook
-                    (lambda ()
-                      (define-key ido-completion-map
-                        (kbd \"C-x g\") 'ido-enter-magit-status)))
-
-     Starting with Emacs 25.1 the Ido keymaps are defined just once
-     instead of every time Ido is invoked, so now you can modify it like
-     pretty much every other keymap:
-
-          (define-key ido-common-completion-map
-            (kbd \"C-x g\") 'ido-enter-magit-status)
-
-* Menu:
-
-* Status Sections::
-* Status Header Sections::
-* Status Module Sections::
-* Status Options::
-
-
-File: magit.info,  Node: Status Sections,  Next: Status Header Sections,  Up: Status Buffer
-
-5.1.1 Status Sections
----------------------
-
-The contents of status buffers is controlled using the hook
-‘magit-status-sections-hook’.  See *note Section Hooks:: to learn about
-such hooks and how to customize them.
-
- -- User Option: magit-status-sections-hook
-
-     Hook run to insert sections into a status buffer.
-
-   The first function on that hook by default is
-‘magit-insert-status-headers’; it is described in the next section.  By
-default the following functions are also members of that hook:
-
- -- Function: magit-insert-merge-log
-
-     Insert section for the on-going merge.  Display the heads that are
-     being merged.  If no merge is in progress, do nothing.
-
- -- Function: magit-insert-rebase-sequence
-
-     Insert section for the on-going rebase sequence.  If no such
-     sequence is in progress, do nothing.
-
- -- Function: magit-insert-am-sequence
-
-     Insert section for the on-going patch applying sequence.  If no
-     such sequence is in progress, do nothing.
-
- -- Function: magit-insert-sequencer-sequence
-
-     Insert section for the on-going cherry-pick or revert sequence.  If
-     no such sequence is in progress, do nothing.
-
- -- Function: magit-insert-bisect-output
-
-     While bisecting, insert section with output from ‘git bisect’.
-
- -- Function: magit-insert-bisect-rest
-
-     While bisecting, insert section visualizing the bisect state.
-
- -- Function: magit-insert-bisect-log
-
-     While bisecting, insert section logging bisect progress.
-
- -- Function: magit-insert-untracked-files
-
-     Maybe insert a list or tree of untracked files.
-
-     Do so depending on the value of ‘status.showUntrackedFiles’.  Note
-     that even if the value is ‘all’, Magit still initially only shows
-     directories.  But the directory sections can then be expanded using
-     ‘TAB’.
-
- -- Function: magit-insert-unstaged-changes
-
-     Insert section showing unstaged changes.
-
- -- Function: magit-insert-staged-changes
-
-     Insert section showing staged changes.
-
- -- Function: magit-insert-stashes &optional ref heading
-
-     Insert the ‘stashes’ section showing reflog for "refs/stash".  If
-     optional REF is non-nil show reflog for that instead.  If optional
-     HEADING is non-nil use that as section heading instead of
-     "Stashes:".
-
- -- Function: magit-insert-unpulled-from-upstream
-
-     Insert section showing commits that haven’t been pulled from the
-     upstream branch yet.
-
- -- Function: magit-insert-unpulled-from-pushremote
-
-     Insert section showing commits that haven’t been pulled from the
-     push-remote branch yet.
-
- -- Function: magit-insert-unpushed-to-upstream
-
-     Insert section showing commits that haven’t been pushed to the
-     upstream yet.
-
- -- Function: magit-insert-unpushed-to-pushremote
-
-     Insert section showing commits that haven’t been pushed to the
-     push-remote yet.
-
-   The following functions can also be added to the above hook:
-
- -- Function: magit-insert-tracked-files
-
-     Insert a tree of tracked files.
-
- -- Function: magit-insert-ignored-files
-
-     Insert a tree of ignored files.
-
-     If the first element of ‘magit-diff-section-arguments’ is a
-     directory, then limit the list to files below that.  The value of
-     that variable can be set using ‘D = f <DIRECTORY> RET g’.
-
- -- Function: magit-insert-unpulled-or-recent-commits
-
-     Insert section showing unpulled or recent commits.  If an upstream
-     is configured for the current branch and it is ahead of the current
-     branch, then show the missing commits.  Otherwise, show the last
-     ‘magit-log-section-commit-count’ commits.
-
- -- Function: magit-insert-recent-commits
-
-     Insert section showing the last ‘magit-log-section-commit-count’
-     commits.
-
- -- User Option: magit-log-section-commit-count
-
-     How many recent commits ‘magit-insert-recent-commits’ and
-     ‘magit-insert-unpulled-or-recent-commits’ (provided there are no
-     unpulled commits) show.
-
- -- Function: magit-insert-unpulled-cherries
-
-     Insert section showing unpulled commits.  Like
-     ‘magit-insert-unpulled-commits’ but prefix each commit that has not
-     been applied yet (i.e.  a commit with a patch-id not shared with
-     any local commit) with "+", and all others with "-".
-
- -- Function: magit-insert-unpushed-cherries
-
-     Insert section showing unpushed commits.  Like
-     ‘magit-insert-unpushed-commits’ but prefix each commit which has
-     not been applied to upstream yet (i.e.  a commit with a patch-id
-     not shared with any upstream commit) with "+" and all others with
-     "-".
-
-   See *note References Buffer:: for some more section inserters, which
-could be used here.
-
-
-File: magit.info,  Node: Status Header Sections,  Next: Status Module Sections,  Prev: Status Sections,  Up: Status Buffer
-
-5.1.2 Status Header Sections
-----------------------------
-
-The contents of status buffers is controlled using the hook
-‘magit-status-sections-hook’ (see *note Status Sections::).
-
-   By default ‘magit-insert-status-headers’ is the first member of that
-hook variable.
-
- -- Function: magit-insert-status-headers
-
-     Insert headers sections appropriate for ‘magit-status-mode’
-     buffers.  The sections are inserted by running the functions on the
-     hook ‘magit-status-headers-hook’.
-
- -- User Option: magit-status-headers-hook
-
-     Hook run to insert headers sections into the status buffer.
-
-     This hook is run by ‘magit-insert-status-headers’, which in turn
-     has to be a member of ‘magit-status-sections-hook’ to be used at
-     all.
-
-   By default the following functions are members of the above hook:
-
- -- Function: magit-insert-error-header
-
-     Insert a header line showing the message about the Git error that
-     just occurred.
-
-     This function is only aware of the last error that occur when Git
-     was run for side-effects.  If, for example, an error occurs while
-     generating a diff, then that error won’t be inserted.  Refreshing
-     the status buffer causes this section to disappear again.
-
- -- Function: magit-insert-diff-filter-header
-
-     Insert a header line showing the effective diff filters.
-
- -- Function: magit-insert-head-branch-header
-
-     Insert a header line about the current branch or detached ‘HEAD’.
-
- -- Function: magit-insert-upstream-branch-header
-
-     Insert a header line about the branch that is usually pulled into
-     the current branch.
-
- -- Function: magit-insert-push-branch-header
-
-     Insert a header line about the branch that the current branch is
-     usually pushed to.
-
- -- Function: magit-insert-tags-header
-
-     Insert a header line about the current and/or next tag, along with
-     the number of commits between the tag and ‘HEAD’.
-
-   The following functions can also be added to the above hook:
-
- -- Function: magit-insert-repo-header
-
-     Insert a header line showing the path to the repository top-level.
-
- -- Function: magit-insert-remote-header
-
-     Insert a header line about the remote of the current branch.
-
-     If no remote is configured for the current branch, then fall back
-     showing the "origin" remote, or if that does not exist the first
-     remote in alphabetic order.
-
- -- Function: magit-insert-user-header
-
-     Insert a header line about the current user.
-
-
-File: magit.info,  Node: Status Module Sections,  Next: Status Options,  Prev: Status Header Sections,  Up: Status Buffer
-
-5.1.3 Status Module Sections
-----------------------------
-
-The contents of status buffers is controlled using the hook
-‘magit-status-sections-hook’ (see *note Status Sections::).
-
-   By default ‘magit-insert-modules’ is _not_ a member of that hook
-variable.
-
- -- Function: magit-insert-modules
-
-     Insert submodule sections.
-
-     Hook ‘magit-module-sections-hook’ controls which module sections
-     are inserted, and option ‘magit-module-sections-nested’ controls
-     whether they are wrapped in an additional section.
-
- -- User Option: magit-module-sections-hook
-
-     Hook run by ‘magit-insert-modules’.
-
- -- User Option: magit-module-sections-nested
-
-     This option controls whether ‘magit-insert-modules’ wraps inserted
-     sections in an additional section.
-
-     If this is non-nil, then only a single top-level section is
-     inserted.  If it is nil, then all sections listed in
-     ‘magit-module-sections-hook’ become top-level sections.
-
- -- Function: magit-insert-modules-overview
-
-     Insert sections for all submodules.  For each section insert the
-     path, the branch, and the output of ‘git describe --tags’, or,
-     failing that, the abbreviated HEAD commit hash.
-
-     Press ‘RET’ on such a submodule section to show its own status
-     buffer.  Press ‘RET’ on the "Modules" section to display a list of
-     submodules in a separate buffer.  This shows additional information
-     not displayed in the super-repository’s status buffer.
-
- -- Function: magit-insert-modules-unpulled-from-upstream
-
-     Insert sections for modules that haven’t been pulled from the
-     upstream yet.  These sections can be expanded to show the
-     respective commits.
-
- -- Function: magit-insert-modules-unpulled-from-pushremote
-
-     Insert sections for modules that haven’t been pulled from the
-     push-remote yet.  These sections can be expanded to show the
-     respective commits.
-
- -- Function: magit-insert-modules-unpushed-to-upstream
-
-     Insert sections for modules that haven’t been pushed to the
-     upstream yet.  These sections can be expanded to show the
-     respective commits.
-
- -- Function: magit-insert-modules-unpushed-to-pushremote
-
-     Insert sections for modules that haven’t been pushed to the
-     push-remote yet.  These sections can be expanded to show the
-     respective commits.
-
-
-File: magit.info,  Node: Status Options,  Prev: Status Module Sections,  Up: Status Buffer
-
-5.1.4 Status Options
---------------------
-
- -- User Option: magit-status-refresh-hook
-
-     Hook run after a status buffer has been refreshed.
-
- -- User Option: magit-status-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Status mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
- -- User Option: magit-log-section-args
-
-     Additional Git arguments used when creating log sections.  Only
-     ‘--graph’, ‘--decorate’, and ‘--show-signature’ are supported.
-     This option is only a temporary kludge and will be removed.
-
-     Note that due to an issue in Git the use of ‘--graph’ is very slow
-     with long histories, so you probably don’t want to add this here.
-
-   Also see the proceeding section for more options concerning status
-buffers.
-
-
-File: magit.info,  Node: Repository List,  Next: Logging,  Prev: Status Buffer,  Up: Inspecting
-
-5.2 Repository List
-===================
-
- -- Command: magit-list-repositories
-
-     This command displays a list of repositories in a separate buffer.
-
-     The options ‘magit-repository-directories’ and
-     ‘magit-repository-directories-depth’ control which repositories are
-     displayed.
-
- -- User Option: magit-repolist-columns
-
-     This option controls what columns are displayed by the command
-     ‘magit-list-repositories’ and how they are displayed.
-
-     Each element has the form ‘(HEADER WIDTH FORMAT PROPS)’.
-
-     HEADER is the string displayed in the header.  WIDTH is the width
-     of the column.  FORMAT is a function that is called with one
-     argument, the repository identification (usually its basename), and
-     with ‘default-directory’ bound to the toplevel of its working tree.
-     It has to return a string to be inserted or nil.  PROPS is an alist
-     that supports the keys ‘:right-align’ and ‘:pad-right’.
-
-   The following functions can be added to the above option:
-
- -- Function: magit-repolist-column-ident
-
-     This function inserts the identification of the repository.
-     Usually this is just its basename.
-
- -- Function: magit-repolist-column-path
-
-     This function inserts the absolute path of the repository.
-
- -- Function: magit-repolist-column-version
-
-     This function inserts a description of the repository’s ‘HEAD’
-     revision.
-
- -- Function: magit-repolist-column-unpulled-from-upstream
-
-     This function inserts the number of upstream commits not in the
-     current branch.
-
- -- Function: magit-repolist-column-unpulled-from-pushremote
-
-     This function inserts the number of commits in the push branch but
-     not the current branch.
-
- -- Function: magit-repolist-column-unpushed-to-upstream
-
-     This function inserts the number of commits in the current branch
-     but not its upstream.
-
- -- Function: magit-repolist-column-unpushed-to-pushremote
-
-     This function inserts the number of commits in the current branch
-     but not its push branch.
-
-
-File: magit.info,  Node: Logging,  Next: Diffing,  Prev: Repository List,  Up: Inspecting
-
-5.3 Logging
-===========
-
-The status buffer contains logs for the unpushed and unpulled commits,
-but that obviously isn’t enough.  The prefix command ‘magit-log-popup’,
-on ‘l’, features several suffix commands, which show a specific log in a
-separate log buffer.
-
-   Like other popups, the log popup also features several arguments that
-can be changed before invoking one of the suffix commands.  However, in
-the case of the log popup, these arguments may be taken from those
-currently in use in the current repository’s log buffer, depending on
-the value of ‘magit-use-sticky-arguments’ (see *note Popup Buffers and
-Prefix Commands::).
-
-   For information about the various arguments, see *note
-(gitman)git-log::.
-
-   The switch ‘++order=VALUE’ is converted to one of
-‘--author-date-order’, ‘--date-order’, or ‘--topo-order’ before being
-passed to ‘git log’.
-
-   The log popup also features several reflog commands.  See *note
-Reflog::.
-
-‘l’     (‘magit-log-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘l l’     (‘magit-log-current’)
-
-     Show log for the current branch.  When ‘HEAD’ is detached or with a
-     prefix argument, show log for one or more revs read from the
-     minibuffer.
-
-‘l o’     (‘magit-log’)
-
-     Show log for one or more revs read from the minibuffer.  The user
-     can input any revision or revisions separated by a space, or even
-     ranges, but only branches, tags, and a representation of the commit
-     at point are available as completion candidates.
-
-‘l h’     (‘magit-log-head’)
-
-     Show log for ‘HEAD’.
-
-‘l L’     (‘magit-log-branches’)
-
-     Show log for all local branches and ‘HEAD’.
-
-‘l b’     (‘magit-log-all-branches’)
-
-     Show log for all local and remote branches and ‘HEAD’.
-
-‘l a’     (‘magit-log-all’)
-
-     Show log for all references and ‘HEAD’.
-
-   Two additional commands that show the log for the file or blob that
-is being visited in the current buffer exists, see *note Minor Mode for
-Buffers Visiting Files::.  The command ‘magit-cherry’ also shows a log,
-see *note Cherries::.
-
-* Menu:
-
-* Refreshing Logs::
-* Log Buffer::
-* Log Margin::
-* Select from Log::
-* Reflog::
-* Cherries::
-
-
-File: magit.info,  Node: Refreshing Logs,  Next: Log Buffer,  Up: Logging
-
-5.3.1 Refreshing Logs
----------------------
-
-The prefix command ‘magit-log-refresh-popup’, on ‘L’, can be used to
-change the log arguments used in the current buffer, without changing
-which log is shown.  This works in dedicated log buffers, but also in
-the status buffer.
-
-‘L’     (‘magit-log-refresh-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘L g’     (‘magit-log-refresh’)
-
-     This suffix command sets the local log arguments for the current
-     buffer.
-
-‘L s’     (‘magit-log-set-default-arguments’)
-
-     This suffix command sets the default log arguments for buffers of
-     the same type as that of the current buffer.  Other existing
-     buffers of the same type are not affected because their local
-     values have already been initialized.
-
-‘L w’     (‘magit-log-save-default-arguments’)
-
-     This suffix command sets the default log arguments for buffers of
-     the same type as that of the current buffer, and saves the value
-     for future sessions.  Other existing buffers of the same type are
-     not affected because their local values have already been
-     initialized.
-
-‘L t’     (‘magit-toggle-margin’)
-
-     Show or hide the margin.
-
-
-File: magit.info,  Node: Log Buffer,  Next: Log Margin,  Prev: Refreshing Logs,  Up: Logging
-
-5.3.2 Log Buffer
-----------------
-
-‘L’     (‘magit-log-refresh-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.  See *note
-     Refreshing Logs::.
-
-‘q’     (‘magit-log-bury-buffer’)
-
-     Bury the current buffer or the revision buffer in the same frame.
-     Like ‘magit-mode-bury-buffer’ (which see) but with a negative
-     prefix argument instead bury the revision buffer, provided it is
-     displayed in the current frame.
-
-‘C-c C-b’     (‘magit-go-backward’)
-
-     Move backward in current buffer’s history.
-
-‘C-c C-f’     (‘magit-go-forward’)
-
-     Move forward in current buffer’s history.
-
-‘C-c C-n’     (‘magit-log-move-to-parent’)
-
-     Move to a parent of the current commit.  By default, this is the
-     first parent, but a numeric prefix can be used to specify another
-     parent.
-
-‘SPC’     (‘magit-diff-show-or-scroll-up’)
-
-     Update the commit or diff buffer for the thing at point.
-
-     Either show the commit or stash at point in the appropriate buffer,
-     or if that buffer is already being displayed in the current frame
-     and contains information about that commit or stash, then instead
-     scroll the buffer up.  If there is no commit or stash at point,
-     then prompt for a commit.
-
-‘DEL’     (‘magit-diff-show-or-scroll-down’)
-
-     Update the commit or diff buffer for the thing at point.
-
-     Either show the commit or stash at point in the appropriate buffer,
-     or if that buffer is already being displayed in the current frame
-     and contains information about that commit or stash, then instead
-     scroll the buffer down.  If there is no commit or stash at point,
-     then prompt for a commit.
-
-‘=’     (‘magit-log-toggle-commit-limit’)
-
-     Toggle the number of commits the current log buffer is limited to.
-     If the number of commits is currently limited, then remove that
-     limit.  Otherwise set it to 256.
-
-‘+’     (‘magit-log-double-commit-limit’)
-
-     Double the number of commits the current log buffer is limited to.
-
-‘-’     (‘magit-log-half-commit-limit’)
-
-     Half the number of commits the current log buffer is limited to.
-
- -- User Option: magit-log-auto-more
-
-     Insert more log entries automatically when moving past the last
-     entry.  Only considered when moving past the last entry with
-     ‘magit-goto-*-section’ commands.
-
- -- User Option: magit-log-show-refname-after-summary
-
-     Whether to show the refnames after the commit summaries.  This is
-     useful if you use really long branch names.
-
-   Magit displays references in logs a bit differently from how Git does
-it.
-
-   Local branches are blue and remote branches are green.  Of course
-that depends on the used theme, as do the colors used for other types of
-references.  The current branch has a box around it, as do remote
-branches that are their respective remote’s ‘HEAD’ branch.
-
-   If a local branch and its push-target point at the same commit, then
-their names are combined to preserve space and to make that relationship
-visible.  For example:
-
-     origin/feature
-     [green][blue-]
-
-     instead of
-
-     feature origin/feature
-     [blue-] [green-------]
-
-   Also note that while the popup features the ‘--show-signature’
-argument, that won’t actually be used when enabled, because Magit
-defaults to use just one line per commit.  Instead the commit colorized
-to indicate the validity of the signed commit object, using the faces
-named ‘magit-signature-*’ (which see).
-
-   For a description of ‘magit-log-margin’ see *note Log Margin::.
-
-
-File: magit.info,  Node: Log Margin,  Next: Select from Log,  Prev: Log Buffer,  Up: Logging
-
-5.3.3 Log Margin
-----------------
-
-In buffers which show one or more logs, it is possible to show
-additional information about each commit in the margin.  The options
-used to configure the margin are named ‘magit-INFIX-margin’, where INFIX
-is the same as in the respective major-mode ‘magit-INFIX-mode’.  In
-regular log buffers that would be ‘magit-log-margin’.
-
- -- User Option: magit-log-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Log mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
-   You can change the STYLE and AUTHOR-WIDTH of all ‘magit-INFIX-margin’
-options to the same values by customizing ‘magit-log-margin’ *before*
-‘magit’ is loaded.  If you do that, then the respective values for the
-other options will default to what you have set for that variable.
-Likewise if you set INIT in ‘magit-log-margin’ to ‘nil’, then that is
-used in the default of all other options.  But setting it to ‘t’, i.e.
-re-enforcing the default for that option, does not carry to other
-options.
-
-‘L’     (‘magit-margin-popup’)
-
-     This prefix command features the following commands for changing
-     the appearance of the margin.
-
-   In some buffers that support the margin, "L" is bound to
-‘magit-log-refresh-popup’, but that popup features the same commands,
-and then some other unrelated commands.
-
-‘L L’     (‘magit-toggle-margin’)
-
-     This command shows or hides the margin.
-
-‘L l’     (‘magit-cycle-margin-style’)
-
-     This command cycles the style used for the margin.
-
-‘L d’     (‘magit-toggle-margin-details’)
-
-     This command shows or hides details in the margin.
-
-
-File: magit.info,  Node: Select from Log,  Next: Reflog,  Prev: Log Margin,  Up: Logging
-
-5.3.4 Select from Log
----------------------
-
-When the user has to select a recent commit that is reachable from
-‘HEAD’, using regular completion would be inconvenient (because most
-humans cannot remember hashes or "HEAD~5", at least not without double
-checking).  Instead a log buffer is used to select the commit, which has
-the advantage that commits are presented in order and with the commit
-message.
-
-   Such selection logs are used when selecting the beginning of a rebase
-and when selecting the commit to be squashed into.
-
-   In addition to the key bindings available in all log buffers, the
-following additional key bindings are available in selection log
-buffers:
-
-‘C-c C-c’     (‘magit-log-select-pick’)
-
-     Select the commit at point and act on it.  Call
-     ‘magit-log-select-pick-function’ with the selected commit as
-     argument.
-
-‘C-c C-k’     (‘magit-log-select-quit’)
-
-     Abort selecting a commit, don’t act on any commit.
-
- -- User Option: magit-log-select-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Log-Select mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
-
-File: magit.info,  Node: Reflog,  Next: Cherries,  Prev: Select from Log,  Up: Logging
-
-5.3.5 Reflog
-------------
-
-Also see *note (gitman)git-reflog::.
-
-   These reflog commands are available from the log popup.  See *note
-Logging::.
-
-‘l r’     (‘magit-reflog-current’)
-
-     Display the reflog of the current branch.
-
-‘l O’     (‘magit-reflog-other’)
-
-     Display the reflog of a branch.
-
-‘l H’     (‘magit-reflog-head’)
-
-     Display the ‘HEAD’ reflog.
-
- -- User Option: magit-reflog-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Reflog mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
-
-File: magit.info,  Node: Cherries,  Prev: Reflog,  Up: Logging
-
-5.3.6 Cherries
---------------
-
-Cherries are commits that haven’t been applied upstream (yet), and are
-usually visualized using a log.  Each commit is prefixed with ‘-’ if it
-has an equivalent in the upstream and ‘+’ if it does not, i.e.  if it is
-a cherry.
-
-   The command ‘magit-cherry’ shows cherries for a single branch, but
-the references buffer (see *note References Buffer::) can show cherries
-for multiple "upstreams" at once.
-
-   Also see *note (gitman)git-reflog::.
-
-‘Y’     (‘magit-cherry’)
-
-     Show commits that are in a certain branch but that have not been
-     merged in the upstream branch.
-
- -- User Option: magit-cherry-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Cherry mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
-
-File: magit.info,  Node: Diffing,  Next: Ediffing,  Prev: Logging,  Up: Inspecting
-
-5.4 Diffing
-===========
-
-The status buffer contains diffs for the staged and unstaged commits,
-but that obviously isn’t enough.  The prefix command ‘magit-diff-popup’,
-on ‘d’, features several suffix commands, which show a specific diff in
-a separate diff buffer.
-
-   Like other popups, the diff popup also features several arguments
-that can be changed before invoking one of the suffix commands.
-However, in the case of the diff popup, these arguments may be taken
-from those currently in use in the current repository’s log buffer,
-depending on the value of ‘magit-use-sticky-arguments’ (see *note Popup
-Buffers and Prefix Commands::).
-
-   Also see *note (gitman)git-diff::.
-
-‘d’     (‘magit-diff-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘d d’     (‘magit-diff-dwim’)
-
-     Show changes for the thing at point.
-
-‘d r’     (‘magit-diff’)
-
-     Show differences between two commits.
-
-     RANGE should be a range (A..B or A...B) but can also be a single
-     commit.  If one side of the range is omitted, then it defaults to
-     ‘HEAD’.  If just a commit is given, then changes in the working
-     tree relative to that commit are shown.
-
-     If the region is active, use the revisions on the first and last
-     line of the region.  With a prefix argument, instead of diffing the
-     revisions, choose a revision to view changes along, starting at the
-     common ancestor of both revisions (i.e., use a "..." range).
-
-‘d w’     (‘magit-diff-working-tree’)
-
-     Show changes between the current working tree and the ‘HEAD’
-     commit.  With a prefix argument show changes between the working
-     tree and a commit read from the minibuffer.
-
-‘d s’     (‘magit-diff-staged’)
-
-     Show changes between the index and the ‘HEAD’ commit.  With a
-     prefix argument show changes between the index and a commit read
-     from the minibuffer.
-
-‘d u’     (‘magit-diff-unstaged’)
-
-     Show changes between the working tree and the index.
-
-‘d p’     (‘magit-diff-paths’)
-
-     Show changes between any two files on disk.
-
-   All of the above suffix commands update the repository’s diff buffer.
-The diff popup also features two commands which show differences in
-another buffer:
-
-‘d c’     (‘magit-show-commit’)
-
-     Show the commit at point.  If there is no commit at point or with a
-     prefix argument, prompt for a commit.
-
-‘d t’     (‘magit-stash-show’)
-
-     Show all diffs of a stash in a buffer.
-
-   Two additional commands that show the diff for the file or blob that
-is being visited in the current buffer exists, see *note Minor Mode for
-Buffers Visiting Files::.
-
-* Menu:
-
-* Refreshing Diffs::
-* Diff Buffer::
-* Diff Options::
-* Revision Buffer::
-
-
-File: magit.info,  Node: Refreshing Diffs,  Next: Diff Buffer,  Up: Diffing
-
-5.4.1 Refreshing Diffs
-----------------------
-
-The prefix command ‘magit-diff-refresh-popup’, on ‘D’, can be used to
-change the diff arguments used in the current buffer, without changing
-which diff is shown.  This works in dedicated diff buffers, but also in
-the status buffer.
-
-‘D’     (‘magit-diff-refresh-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘D g’     (‘magit-diff-refresh’)
-
-     This suffix command sets the local diff arguments for the current
-     buffer.
-
-‘D s’     (‘magit-diff-set-default-arguments’)
-
-     This suffix command sets the default diff arguments for buffers of
-     the same type as that of the current buffer.  Other existing
-     buffers of the same type are not affected because their local
-     values have already been initialized.
-
-‘D w’     (‘magit-diff-save-default-arguments’)
-
-     This suffix command sets the default diff arguments for buffers of
-     the same type as that of the current buffer, and saves the value
-     for future sessions.  Other existing buffers of the same type are
-     not affected because their local values have already been
-     initialized.
-
-‘D t’     (‘magit-diff-toggle-refine-hunk’)
-
-     This command toggles hunk refinement on or off.
-
-‘D r’     (‘magit-diff-switch-range-type’)
-
-     This command converts the diff range type from "revA..revB" to
-     "revB...revA", or vice versa.
-
-‘D f’     (‘magit-diff-flip-revs’)
-
-     This command swaps revisions in the diff range from "revA..revB" to
-     "revB..revA", or vice versa.
-
-‘D F’     (‘magit-diff-toggle-file-filter’)
-
-     This command toggles the file restriction of the diffs in the
-     current buffer, allowing you to quickly switch between viewing all
-     the changes in the commit and the restricted subset.  As a special
-     case, when this command is called from a log buffer, it toggles the
-     file restriction in the repository’s revision buffer, which is
-     useful when you display a revision from a log buffer that is
-     restricted to a file or files.
-
-   In addition to the above popup, which allows changing any of the
-supported arguments, there also exist some commands which change a
-particular argument.
-
-‘-’     (‘magit-diff-less-context’)
-
-     This command decreases the context for diff hunks by COUNT lines.
-
-‘+’     (‘magit-diff-more-context’)
-
-     This command increases the context for diff hunks by COUNT lines.
-
-‘0’     (‘magit-diff-default-context’)
-
-     This command resets the context for diff hunks to the default
-     height.
-
-   The following commands quickly change what diff is being displayed
-without having to using one of the diff popups.
-
-‘C-c C-d’     (‘magit-diff-while-committing’)
-
-     While committing, this command shows the changes that are about to
-     be committed.  While amending, invoking the command again toggles
-     between showing just the new changes or all the changes that will
-     be committed.
-
-     This binding is available in the diff buffer as well as the commit
-     message buffer.
-
-‘C-c C-b’     (‘magit-go-backward’)
-
-     This command moves backward in current buffer’s history.
-
-‘C-c C-f’     (‘magit-go-forward’)
-
-     This command moves forward in current buffer’s history.
-
-
-File: magit.info,  Node: Diff Buffer,  Next: Diff Options,  Prev: Refreshing Diffs,  Up: Diffing
-
-5.4.2 Diff Buffer
------------------
-
-These commands are available in diff buffers.
-
-‘RET’     (‘magit-diff-visit-file’)
-
-     From a diff, visit the corresponding file at the appropriate
-     position.
-
-     If the diff shows changes in the worktree, the index, or ‘HEAD’,
-     then visit the actual file.  Otherwise, when the diff is about an
-     older commit or a range, then visit the appropriate blob.
-
-     If point is on a removed line, then visit the blob for the first
-     parent of the commit which removed that line, i.e.  the last commit
-     where that line still existed.  Otherwise visit the blob for the
-     commit whose changes are being shown.
-
-     Interactively, when the file or blob to be displayed is already
-     being displayed in another window of the same frame, then just
-     select that window and adjust point.  Otherwise, or with a prefix
-     argument, display the buffer in another window.  The meaning of the
-     prefix argument can be inverted or further modified using the
-     option ‘magit-display-file-buffer-function’.
-
-     Non-interactively the optional OTHER-WINDOW argument is taken
-     literally.  DISPLAY-FN can be used to specify the display function
-     explicitly, in which case OTHER-WINDOW is ignored.
-
-     The optional FORCE-WORKTREE means to force visiting the worktree
-     version of the file.  To do this interactively use the command
-     ‘magit-diff-visit-file-worktree’ instead.
-
- -- User Option: magit-diff-visit-previous-blob
-
-     This option controls whether ‘magit-diff-visit-file’ may visit the
-     previous blob.  When this is ‘t’ and point is on a removed line in
-     a diff for a committed change, then ‘magit-diff-visit-file’ visits
-     the blob from the last revision which still had that line.
-
-     Currently this is only supported for committed changes, for staged
-     and unstaged changes ‘magit-diff-visit-file’ always visits the file
-     in the working tree.
-
-‘C-<return>’     (‘magit-diff-visit-file-worktree’)
-
-     From a diff, visit the corresponding file at the appropriate
-     position.
-
-     When the file is already being displayed in another window of the
-     same frame, then just select that window and adjust point.  With a
-     prefix argument also display in another window.
-
-     The actual file in the worktree is visited.  The positions in the
-     hunk headers get less useful the "older" the changes are, and as a
-     result, jumping to the appropriate position gets less reliable.
-
-     Also see ‘magit-diff-visit-file’, which visits the respective blob,
-     unless the diff shows changes in the worktree, the index, or
-     ‘HEAD’.
-
- -- Command: magit-diff-visit-file-other-window
-
-     From a diff, visit the corresponding file at the appropriate
-     position in another window.
-
-‘C-c C-t’     (‘magit-diff-trace-definition’)
-
-     From a diff, show log for the definition at point.
-
-‘C-c C-e’     (‘magit-diff-edit-hunk-commit’)
-
-     From a hunk, edit the respective commit and visit the file.
-
-     First visit the file being modified by the hunk at the correct
-     location using ‘magit-diff-visit-file’.  This actually visits a
-     blob.  When point is on a diff header, not within an individual
-     hunk, then this visits the blob the first hunk is about.
-
-     Then invoke ‘magit-edit-line-commit’, which uses an interactive
-     rebase to make the commit editable, or if that is not possible
-     because the commit is not reachable from ‘HEAD’ by checking out
-     that commit directly.  This also causes the actual worktree file to
-     be visited.
-
-     Neither the blob nor the file buffer are killed when finishing the
-     rebase.  If that is undesirable, then it might be better to use
-     ‘magit-rebase-edit-command’ instead of this command.
-
-‘j’     (‘magit-jump-to-diffstat-or-diff’)
-
-     Jump to the diffstat or diff.  When point is on a file inside the
-     diffstat section, then jump to the respective diff section.
-     Otherwise, jump to the diffstat section or a child thereof.
-
-‘SPC’     (‘scroll-up’)
-
-     Scroll text upward.
-
-‘DEL’     (‘scroll-down’)
-
-     Scroll text downward.
-
-
-File: magit.info,  Node: Diff Options,  Next: Revision Buffer,  Prev: Diff Buffer,  Up: Diffing
-
-5.4.3 Diff Options
-------------------
-
- -- User Option: magit-diff-refine-hunk
-
-     Whether to show word-granularity differences within diff hunks.
-
-        • ‘nil’ never show fine differences.
-
-        • ‘t’ show fine differences for the current diff hunk only.
-
-        • ‘all’ show fine differences for all displayed diff hunks.
-
- -- User Option: magit-diff-adjust-tab-width
-
-     Whether to adjust the width of tabs in diffs.
-
-     Determining the correct width can be expensive if it requires
-     opening large and/or many files, so the widths are cached in the
-     variable ‘magit-diff--tab-width-cache’.  Set that to nil to
-     invalidate the cache.
-
-        • ‘nil’ Never ajust tab width.  Use ‘tab-width’s value from the
-          Magit buffer itself instead.
-
-        • ‘t’ If the corresponding file-visiting buffer exits, then use
-          ‘tab-width’’s value from that buffer.  Doing this is cheap, so
-          this value is used even if a corresponding cache entry exists.
-
-        • ‘always’ If there is no such buffer, then temporarily visit
-          the file to determine the value.
-
-        • NUMBER Like ‘always’, but don’t visit files larger than NUMBER
-          bytes.
-
- -- User Option: magit-diff-paint-whitespace
-
-     Specify where to highlight whitespace errors.
-
-     See ‘magit-diff-highlight-trailing’,
-     ‘magit-diff-highlight-indentation’.  The symbol ‘t’ means in all
-     diffs, ‘status’ means only in the status buffer, and nil means
-     nowhere.
-
- -- User Option: magit-diff-highlight-trailing
-
-     Whether to highlight whitespace at the end of a line in diffs.
-     Used only when ‘magit-diff-paint-whitespace’ is non-nil.
-
- -- User Option: magit-diff-highlight-indentation
-
-     Highlight the "wrong" indentation style.  Used only when
-     ‘magit-diff-paint-whitespace’ is non-nil.
-
-     The value is a list of cons cells.  The car is a regular
-     expression, and the cdr is the value that applies to repositories
-     whose directory matches the regular expression.  If more than one
-     element matches, then the *last* element in the list applies.  The
-     default value should therefore come first in the list.
-
-     If the value is ‘tabs’, highlight indentation with tabs.  If the
-     value is an integer, highlight indentation with at least that many
-     spaces.  Otherwise, highlight neither.
-
- -- User Option: magit-diff-hide-trailing-cr-characters
-
-     Whether to hide ^M characters at the end of a line in diffs.
-
- -- User Option: magit-diff-highlight-hunk-region-functions
-
-     This option specifies the functions used to highlight the
-     hunk-internal region.
-
-     ‘magit-diff-highlight-hunk-region-dim-outside’ overlays the outside
-     of the hunk internal selection with a face that causes the added
-     and removed lines to have the same background color as context
-     lines.  This function should not be removed from the value of this
-     option.
-
-     ‘magit-diff-highlight-hunk-region-using-overlays’ and
-     ‘magit-diff-highlight-hunk-region-using-underline’ emphasize the
-     region by placing delimiting horizontal lines before and after it.
-     Both of these functions have glitches which cannot be fixed due to
-     limitations of Emacs’ display engine.  For more information see
-     <https://github.com/magit/magit/issues/2758> ff.
-
-     Instead of, or in addition to, using delimiting horizontal lines,
-     to emphasize the boundaries, you may which to emphasize the text
-     itself, using ‘magit-diff-highlight-hunk-region-using-face’.
-
-     In terminal frames it’s not possible to draw lines as the overlay
-     and underline variants normally do, so there they fall back to
-     calling the face function instead.
-
- -- User Option: magit-diff-unmarked-lines-keep-foreground
-
-     This option controls whether added and removed lines outside the
-     hunk-internal region only lose their distinct background color or
-     also the foreground color.  Whether the outside of the region is
-     dimmed at all depends on
-     ‘magit-diff-highlight-hunk-region-functions’.
-
-
-File: magit.info,  Node: Revision Buffer,  Prev: Diff Options,  Up: Diffing
-
-5.4.4 Revision Buffer
----------------------
-
- -- User Option: magit-revision-insert-related-refs
-
-     Whether to show related refs in revision buffers.
-
- -- User Option: magit-revision-show-gravatar
-
-     Whether to show gravatar images in revision buffers.
-
-     If non-nil, then the value has to be a cons-cell which specifies
-     where the gravatar images for the author and/or the committer are
-     inserted inside the text that was previously inserted according to
-     ‘magit-revision-header-format’.
-
-     Both cells are regular expressions.  The car specifies where to
-     insert the author gravatar image.  The top half of the image is
-     inserted right after the matched text, the bottom half on the next
-     line at the same offset.  The cdr specifies where to insert the
-     committer image, accordingly.  Either the car or the cdr may be
-     nil.
-
- -- User Option: magit-revision-use-hash-sections
-
-     Whether to turn hashes inside the commit message into sections.
-
-     If non-nil, then hashes inside the commit message are turned into
-     ‘commit’ sections.  There is a trade off to be made between
-     performance and reliability:
-
-        • ‘slow’ calls git for every word to be absolutely sure.
-
-        • ‘quick’ skips words less than seven characters long.
-
-        • ‘quicker’ additionally skips words that don’t contain a
-          number.
-
-        • ‘quickest’ uses all words that are at least seven characters
-          long and which contain at least one number as well as at least
-          one letter.
-
-     If nil, then no hashes are turned into sections, but you can still
-     visit the commit at point using "RET".
-
-   The diffs shown in the revision buffer may be automatically
-restricted to a subset of the changed files.  If the revision buffer is
-displayed from a log buffer, the revision buffer will share the same
-file restriction as that log buffer (also see the command
-‘magit-diff-toggle-file-filter’).  Note, however, that the log’s file
-restriction will be ignored when ‘magit-log-arguments’ includes
-‘--follow’.  In this case, the ‘-u’ argument of the log popup can be
-used to show the file-restricted diffs inline.
-
-   If the revision buffer is not displayed from a log buffer, the file
-restriction is determined by the file restriction in the repository’s
-diff buffer, if it exists, and the value of the option
-‘magit-use-sticky-arguments’.
-
-
-File: magit.info,  Node: Ediffing,  Next: References Buffer,  Prev: Diffing,  Up: Inspecting
-
-5.5 Ediffing
-============
-
-This section describes how to enter Ediff from Magit buffers.  For
-information on how to use Ediff itself, see *note (ediff)Top::.
-
-‘e’     (‘magit-ediff-dwim’)
-
-     Compare, stage, or resolve using Ediff.
-
-     This command tries to guess what file, and what commit or range the
-     user wants to compare, stage, or resolve using Ediff.  It might
-     only be able to guess either the file, or range/commit, in which
-     case the user is asked about the other.  It might not always guess
-     right, in which case the appropriate ‘magit-ediff-*’ command has to
-     be used explicitly.  If it cannot read the user’s mind at all, then
-     it asks the user for a command to run.
-
-‘E’     (‘magit-ediff-popup’)
-
-     This prefix command shows the following suffix commands in a popup
-     buffer.
-
-‘E r’     (‘magit-ediff-compare’)
-
-     Compare two revisions of a file using Ediff.
-
-     If the region is active, use the revisions on the first and last
-     line of the region.  With a prefix argument, instead of diffing the
-     revisions, choose a revision to view changes along, starting at the
-     common ancestor of both revisions (i.e., use a "..." range).
-
-‘E m’     (‘magit-ediff-resolve’)
-
-     Resolve outstanding conflicts in a file using Ediff, defaulting to
-     the file at point.
-
-     Provided that the value of ‘merge.conflictstyle’ is ‘diff3’, you
-     can view the file’s merge-base revision using ‘/’ in the Ediff
-     control buffer.
-
-     In the rare event that you want to manually resolve all conflicts,
-     including those already resolved by Git, use
-     ‘ediff-merge-revisions-with-ancestor’.
-
-‘E s’     (‘magit-ediff-stage’)
-
-     Stage and unstage changes to a file using Ediff, defaulting to the
-     file at point.
-
-‘E u’     (‘magit-ediff-show-unstaged’)
-
-     Show unstaged changes to a file using Ediff.
-
-‘E i’     (‘magit-ediff-show-staged’)
-
-     Show staged changes to a file using Ediff.
-
-‘E w’     (‘magit-ediff-show-working-tree’)
-
-     Show changes in a file between ‘HEAD’ and working tree using Ediff.
-
-‘E c’     (‘magit-ediff-show-commit’)
-
-     Show changes to a file introduced by a commit using Ediff.
-
-‘E z’     (‘magit-ediff-show-stash’)
-
-     Show changes to a file introduced by a stash using Ediff.
-
- -- User Option: magit-ediff-dwim-show-on-hunks
-
-     This option controls what command ‘magit-ediff-dwim’ calls when
-     point is on uncommitted hunks.  When nil, always run
-     ‘magit-ediff-stage’.  Otherwise, use ‘magit-ediff-show-staged’ and
-     ‘magit-ediff-show-unstaged’ to show staged and unstaged changes,
-     respectively.
-
- -- User Option: magit-ediff-show-stash-with-index
-
-     This option controls whether ‘magit-ediff-show-stash’ includes a
-     buffer containing the file’s state in the index at the time the
-     stash was created.  This makes it possible to tell which changes in
-     the stash were staged.
-
- -- User Option: magit-ediff-quit-hook
-
-     This hook is run after quitting an Ediff session that was created
-     using a Magit command.  The hook functions are run inside the Ediff
-     control buffer, and should not change the current buffer.
-
-     This is similar to ‘ediff-quit-hook’ but takes the needs of Magit
-     into account.  The regular ‘ediff-quit-hook’ is ignored by Ediff
-     sessions that were created using a Magit command.
-
-
-File: magit.info,  Node: References Buffer,  Next: Bisecting,  Prev: Ediffing,  Up: Inspecting
-
-5.6 References Buffer
-=====================
-
-‘y’     (‘magit-show-refs-popup’)
-
-     List and compare references in a dedicated buffer.  By default all
-     refs are compared with ‘HEAD’, but with a prefix argument this
-     command instead acts as a prefix command and shows the following
-     suffix commands along with the appropriate infix arguments in a
-     popup buffer.
-
-‘y y’     (‘magit-show-refs-head’)
-
-     List and compare references in a dedicated buffer.  Refs are
-     compared with ‘HEAD’.
-
-‘y c’     (‘magit-show-refs-current’)
-
-     List and compare references in a dedicated buffer.  Refs are
-     compared with the current branch or ‘HEAD’ if it is detached.
-
-‘y o’     (‘magit-show-refs’)
-
-     List and compare references in a dedicated buffer.  Refs are
-     compared with a branch read from the user.
-
- -- User Option: magit-refs-show-commit-count
-
-     Whether to show commit counts in Magit-Refs mode buffers.
-
-        • ‘all’ Show counts for branches and tags.
-
-        • ‘branch’ Show counts for branches only.
-
-        • ‘nil’ Never show counts.
-
-     The default is ‘nil’ because anything else can be very expensive.
-
- -- User Option: magit-refs-pad-commit-counts
-
-     Whether to pad all commit counts on all sides in Magit-Refs mode
-     buffers.
-
-     If this is nil, then some commit counts are displayed right next to
-     one of the branches that appear next to the count, without any
-     space in between.  This might look bad if the branch name faces
-     look too similar to ‘magit-dimmed’.
-
-     If this is non-nil, then spaces are placed on both sides of all
-     commit counts.
-
- -- User Option: magit-refs-show-remote-prefix
-
-     Whether to show the remote prefix in lists of remote branches.
-
-     Showing the prefix is redundant because the name of the remote is
-     already shown in the heading preceeding the list of its branches.
-
- -- User Option: magit-refs-primary-column-width
-
-     Width of the primary column in ‘magit-refs-mode’ buffers.  The
-     primary column is the column that contains the name of the branch
-     that the current row is about.
-
-     If this is an integer, then the column is that many columns wide.
-     Otherwise it has to be a cons-cell of two integers.  The first
-     specifies the minimal width, the second the maximal width.  In that
-     case the actual width is determined using the length of the names
-     of the shown local branches.  (Remote branches and tags are not
-     taken into account when calculating to optimal width.)
-
- -- User Option: magit-refs-focus-column-width
-
-     Width of the focus column in ‘magit-refs-mode’ buffers.
-
-     The focus column is the first column, which marks one branch
-     (usually the current branch) as the focused branch using ‘*’ or
-     ‘@’.  For each other reference, this column optionally shows how
-     many commits it is ahead of the focused branch and ‘<’, or if it
-     isn’t ahead then the commits it is behind and ‘>’, or if it isn’t
-     behind either, then a ‘=’.
-
-     This column may also display only ‘*’ or ‘@’ for the focused
-     branch, in which case this option is ignored.  Use ‘L v’ to change
-     the verbosity of this column.
-
- -- User Option: magit-refs-margin
-
-     This option specifies whether the margin is initially shown in
-     Magit-Refs mode buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
- -- User Option: magit-refs-margin-for-tags
-
-     This option specifies whether to show information about tags in the
-     margin.  This is disabled by default because it is slow if there
-     are many tags.
-
-   The following variables control how individual refs are displayed.
-If you change one of these variables (especially the "%c" part), then
-you should also change the others to keep things aligned.  The following
-%-sequences are supported:
-
-   • ‘%a’ Number of commits this ref has over the one we compare to.
-
-   • ‘%b’ Number of commits the ref we compare to has over this one.
-
-   • ‘%c’ Number of commits this ref has over the one we compare to.
-     For the ref which all other refs are compared this is instead "@",
-     if it is the current branch, or "#" otherwise.
-
-   • ‘%C’ For the ref which all other refs are compared this is "@", if
-     it is the current branch, or "#" otherwise.  For all other refs "
-     ".
-
-   • ‘%h’ Hash of this ref’s tip.
-
-   • ‘%m’ Commit summary of the tip of this ref.
-
-   • ‘%n’ Name of this ref.
-
-   • ‘%u’ Upstream of this local branch.
-
-   • ‘%U’ Upstream of this local branch and additional local vs.
-     upstream information.
-
- -- User Option: magit-refs-filter-alist
-
-     This alist controls which tags and branches are omitted from being
-     displayed in ‘magit-refs-mode’ buffers.  If it is ‘nil’, then all
-     refs are displayed (subject to ‘magit-refs-sections-hook’).
-
-     All keys are tried in order until one matches.  Then its value is
-     used and subsequent elements are ignored.  If the value is non-nil,
-     then the reference is displayed, otherwise it is not.  If no
-     element matches, then the reference is displayed.
-
-     A key can either be a regular expression that the refname has to
-     match, or a function that takes the refname as only argument and
-     returns a boolean.  Contrary to how they are displayed in the
-     buffer, for comparison each tag begins with "tags/" and each remote
-     branch with "<remote>/".
-
-‘RET’     (‘magit-visit-ref’)
-
-     This command visits the reference or revision at point in another
-     buffer.  If there is no revision at point or with a prefix argument
-     then it prompts for a revision.
-
-     This command behaves just like ‘magit-show-commit’ as described
-     above, except if point is on a reference in a ‘magit-refs-mode’
-     buffer, in which case the behavior may be different, but only if
-     you have customized the option ‘magit-visit-ref-behavior’.
-
- -- User Option: magit-visit-ref-behavior
-
-     This option controls how ‘magit-visit-ref’ behaves in
-     ‘magit-refs-mode’ buffers.
-
-     By default ‘magit-visit-ref’ behaves like ‘magit-show-commit’, in
-     all buffers, including ‘magit-refs-mode’ buffers.  When the type of
-     the section at point is ‘commit’ then "RET" is bound to
-     ‘magit-show-commit’, and when the type is either ‘branch’ or ‘tag’
-     then it is bound to ‘magit-visit-ref’.
-
-     "RET" is one of Magit’s most essential keys and at least by default
-     it should behave consistently across all of Magit, especially
-     because users quickly learn that it does something very harmless;
-     it shows more information about the thing at point in another
-     buffer.
-
-     However "RET" used to behave differently in ‘magit-refs-mode’
-     buffers, doing surprising things, some of which cannot really be
-     described as "visit this thing".  If you’ve grown accustomed this
-     behavior, you can restore it by adding one or more of the below
-     symbols to the value of this option.  But keep in mind that by
-     doing so you don’t only introduce inconsistencies, you also lose
-     some functionality and might have to resort to ‘M-x
-     magit-show-commit’ to get it back.
-
-     ‘magit-visit-ref’ looks for these symbols in the order in which
-     they are described here.  If the presence of a symbol applies to
-     the current situation, then the symbols that follow do not affect
-     the outcome.
-
-        • ‘focus-on-ref’
-
-          With a prefix argument update the buffer to show commit counts
-          and lists of cherry commits relative to the reference at point
-          instead of relative to the current buffer or ‘HEAD’.
-
-          Instead of adding this symbol, consider pressing "C-u y o
-          RET".
-
-        • ‘create-branch’
-
-          If point is on a remote branch, then create a new local branch
-          with the same name, use the remote branch as its upstream, and
-          then check out the local branch.
-
-          Instead of adding this symbol, consider pressing "b c RET
-          RET", like you would do in other buffers.
-
-        • ‘checkout-any’
-
-          Check out the reference at point.  If that reference is a tag
-          or a remote branch, then this results in a detached ‘HEAD’.
-
-          Instead of adding this symbol, consider pressing "b b RET",
-          like you would do in other buffers.
-
-        • ‘checkout-branch’
-
-          Check out the local branch at point.
-
-          Instead of adding this symbol, consider pressing "b b RET",
-          like you would do in other buffers.
-
-* Menu:
-
-* References Sections::
-
-
-File: magit.info,  Node: References Sections,  Up: References Buffer
-
-5.6.1 References Sections
--------------------------
-
-The contents of references buffers is controlled using the hook
-‘magit-refs-sections-hook’.  See *note Section Hooks:: to learn about
-such hooks and how to customize them.  All of the below functions are
-members of the default value.  Note that it makes much less sense to
-customize this hook than it does for the respective hook used for the
-status buffer.
-
- -- User Option: magit-refs-sections-hook
-
-     Hook run to insert sections into a references buffer.
-
- -- Function: magit-insert-local-branches
-
-     Insert sections showing all local branches.
-
- -- Function: magit-insert-remote-branches
-
-     Insert sections showing all remote-tracking branches.
-
- -- Function: magit-insert-tags
-
-     Insert sections showing all tags.
-
-
-File: magit.info,  Node: Bisecting,  Next: Visiting Blobs,  Prev: References Buffer,  Up: Inspecting
-
-5.7 Bisecting
-=============
-
-Also see *note (gitman)git-bisect::.
-
-‘B’     (‘magit-bisect-popup’)
-
-     This prefix command shows the following suffix commands in a popup
-     buffer.
-
-   When bisecting is not in progress, then the popup buffer features the
-following commands.
-
-‘B B’     (‘magit-bisect-start’)
-
-     Start a bisect session.
-
-     Bisecting a bug means to find the commit that introduced it.  This
-     command starts such a bisect session by asking for a known good and
-     a bad commit.
-
-‘B s’     (‘magit-bisect-run’)
-
-     Bisect automatically by running commands after each step.
-
-   When bisecting is in progress, then the popup buffer features these
-commands instead.
-
-‘B b’     (‘magit-bisect-bad’)
-
-     Mark the current commit as bad.  Use this after you have asserted
-     that the commit does contain the bug in question.
-
-‘B g’     (‘magit-bisect-good’)
-
-     Mark the current commit as good.  Use this after you have asserted
-     that the commit does not contain the bug in question.
-
-‘B k’     (‘magit-bisect-skip’)
-
-     Skip the current commit.  Use this if for some reason the current
-     commit is not a good one to test.  This command lets Git choose a
-     different one.
-
-‘B r’     (‘magit-bisect-reset’)
-
-     After bisecting, cleanup bisection state and return to original
-     ‘HEAD’.
-
-   By default the status buffer shows information about the ongoing
-bisect session.
-
- -- User Option: magit-bisect-show-graph
-
-     This option controls whether a graph is displayed for the log of
-     commits that still have to be bisected.
-
-
-File: magit.info,  Node: Visiting Blobs,  Next: Blaming,  Prev: Bisecting,  Up: Inspecting
-
-5.8 Visiting Blobs
-==================
-
-‘M-x magit-find-file’     (‘magit-find-file’)
-
-     View FILE from REV.  Switch to a buffer visiting blob REV:FILE,
-     creating one if none already exists.
-
-‘M-x magit-find-file-other-window’     (‘magit-find-file-other-window’)
-
-     View FILE from REV, in another window.  Like ‘magit-find-file’, but
-     create a new window or reuse an existing one.
-
-
-File: magit.info,  Node: Blaming,  Prev: Visiting Blobs,  Up: Inspecting
-
-5.9 Blaming
-===========
-
-Also see *note (gitman)git-blame::.
-
-   To start blaming you can use ‘M-x’ in a file-visiting buffer to
-invoke one of the following commands.  You can also invoke these
-commands using the blame popup, which is available on ‘b’ in
-file-visiting buffers that already contain blame information and, also
-on ‘b’, in all blob-visiting buffers.  You can also enter the blame
-popup from the file popup, which is available on ‘C-c M-g’, provided
-‘magit-file-mode’ is enabled, see *note Minor Mode for Buffers Visiting
-Files::.
-
- -- Command: magit-blame
-
-     This command augments each line or chunk of lines in the current
-     file- or blob-visiting buffer with information about what commits
-     last touched these lines.
-
-     If the buffer visits a revision of that file, then history up to
-     that revision is considered.  Otherwise, the file’s full history is
-     considered, including uncommitted changes.
-
-     If Magit-Blame mode is already turned on in the current buffer then
-     blaming is done recursively, by visiting REVISION:FILE (using
-     ‘magit-find-file’), where REVISION is a parent of the revision that
-     added the current line or chunk of lines.
-
- -- Command: magit-blame-echo
-
-     This command is like ‘magit-blame’ except that it doesn’t turn on
-     ‘read-only-mode’ and that it initially uses the visualization style
-     specified by option ‘magit-blame-echo-style’.
-
- -- Command: magit-blame-removal
-
-     This command augments each line or chunk of lines in the current
-     blob-visiting buffer with information about the revision that
-     removes it.  It cannot be used in file-visiting buffers.
-
-     Like ‘magit-blame’, this command can be used recursively.
-
- -- Command: magit-blame-reverse
-
-     This command augments each line or chunk of lines in the current
-     file- or blob-visiting buffer with information about the last
-     revision in which a line still existed.
-
-     Like ‘magit-blame’, this command can be used recursively.
-
-   The following key bindings are available when Magit-Blame mode is
-enabled and Read-Only mode is not enabled.  These commands are also
-available in other buffers; here only the behavior is described that is
-relevant in file-visiting buffers that are being blamed.
-
-‘RET’     (‘magit-show-commit’)
-
-     This command shows the commit that last touched the line at point.
-
-‘SPC’     (‘magit-diff-show-or-scroll-up’)
-
-     This command updates the commit buffer.
-
-     This either shows the commit that last touched the line at point in
-     the appropriate buffer, or if that buffer is already being
-     displayed in the current frame and if that buffer contains
-     information about that commit, then the buffer is scrolled up
-     instead.
-
-‘DEL’     (‘magit-diff-show-or-scroll-down’)
-
-     This command updates the commit buffer.
-
-     This either shows the commit that last touched the line at point in
-     the appropriate buffer, or if that buffer is already being
-     displayed in the current frame and if that buffer contains
-     information about that commit, then the buffer is scrolled down
-     instead.
-
-   The following key bindings are available when Magit-Blame mode is
-enabled and Read-Only mode is not enabled.
-
-‘b’     (‘magit-blame-popup’)
-
-     This prefix command shows the above suffix command along with the
-     appropriate infix arguments in a popup buffer.
-
-‘n’     (‘magit-blame-next-chunk’)
-
-     This command moves to the next chunk.
-
-‘N’     (‘magit-blame-next-chunk-same-commit’)
-
-     This command moves to the next chunk from the same commit.
-
-‘p’     (‘magit-blame-previous-chunk’)
-
-     This command moves to the previous chunk.
-
-‘P’     (‘magit-blame-previous-chunk-same-commit’)
-
-     This command moves to the previous chunk from the same commit.
-
-‘q’     (‘magit-blame-quit’)
-
-     This command turns off Magit-Blame mode.  If the buffer was created
-     during a recursive blame, then it also kills the buffer.
-
-‘M-w’     (‘magit-blame-copy-hash’)
-
-     This command saves the hash of the current chunk’s commit to the
-     kill ring.
-
-     When the region is active, the command saves the region’s content
-     instead of the hash, like ‘kill-ring-save’ would.
-
-‘c’     (‘magit-blame-cycle-style’)
-
-     This command changes how blame information is visualized in the
-     current buffer by cycling through the styles specified using the
-     option ‘magit-blame-styles’.
-
-   Blaming is also controlled using the following options.
-
- -- User Option: magit-blame-styles
-
-     This option defines a list of styles used to visualize blame
-     information.  For now see its doc-string to learn more.
-
- -- User Option: magit-blame-echo-style
-
-     This option specifies the blame visualization style used by the
-     command ‘magit-blame-echo’.  This must be a symbol that is used as
-     the identifier for one of the styles defined in
-     ‘magit-blame-styles’.
-
- -- User Option: magit-blame-time-format
-
-     This option specifies the format string used to display times when
-     showing blame information.
-
- -- User Option: magit-blame-read-only
-
-     This option controls whether blaming a buffer also makes
-     temporarily read-only.
-
- -- User Option: magit-blame-disable-modes
-
-     This option lists incompatible minor-modes that should be disabled
-     temporarily when a buffer contains blame information.  They are
-     enabled again when the buffer no longer shows blame information.
-
- -- User Option: magit-blame-goto-chunk-hook
-
-     This hook is run when moving between chunks.
-
-
-File: magit.info,  Node: Manipulating,  Next: Transferring,  Prev: Inspecting,  Up: Top
-
-6 Manipulating
-**************
-
-* Menu:
-
-* Repository Setup::
-* Staging and Unstaging::
-* Applying::
-* Committing::
-* Branching::
-* Merging::
-* Resolving Conflicts::
-* Rebasing::
-* Cherry Picking::
-* Resetting::
-* Stashing::
-
-
-File: magit.info,  Node: Repository Setup,  Next: Staging and Unstaging,  Up: Manipulating
-
-6.1 Repository Setup
-====================
-
-‘M-x magit-init’     (‘magit-init’)
-
-     This command initializes a repository and then shows the status
-     buffer for the new repository.
-
-     If the directory is below an existing repository, then the user has
-     to confirm that a new one should be created inside.  If the
-     directory is the root of the existing repository, then the user has
-     to confirm that it should be reinitialized.
-
-‘M-x magit-clone’     (‘magit-clone’)
-
-     This command clones a repository and then shows the status buffer
-     for the new repository.
-
-     The user is queried for a remote url and a local directory.
-
- -- User Option: magit-clone-set-remote.pushDefault
-
-     Whether to set the value of ‘remote.pushDefault’ after cloning.
-
-     If ‘t’, then set without asking.  If ‘nil’, then don’t set.  If
-     ‘ask’, then ask the user every time she clones a repository.
-
-
-File: magit.info,  Node: Staging and Unstaging,  Next: Applying,  Prev: Repository Setup,  Up: Manipulating
-
-6.2 Staging and Unstaging
-=========================
-
-Like Git, Magit can of course stage and unstage complete files.  Unlike
-Git, it also allows users to gracefully un-/stage individual hunks and
-even just part of a hunk.  To stage individual hunks and parts of hunks
-using Git directly, one has to use the very modal and rather clumsy
-interface of a ‘git add --interactive’ session.
-
-   With Magit, on the other hand, one can un-/stage individual hunks by
-just moving point into the respective section inside a diff displayed in
-the status buffer or a separate diff buffer and typing ‘s’ or ‘u’.  To
-operate on just parts of a hunk, mark the changes that should be
-un-/staged using the region and then press the same key that would be
-used to un-/stage.  To stage multiple files or hunks at once use a
-region that starts inside the heading of such a section and ends inside
-the heading of a sibling section of the same type.
-
-   Besides staging and unstaging, Magit also provides several other
-"apply variants" that can also operate on a file, multiple files at
-once, a hunk, multiple hunks at once, and on parts of a hunk.  These
-apply variants are described in the next section.
-
-   You can also use Ediff to stage and unstage.  See *note Ediffing::.
-
-‘s’     (‘magit-stage’)
-
-     Add the change at point to the staging area.
-
-     With a prefix argument and an untracked file (or files) at point,
-     stage the file but not its content.  This makes it possible to
-     stage only a subset of the new file’s changes.
-
-‘S’     (‘magit-stage-modified’)
-
-     Stage all changes to files modified in the worktree.  Stage all new
-     content of tracked files and remove tracked files that no longer
-     exist in the working tree from the index also.  With a prefix
-     argument also stage previously untracked (but not ignored) files.
-
-‘u’     (‘magit-unstage’)
-
-     Remove the change at point from the staging area.
-
-     Only staged changes can be unstaged.  But by default this command
-     performs an action that is somewhat similar to unstaging, when it
-     is called on a committed change: it reverses the change in the
-     index but not in the working tree.
-
-‘U’     (‘magit-unstage-all’)
-
-     Remove all changes from the staging area.
-
- -- User Option: magit-unstage-committed
-
-     This option controls whether ‘magit-unstage’ "unstages" committed
-     changes by reversing them in the index but not the working tree.
-     The alternative is to raise an error.
-
-‘M-x magit-reverse-in-index’     (‘magit-reverse-in-index’)
-
-     This command reverses the committed change at point in the index
-     but not the working tree.  By default no key is bound directly to
-     this command, but it is indirectly called when ‘u’
-     (‘magit-unstage’) is pressed on a committed change.
-
-     This allows extracting a change from ‘HEAD’, while leaving it in
-     the working tree, so that it can later be committed using a
-     separate commit.  A typical workflow would be:
-
-        • Optionally make sure that there are no uncommitted changes.
-
-        • Visit the ‘HEAD’ commit and navigate to the change that should
-          not have been included in that commit.
-
-        • Type ‘u’ (‘magit-unstage’) to reverse it in the index.  This
-          assumes that ‘magit-unstage-committed-changes’ is non-nil.
-
-        • Type ‘c e’ to extend ‘HEAD’ with the staged changes, including
-          those that were already staged before.
-
-        • Optionally stage the remaining changes using ‘s’ or ‘S’ and
-          then type ‘c c’ to create a new commit.
-
-‘M-x magit-reset-index’     (‘magit-reset-index’)
-
-     Reset the index to some commit.  The commit is read from the user
-     and defaults to the commit at point.  If there is no commit at
-     point, then it defaults to ‘HEAD’.
-
-* Menu:
-
-* Staging from File-Visiting Buffers::
-
-
-File: magit.info,  Node: Staging from File-Visiting Buffers,  Up: Staging and Unstaging
-
-6.2.1 Staging from File-Visiting Buffers
-----------------------------------------
-
-Fine-grained un-/staging has to be done from the status or a diff
-buffer, but it’s also possible to un-/stage all changes made to the file
-visited in the current buffer right from inside that buffer.
-
-‘M-x magit-stage-file’     (‘magit-stage-file’)
-
-     When invoked inside a file-visiting buffer, then stage all changes
-     to that file.  In a Magit buffer, stage the file at point if any.
-     Otherwise prompt for a file to be staged.  With a prefix argument
-     always prompt the user for a file, even in a file-visiting buffer
-     or when there is a file section at point.
-
-‘M-x magit-unstage-file’     (‘magit-unstage-file’)
-
-     When invoked inside a file-visiting buffer, then unstage all
-     changes to that file.  In a Magit buffer, unstage the file at point
-     if any.  Otherwise prompt for a file to be unstaged.  With a prefix
-     argument always prompt the user for a file, even in a file-visiting
-     buffer or when there is a file section at point.
-
-
-File: magit.info,  Node: Applying,  Next: Committing,  Prev: Staging and Unstaging,  Up: Manipulating
-
-6.3 Applying
-============
-
-Magit provides several "apply variants": stage, unstage, discard,
-reverse, and "regular apply".  At least when operating on a hunk they
-are all implemented using ‘git apply’, which is why they are called
-"apply variants".
-
-   • Stage.  Apply a change from the working tree to the index.  The
-     change also remains in the working tree.
-
-   • Unstage.  Remove a change from the index.  The change remains in
-     the working tree.
-
-   • Discard.  On a staged change, remove it from the working tree and
-     the index.  On an unstaged change, remove it from the working tree
-     only.
-
-   • Reverse.  Reverse a change in the working tree.  Both committed and
-     staged changes can be reversed.  Unstaged changes cannot be
-     reversed.  Discard them instead.
-
-   • Apply.  Apply a change to the working tree.  Both committed and
-     staged changes can be applied.  Unstaged changes cannot be applied
-     - as they already have been applied.
-
-   The previous section described the staging and unstaging commands.
-What follows are the commands which implement the remaining apply
-variants.
-
-‘a’     (‘magit-apply’)
-
-     Apply the change at point to the working tree.
-
-     With a prefix argument fallback to a 3-way merge.  Doing so causes
-     the change to be applied to the index as well.
-
-‘k’     (‘magit-discard’)
-
-     Remove the change at point from the working tree.
-
-‘v’     (‘magit-reverse’)
-
-     Reverse the change at point in the working tree.
-
-     With a prefix argument fallback to a 3-way merge.  Doing so causes
-     the change to be applied to the index as well.
-
-   With a prefix argument all apply variants attempt a 3-way merge when
-appropriate (i.e.  when ‘git apply’ is used internally).
-
-
-File: magit.info,  Node: Committing,  Next: Branching,  Prev: Applying,  Up: Manipulating
-
-6.4 Committing
-==============
-
-When the user initiates a commit, Magit calls ‘git commit’ without any
-arguments, so Git has to get it from the user.  It creates the file
-‘.git/COMMIT_EDITMSG’ and then opens that file in an editor.  Magit
-arranges for that editor to be the Emacsclient.  Once the user finishes
-the editing session, the Emacsclient exits and Git creates the commit
-using the file’s content as message.
-
-* Menu:
-
-* Initiating a Commit::
-* Editing Commit Messages::
-
-
-File: magit.info,  Node: Initiating a Commit,  Next: Editing Commit Messages,  Up: Committing
-
-6.4.1 Initiating a Commit
--------------------------
-
-Also see *note (gitman)git-commit::.
-
-‘c’     (‘magit-commit-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘c c’     (‘magit-commit’)
-
-     Create a new commit on ‘HEAD’.  With a prefix argument amend to the
-     commit at ‘HEAD’ instead.
-
-‘c a’     (‘magit-commit-amend’)
-
-     Amend the last commit.
-
-‘c e’     (‘magit-commit-extend’)
-
-     Amend the last commit, without editing the message.  With a prefix
-     argument keep the committer date, otherwise change it.  The option
-     ‘magit-commit-extend-override-date’ can be used to inverse the
-     meaning of the prefix argument.
-
-     Non-interactively respect the optional OVERRIDE-DATE argument and
-     ignore the option.
-
-‘c w’     (‘magit-commit-reword’)
-
-     Reword the last commit, ignoring staged changes.  With a prefix
-     argument keep the committer date, otherwise change it.  The option
-     ‘magit-commit-reword-override-date’ can be used to inverse the
-     meaning of the prefix argument.
-
-     Non-interactively respect the optional OVERRIDE-DATE argument and
-     ignore the option.
-
-‘c f’     (‘magit-commit-fixup’)
-
-     Create a fixup commit.
-
-     With a prefix argument the target commit has to be confirmed.
-     Otherwise the commit at point may be used without confirmation
-     depending on the value of option ‘magit-commit-squash-confirm’.
-
-‘c F’     (‘magit-commit-instant-fixup’)
-
-     Create a fixup commit and instantly rebase.
-
-‘c s’     (‘magit-commit-squash’)
-
-     Create a squash commit, without editing the squash message.
-
-     With a prefix argument the target commit has to be confirmed.
-     Otherwise the commit at point may be used without confirmation
-     depending on the value of option ‘magit-commit-squash-confirm’.
-
-‘c S’     (‘magit-commit-instant-squash’)
-
-     Create a squash commit and instantly rebase.
-
-‘c A’     (‘magit-commit-augment’)
-
-     Create a squash commit, editing the squash message.
-
-     With a prefix argument the target commit has to be confirmed.
-     Otherwise the commit at point may be used without confirmation
-     depending on the value of option ‘magit-commit-squash-confirm’.
-
- -- User Option: magit-commit-ask-to-stage
-
-     Whether to ask to stage all unstaged changes when committing and
-     nothing is staged.
-
- -- User Option: magit-commit-extend-override-date
-
-     Whether using ‘magit-commit-extend’ changes the committer date.
-
- -- User Option: magit-commit-reword-override-date
-
-     Whether using ‘magit-commit-reword’ changes the committer date.
-
- -- User Option: magit-commit-squash-confirm
-
-     Whether the commit targeted by squash and fixup has to be
-     confirmed.  When non-nil then the commit at point (if any) is used
-     as default choice.  Otherwise it has to be confirmed.  This option
-     only affects ‘magit-commit-squash’ and ‘magit-commit-fixup’.  The
-     "instant" variants always require confirmation because making an
-     error while using those is harder to recover from.
-
-
-File: magit.info,  Node: Editing Commit Messages,  Prev: Initiating a Commit,  Up: Committing
-
-6.4.2 Editing Commit Messages
------------------------------
-
-After initiating a commit as described in the previous section, two new
-buffers appear.  One shows the changes that are about to committed,
-while the other is used to write the message.  All regular editing
-commands are available in the commit message buffer.  This section only
-describes the additional commands.
-
-   Commit messages are edited in an edit session - in the background Git
-is waiting for the editor, in our case the Emacsclient, to save the
-commit message in a file (in most cases ‘.git/COMMIT_EDITMSG’) and then
-return.  If the Emacsclient returns with a non-zero exit status then Git
-does not create the commit.  So the most important commands are those
-for finishing and aborting the commit.
-
-‘C-c C-c’     (‘with-editor-finish’)
-
-     Finish the current editing session by returning with exit code 0.
-     Git then creates the commit using the message it finds in the file.
-
-‘C-c C-k’     (‘with-editor-cancel’)
-
-     Cancel the current editing session by returning with exit code 1.
-     Git then cancels the commit, but leaves the file untouched.
-
-   In addition to being used by Git, these messages may also be stored
-in a ring that persists until Emacs is closed.  By default the message
-is stored at the beginning and the end of an edit session (regardless of
-whether the session is finished successfully or was canceled).  It is
-sometimes useful to bring back messages from that ring.
-
-‘C-c M-s’     (‘git-commit-save-message’)
-
-     Save the current buffer content to the commit message ring.
-
-‘M-p’     (‘git-commit-prev-message’)
-
-     Cycle backward through the commit message ring, after saving the
-     current message to the ring.  With a numeric prefix ARG, go back
-     ARG comments.
-
-‘M-n’     (‘git-commit-next-message’)
-
-     Cycle forward through the commit message ring, after saving the
-     current message to the ring.  With a numeric prefix ARG, go back
-     ARG comments.
-
-   By default the diff for the changes that are about to be committed
-are automatically shown when invoking the commit.  When amending to an
-existing commit it may be useful to show either the changes that are
-about to be added to that commit or to show those changes together with
-those that are already committed.
-
-‘C-c C-d’     (‘magit-diff-while-committing’)
-
-     While committing, show the changes that are about to be committed.
-     While amending, invoking the command again toggles between showing
-     just the new changes or all the changes that will be committed.
-
-‘C-c C-w’     (‘magit-pop-revision-stack’)
-
-     This command inserts a representation of a revision into the
-     current buffer.  It can be used inside buffers used to write commit
-     messages but also in other buffers such as buffers used to edit
-     emails or ChangeLog files.
-
-     By default this command pops the revision which was last added to
-     the ‘magit-revision-stack’ and inserts it into the current buffer
-     according to ‘magit-pop-revision-stack-format’.  Revisions can be
-     put on the stack using ‘magit-copy-section-value’ and
-     ‘magit-copy-buffer-revision’.
-
-     If the stack is empty or with a prefix argument it instead reads a
-     revision in the minibuffer.  By using the minibuffer history this
-     allows selecting an item which was popped earlier or to insert an
-     arbitrary reference or revision without first pushing it onto the
-     stack.
-
-     When reading the revision from the minibuffer, then it might not be
-     possible to guess the correct repository.  When this command is
-     called inside a repository (e.g.  while composing a commit
-     message), then that repository is used.  Otherwise (e.g.  while
-     composing an email) then the repository recorded for the top
-     element of the stack is used (even though we insert another
-     revision).  If not called inside a repository and with an empty
-     stack, or with two prefix arguments, then read the repository in
-     the minibuffer too.
-
- -- User Option: magit-pop-revision-stack-format
-
-     This option controls how the command ‘magit-pop-revision-stack’
-     inserts a revision into the current buffer.
-
-     The entries on the stack have the format ‘(HASH TOPLEVEL)’ and this
-     option has the format ‘(POINT-FORMAT EOB-FORMAT INDEX-REGEXP)’, all
-     of which may be nil or a string (though either one of EOB-FORMAT or
-     POINT-FORMAT should be a string, and if INDEX-REGEXP is non-nil,
-     then the two formats should be too).
-
-     First INDEX-REGEXP is used to find the previously inserted entry,
-     by searching backward from point.  The first submatch must match
-     the index number.  That number is incremented by one, and becomes
-     the index number of the entry to be inserted.  If you don’t want to
-     number the inserted revisions, then use nil for INDEX-REGEXP.
-
-     If INDEX-REGEXP is non-nil then both POINT-FORMAT and EOB-FORMAT
-     should contain \"%N\", which is replaced with the number that was
-     determined in the previous step.
-
-     Both formats, if non-nil and after removing %N, are then expanded
-     using ‘git show –format=FORMAT ...’ inside TOPLEVEL.
-
-     The expansion of POINT-FORMAT is inserted at point, and the
-     expansion of EOB-FORMAT is inserted at the end of the buffer (if
-     the buffer ends with a comment, then it is inserted right before
-     that).
-
-   Some projects use pseudo headers in commit messages.  Magit colorizes
-such headers and provides some commands to insert such headers.
-
- -- User Option: git-commit-known-pseudo-headers
-
-     A list of Git pseudo headers to be highlighted.
-
-‘C-c C-a’     (‘git-commit-ack’)
-
-     Insert a header acknowledging that you have looked at the commit.
-
-‘C-c C-r’     (‘git-commit-review’)
-
-     Insert a header acknowledging that you have reviewed the commit.
-
-‘C-c C-s’     (‘git-commit-signoff’)
-
-     Insert a header to sign off the commit.
-
-‘C-c C-t’     (‘git-commit-test’)
-
-     Insert a header acknowledging that you have tested the commit.
-
-‘C-c C-o’     (‘git-commit-cc’)
-
-     Insert a header mentioning someone who might be interested.
-
-‘C-c C-p’     (‘git-commit-reported’)
-
-     Insert a header mentioning the person who reported the issue being
-     fixed by the commit.
-
-‘C-c C-i’     (‘git-commit-suggested’)
-
-     Insert a header mentioning the person who suggested the change.
-
-   ‘git-commit-mode’ is a minor mode that is only used to establish the
-above key bindings.  This allows using an arbitrary major mode when
-editing the commit message.  It’s even possible to use a different major
-mode in different repositories, which is useful when different projects
-impose different commit message conventions.
-
- -- User Option: git-commit-major-mode
-
-     The value of this option is the major mode used to edit Git commit
-     messages.
-
-   Because ‘git-commit-mode’ is a minor mode, we don’t use its mode hook
-to setup the buffer, except for the key bindings.  All other setup
-happens in the function ‘git-commit-setup’, which among other things
-runs the hook ‘git-commit-setup-hook’.  The following functions are
-suitable for that hook.
-
- -- User Option: git-commit-setup-hook
-
-     Hook run at the end of ‘git-commit-setup’.
-
- -- Function: magit-revert-buffers &optional force
-
-     Revert unmodified file-visiting buffers of the current repository.
-
-     If either ‘magit-revert-buffers’ is non-nil and
-     ‘inhibit-magit-revert’ is nil, or if optional FORCE is non-nil,
-     then revert all unmodified buffers that visit files being tracked
-     in the current repository.
-
- -- Function: git-commit-save-message
-
-     Save the current buffer content to the commit message ring.
-
- -- Function: git-commit-setup-changelog-support
-
-     After this function is called, ChangeLog entries are treated as
-     paragraphs.
-
- -- Function: git-commit-turn-on-auto-fill
-
-     Turn on ‘auto-fill-mode’ and set ‘fill-column’ to the value of
-     ‘git-commit-fill-column’.
-
- -- Function: git-commit-turn-on-flyspell
-
-     Turn on Flyspell mode.  Also prevent comments from being checked
-     and finally check current non-comment text.
-
- -- Function: git-commit-propertize-diff
-
-     Propertize the diff shown inside the commit message buffer.  Git
-     inserts such diffs into the commit message template when the
-     ‘--verbose’ argument is used.  Magit’s commit popup by default does
-     not offer that argument because the diff that is shown in a
-     separate buffer is more useful.  But some users disagree, which is
-     why this function exists.
-
- -- Function: with-editor-usage-message
-
-     Show usage information in the echo area.
-
-   Magit also helps with writing *good* commit messages by complaining
-when certain rules are violated.
-
- -- User Option: git-commit-summary-max-length
-
-     The intended maximal length of the summary line of commit messages.
-     Characters beyond this column are colorized to indicate that this
-     preference has been violated.
-
- -- User Option: git-commit-fill-column
-
-     Column beyond which automatic line-wrapping should happen in commit
-     message buffers.
-
- -- User Option: git-commit-finish-query-functions
-
-     List of functions called to query before performing commit.
-
-     The commit message buffer is current while the functions are
-     called.  If any of them returns nil, then the commit is not
-     performed and the buffer is not killed.  The user should then fix
-     the issue and try again.
-
-     The functions are called with one argument.  If it is non-nil then
-     that indicates that the user used a prefix argument to force
-     finishing the session despite issues.  Functions should usually
-     honor this wish and return non-nil.
-
- -- Function: git-commit-check-style-conventions
-
-     Check for violations of certain basic style conventions.  For each
-     violation ask the user if she wants to proceed anyway.  This makes
-     sure the summary line isn’t too long and that the second line is
-     empty.
-
-   To show no diff while committing remove ‘magit-commit-diff’ from
-‘server-switch-hook’.
-
-
-File: magit.info,  Node: Branching,  Next: Merging,  Prev: Committing,  Up: Manipulating
-
-6.5 Branching
-=============
-
-* Menu:
-
-* The Two Remotes::
-* The Branch Popup::
-* The Branch Config Popup::
-* Auxillary Branch Commands::
-
-
-File: magit.info,  Node: The Two Remotes,  Next: The Branch Popup,  Up: Branching
-
-6.5.1 The Two Remotes
----------------------
-
-The upstream branch of some local branch is the branch into which the
-commits on that local branch should eventually be merged, usually
-something like ‘origin/master’.  For the ‘master’ branch itself the
-upstream branch and the branch it is being pushed to, are usually the
-same remote branch.  But for a feature branch the upstream branch and
-the branch it is being pushed to should differ.
-
-   The commits on feature branches too should _eventually_ end up in a
-remote branch such as ‘origin/master’ or ‘origin/maint’.  Such a branch
-should therefore be used as the upstream.  But feature branches
-shouldn’t be pushed directly to such branches.  Instead a feature branch
-‘my-feature’ is usually pushed to ‘my-fork/my-feature’ or if you are a
-contributor ‘origin/my-feature’.  After the new feature has been
-reviewed, the maintainer merges the feature into ‘master’.  And finally
-‘master’ (not ‘my-feature’ itself) is pushed to ‘origin/master’.
-
-   But new features seldom are perfect on the first try, and so feature
-branches usually have to be reviewed, improved, and re-pushed several
-times.  Pushing should therefore be easy to do, and for that reason many
-Git users have concluded that it is best to use the remote branch to
-which the local feature branch is being pushed as its upstream.
-
-   But luckily Git has long ago gained support for a push-remote which
-can be configured separately from the upstream branch, using the
-variables ‘branch.<name>.pushRemote’ and ‘remote.pushDefault’.  So we no
-longer have to choose which of the two remotes should be used as "the
-remote".
-
-   Each of the fetching, pulling, and pushing popups features three
-commands that act on the current branch and some other branch.  Of
-these, ‘p’ is bound to a command which acts on the push-remote, ‘u’ is
-bound to a command which acts on the upstream, and ‘e’ is bound to a
-command which acts on any other branch.  The status buffer shows
-unpushed and unpulled commits for both the push-remote and the upstream.
-
-   It’s fairly simple to configure these two remotes.  The values of all
-the variables that are related to fetching, pulling, and pushing (as
-well as some other branch-related variables) can be inspected and
-changed using the popup ‘magit-branch-config-popup’, which is a
-sub-popup of many popups that deal with branches.  It is also possible
-to set the push-remote or upstream while pushing (see *note Pushing::).
-
-
-File: magit.info,  Node: The Branch Popup,  Next: The Branch Config Popup,  Prev: The Two Remotes,  Up: Branching
-
-6.5.2 The Branch Popup
-----------------------
-
-The popup ‘magit-branch-popup’ is used to create and checkout branches,
-and to make changes to existing branches.  It is not used to fetch,
-pull, merge, rebase, or push branches, i.e.  this popup deals with
-branches themselves, not with the commits reachable from them.  Those
-features are available from separate popups.
-
-‘b’     (‘magit-branch-popup’)
-
-     This prefix command shows the following suffix commands in a popup
-     buffer.
-
-     By default it also displays the values of some branch-related Git
-     variables and allows changing their values, just like the
-     specialized ‘magit-branch-config-popup’ does.
-
- -- User Option: magit-branch-popup-show-variables
-
-     Whether the ‘magit-branch-popup’ shows Git variables.  This
-     defaults to t to avoid changing key bindings.  When set to nil, no
-     variables are displayed directly in this popup, and the sub-popup
-     ‘magit-branch-config-popup’ has to be used instead to view and
-     change branch related variables.
-
-‘b C’     (‘magit-branch-config-popup’)
-
-     This command shows branch related variables in a separate popup.
-     By default this asks the user for which branch the variables should
-     be shown.  When ‘magit-branch-popup-show-variables’ is ‘nil’, then
-     it shows the variables for the current branch, unless a prefix
-     argument is used.
-
-‘b b’     (‘magit-checkout’)
-
-     Checkout a revision read in the minibuffer and defaulting to the
-     branch or arbitrary revision at point.  If the revision is a local
-     branch then that becomes the current branch.  If it is something
-     else then ‘HEAD’ becomes detached.  Checkout fails if the working
-     tree or the staging area contain changes.
-
-‘b n’     (‘magit-branch’)
-
-     Create a new branch.  The user is asked for a branch or arbitrary
-     revision to use as the starting point of the new branch.  When a
-     branch name is provided, then that becomes the upstream branch of
-     the new branch.  The name of the new branch is also read in the
-     minibuffer.
-
-     Also see option ‘magit-branch-prefer-remote-upstream’.
-
-‘b c’     (‘magit-branch-and-checkout’)
-
-     This command creates a new branch like ‘magit-branch’, but then
-     also checks it out.
-
-     Also see option ‘magit-branch-prefer-remote-upstream’.
-
-‘b l’     (‘magit-branch-checkout’)
-
-     This command checks out an existing or new local branch.  It reads
-     a branch name from the user offering all local branches and a
-     subset of remote branches as candidates.  Remote branches for which
-     a local branch by the same name exists are omitted from the list of
-     candidates.  The user can also enter a completely new branch name.
-
-        • If the user selects an existing local branch, then that is
-          checked out.
-
-        • If the user selects a remote branch, then it creates and
-          checks out a new local branch with the same name, and
-          configures the selected remote branch as the push target.
-
-        • If the user enters a new branch name, then it creates and
-          checks that out, after also reading the starting-point from
-          the user.
-
-     In the latter two cases the upstream is also set.  Whether it is
-     set to the chosen starting point or something else depends on the
-     value of ‘magit-branch-adjust-remote-upstream-alist’.
-
-‘b s’     (‘magit-branch-spinoff’)
-
-     This command creates and checks out a new branch starting at and
-     tracking the current branch.  That branch in turn is reset to the
-     last commit it shares with its upstream.  If the current branch has
-     no upstream or no unpushed commits, then the new branch is created
-     anyway and the previously current branch is not touched.
-
-     This is useful to create a feature branch after work has already
-     began on the old branch (likely but not necessarily "master").
-
-     If the current branch is a member of the value of option
-     ‘magit-branch-prefer-remote-upstream’ (which see), then the current
-     branch will be used as the starting point as usual, but the
-     upstream of the starting-point may be used as the upstream of the
-     new branch, instead of the starting-point itself.
-
-     If optional FROM is non-nil, then the source branch is reset to
-     ‘FROM~’, instead of to the last commit it shares with its upstream.
-     Interactively, FROM is only ever non-nil, if the region selects
-     some commits, and among those commits, FROM is the commit that is
-     the fewest commits ahead of the source branch.
-
-     The commit at the other end of the selection actually does not
-     matter, all commits between FROM and ‘HEAD’ are moved to the new
-     branch.  If FROM is not reachable from ‘HEAD’ or is reachable from
-     the source branch’s upstream, then an error is raised.
-
-‘b Y’     (‘magit-branch-pull-request’)
-
-     This command creates and configures a new branch from a Github
-     pull-request, creating and configuring a new remote if necessary.
-
-     The name of the local branch is the same as the name of the remote
-     branch that you are being asked to merge, unless the contributor
-     could not be bother to properly name the branch before opening the
-     pull-request.  The most likely such case is when you are being
-     asked to merge something like "fork/master" into "origin/master".
-     In such cases the local branch will be named "pr-N", where ‘N’ is
-     the pull-request number.
-
-     These variables are always set by this command:
-
-        • ‘branch.<name>.pullRequest’ is set to the pull-request number.
-
-        • ‘branch.<name>.pullRequestRemote’ is set to the remote on
-          which the pull-request branch is located.
-
-        • ‘branch.<name>.pushRemote’ is set to the same remote as
-          ‘branch.<name>.pullRequestRemote’ if that is possible,
-          otherwise it is set to the upstream remote.
-
-        • ‘branch.<name>.description’ is set to the pull-request title.
-
-        • ‘branch.<name>.rebase’ is set to ‘true’ because there should
-          be no merge commits among the commits in a pull-request.
-
-     This command also configures the upstream and the push-remote of
-     the local branch that it creates.
-
-     The branch against which the pull-request was opened, is always
-     used as the upstream.  This makes it easy to see what commits you
-     are being asked to merge in the section titled something like
-     "Unmerged into origin/master".
-
-     Like for other commands that create a branch it depends on the
-     option ‘magit-branch-prefer-remote-upstream’ whether the remote
-     branch itself or the respective local branch is used as the
-     upstream, so this section may also be titled e.g.  "Unmerged into
-     master".
-
-     When necessary and possible, then the remote pull-request branch is
-     configured to be used as the push-target.  This makes it easy to
-     see what further changes the contributor has made since you last
-     reviewed their changes in the section titled something like
-     "Unpulled from origin/new-feature" or "Unpulled from
-     fork/new-feature".
-
-        • If the pull-request branch is located in the upstream
-          repository, then you probably have set ‘remote.pushDefault’ to
-          that repository.  However some users like to set that variable
-          to their personal fork, even if they have push access to the
-          upstream, so ‘branch.<name>.pushRemote’ is set anyway.
-
-        • If the pull-request branch is located inside a fork, then you
-          are usually able to push to that branch, because Github by
-          default allows the recipient of a pull-request to push to the
-          remote pull-request branch even if it is located in a fork.
-          The contributor has to explicitly disable this.
-
-             • If you are not allowed to push to the pull-request branch
-               on the fork, then a branch by the same name located in
-               the upstream repository is configured as the push-target.
-
-             • A — sadly rather common — special case is when the
-               contributor didn’t bother to use a dedicated branch for
-               the pull-request.
-
-               The most likely such case is when you are being asked to
-               merge something like "fork/master" into "origin/master".
-               The special push permission mentioned above is never
-               granted for the branch that is the repository’s default
-               branch, and that would almost certainly be the case in
-               this scenario.
-
-               To enable you to easily push somewhere anyway, the local
-               branch is named "pr-N" (where ‘N’ is the pull-request
-               number) and the upstream repository is used as the
-               push-remote.
-
-             • Finally, if you are allowed to push to the pull-request
-               branch and the contributor had the foresight to use a
-               dedicated branch, then the fork is configured as the
-               push-remote.
-
-          The push-remote is configured using
-          ‘branch.<name>.pushRemote’, even if the used value is
-          identical to that of ‘remote.pushDefault’, just in case you
-          change the value of the latter later on.  Additionally the
-          variable ‘branch.<name>.pullRequestRemote’ is set to the
-          remote on which the pull-request branch is located.
-
-     When you later delete the local pull-request branch, then you are
-     offered to also delete the corresponding remote, provided it is not
-     the upstream remote and that the tracking branch that corresponds
-     to the deleted branch is the only remaining tracked branch.  If you
-     don’t confirm, then only the tracking branch itself is deleted in
-     addition to the local branch.
-
-     Do not delete the tracking branch instead of the local branch.  The
-     cleanup mentioned in the previous paragraph is not performed if you
-     do that.
-
-‘b y’     (‘magit-checkout-pull-request’)
-
-     This command creates and configures a new branch from a pull
-     request, the same way ‘magit-branch-pull-request’ does.
-     Additionally it checks out the new branch.
-
-‘b x’     (‘magit-branch-reset’)
-
-     This command resets a branch, defaulting to the branch at point, to
-     the tip of another branch or any other commit.
-
-     When the branch being reset is the current branch, then a hard
-     reset is performed.  If there are any uncommitted changes, then the
-     user has to confirm the reset because those changes would be lost.
-
-     This is useful when you have started work on a feature branch but
-     realize it’s all crap and want to start over.
-
-     When resetting to another branch and a prefix argument is used,
-     then the target branch is set as the upstream of the branch that is
-     being reset.
-
-‘b k’     (‘magit-branch-delete’)
-
-     Delete one or multiple branches.  If the region marks multiple
-     branches, then offer to delete those.  Otherwise, prompt for a
-     single branch to be deleted, defaulting to the branch at point.
-
-‘b r’     (‘magit-branch-rename’)
-
-     Rename a branch.  The branch and the new name are read in the
-     minibuffer.  With prefix argument the branch is renamed even if
-     that name conflicts with an existing branch.
-
- -- User Option: magit-branch-read-upstream-first
-
-     When creating a branch, whether to read the upstream branch before
-     the name of the branch that is to be created.  The default is
-     ‘nil’, and I recommend you leave it at that.
-
- -- User Option: magit-branch-prefer-remote-upstream
-
-     This option specifies whether remote upstreams are favored over
-     local upstreams when creating new branches.
-
-     When a new branch is created, then the branch, commit, or stash at
-     point is suggested as the starting point of the new branch, or if
-     there is no such revision at point the current branch.  In either
-     case the user may choose another starting point.
-
-     If the chosen starting point is a branch, then it may also be set
-     as the upstream of the new branch, depending on the value of the
-     Git variable ‘branch.autoSetupMerge’.  By default this is done for
-     remote branches, but not for local branches.
-
-     You might prefer to always use some remote branch as upstream.  If
-     the chosen starting point is (1) a local branch, (2) whose name
-     matches a member of the value of this option, (3) the upstream of
-     that local branch is a remote branch with the same name, and (4)
-     that remote branch can be fast-forwarded to the local branch, then
-     the chosen branch is used as starting point, but its own upstream
-     is used as the upstream of the new branch.
-
-     Members of this option’s value are treated as branch names that
-     have to match exactly unless they contain a character that makes
-     them invalid as a branch name.  Recommended characters to use to
-     trigger interpretation as a regexp are "*" and "^".  Some other
-     characters which you might expect to be invalid, actually are not,
-     e.g.  ".+$" are all perfectly valid.  More precisely, if ‘git
-     check-ref-format –branch STRING’ exits with a non-zero status, then
-     treat STRING as a regexp.
-
-     Assuming the chosen branch matches these conditions you would end
-     up with with e.g.:
-
-          feature --upstream--> origin/master
-
-     instead of
-
-          feature --upstream--> master --upstream--> origin/master
-
-     Which you prefer is a matter of personal preference.  If you do
-     prefer the former, then you should add branches such as ‘master’,
-     ‘next’, and ‘maint’ to the value of this options.
-
- -- User Option: magit-branch-adjust-remote-upstream-alist
-
-     The value of this option is an alist of branches to be used as the
-     upstream when branching a remote branch.
-
-     When creating a local branch from an ephemeral branch located on a
-     remote, e.g.  a feature or hotfix branch, then that remote branch
-     should usually not be used as the upstream branch, since the
-     push-remote already allows accessing it and having both the
-     upstream and the push-remote reference the same related branch
-     would be wasteful.  Instead a branch like "maint" or "master"
-     should be used as the upstream.
-
-     This option allows specifying the branch that should be used as the
-     upstream when branching certain remote branches.  The value is an
-     alist of the form ‘((UPSTREAM . RULE)...)’.  The first matching
-     element is used, the following elements are ignored.
-
-     UPSTREAM is the branch to be used as the upstream for branches
-     specified by RULE.  It can be a local or a remote branch.
-
-     RULE can either be a regular expression, matching branches whose
-     upstream should be the one specified by UPSTREAM.  Or it can be a
-     list of the only branches that should *not* use UPSTREAM; all other
-     branches will.  Matching is done after stripping the remote part of
-     the name of the branch that is being branched from.
-
-     If you use a finite set of non-ephemeral branches across all your
-     repositories, then you might use something like:
-
-          (("origin/master" "master" "next" "maint"))
-
-     Or if the names of all your ephemeral branches contain a slash, at
-     least in some repositories, then a good value could be:
-
-          (("origin/master" . "/"))
-
-     Of course you can also fine-tune:
-
-          (("origin/maint" . "\\`hotfix/")
-           ("origin/master" . "\\`feature/"))
-
- -- Command: magit-branch-orphan
-
-     This command creates and checks out a new orphan branch with
-     contents from a given revision.
-
- -- Command: magit-branch-or-checkout
-
-     This command is a hybrid between ‘magit-checkout’ and
-     ‘magit-branch-and-checkout’ and is intended as a replacement for
-     the former in ‘magit-branch-popup’.
-
-     It first asks the user for an existing branch or revision.  If the
-     user input actually can be resolved as a branch or revision, then
-     it checks that out, just like ‘magit-checkout’ would.
-
-     Otherwise it creates and checks out a new branch using the input as
-     its name.  Before doing so it reads the starting-point for the new
-     branch.  This is similar to what ‘magit-branch-and-checkout’ does.
-
-     To use this command instead of ‘magit-checkout’ add this to your
-     init file:
-
-          (magit-remove-popup-key 'magit-branch-popup :action ?b)
-          (magit-define-popup-action 'magit-branch-popup
-            ?b "Checkout" 'magit-branch-or-checkout
-            'magit-branch t)
-
-
-File: magit.info,  Node: The Branch Config Popup,  Next: Auxillary Branch Commands,  Prev: The Branch Popup,  Up: Branching
-
-6.5.3 The Branch Config Popup
------------------------------
-
- -- Command: magit-branch-config-popup
-
-     This prefix command shows the following branch-related Git
-     variables in a popup buffer.  The values can be changed from that
-     buffer.
-
-     This popup is a sub-popup of several popups that deal with
-     branches, including ‘magit-branch-popup’, ‘magit-pull-popup’,
-     ‘magit-fetch-popup’, ‘magit-pull-and-fetch-popup’, and
-     ‘magit-push-popup’.  In all of these popups "C" is bound to this
-     popup.
-
-   The following variables are used to configure a specific branch.  The
-values are being displayed for the current branch (if any).  To change
-the value for another branch invoke ‘magit-branch-config-popup’ with a
-prefix argument.
-
- -- Variable: branch.NAME.merge
-
-     Together with ‘branch.NAME.remote’ this variable defines the
-     upstream branch of the local branch named NAME.  The value of this
-     variable is the full reference of the upstream _branch_.
-
- -- Variable: branch.NAME.remote
-
-     Together with ‘branch.NAME.merge’ this variable defines the
-     upstream branch of the local branch named NAME.  The value of this
-     variable is the name of the upstream _remote_.
-
- -- Variable: branch.NAME.rebase
-
-     This variable controls whether pulling into the branch named NAME
-     is done by rebasing or by merging the fetched branch.
-
-        • When ‘true’ then pulling is done by rebasing.
-
-        • When ‘false’ then pulling is done by merging.
-
-        • When undefined then the value of ‘pull.rebase’ is used.  The
-          default of that variable is ‘false’.
-
- -- Variable: branch.NAME.pushRemote
-
-     This variable specifies the remote that the branch named NAME is
-     usually pushed to.  The value has to be the name of an existing
-     remote.
-
-     It is not possible to specify the name of _branch_ to push the
-     local branch to.  The name of the remote branch is always the same
-     as the name of the local branch.
-
-     If this variable is undefined but ‘remote.pushDefault’ is defined,
-     then the value of the latter is used.  By default
-     ‘remote.pushDefault’ is undefined.
-
- -- Variable: branch.NAME.description
-
-     This variable can be used to describe the branch named NAME.  That
-     description is used e.g.  when turning the branch into a series of
-     patches.
-
-   The following variables specify defaults which are used if the above
-branch-specific variables are not set.
-
- -- Variable: pull.rebase
-
-     This variable specifies whether pulling is done by rebasing or by
-     merging.  It can be overwritten using ‘branch.NAME.rebase’.
-
-        • When ‘true’ then pulling is done by rebasing.
-
-        • When ‘false’ (the default) then pulling is done by merging.
-
-     Since it is never a good idea to merge the upstream branch into a
-     feature or hotfix branch and most branches are such branches, you
-     should consider setting this to ‘true’, and ‘branch.master.rebase’
-     to ‘false’.
-
- -- Variable: remote.pushDefault
-
-     This variable specifies what remote the local branches are usually
-     pushed to.  This can be overwritten per branch using
-     ‘branch.NAME.pushRemote’.
-
-   The following variables are used during the creation of a branch and
-control whether the various branch-specific variables are automatically
-set at this time.
-
- -- Variable: branch.autoSetupMerge
-
-     This variable specifies under what circumstances creating a branch
-     NAME should result in the variables ‘branch.NAME.merge’ and
-     ‘branch.NAME.remote’ being set according to the starting point used
-     to create the branch.  If the starting point isn’t a branch, then
-     these variables are never set.
-
-        • When ‘always’ then the variables are set regardless of whether
-          the starting point is a local or a remote branch.
-
-        • When ‘true’ (the default) then the variables are set when the
-          starting point is a remote branch, but not when it is a local
-          branch.
-
-        • When ‘false’ then the variables are never set.
-
- -- Variable: branch.autoSetupRebase
-
-     This variable specifies whether creating a branch NAME should
-     result in the variable ‘branch.NAME.rebase’ being set to ‘true’.
-
-        • When ‘always’ then the variable is set regardless of whether
-          the starting point is a local or a remote branch.
-
-        • When ‘local’ then the variable are set when the starting point
-          is a local branch, but not when it is a remote branch.
-
-        • When ‘remote’ then the variable are set when the starting
-          point is a remote branch, but not when it is a local branch.
-
-        • When ‘never’ (the default) then the variable is never set.
-
-   Note that the respective commands always change the repository-local
-values.  If you want to change the global value, which is used when the
-local value is undefined, then you have to do so on the command line,
-e.g.:
-
-     git config --global remote.autoSetupMerge always
-
-   For more information about these variables you should also see
-
-   *note (gitman)git-config::.  Also see *note (gitman)git-branch::.  ,
-*note (gitman)git-checkout::.  and *note Pushing::.
-
- -- User Option: magit-prefer-remote-upstream
-
-     This option controls whether commands that read a branch from the
-     user and then set it as the upstream branch, offer a local or a
-     remote branch as default completion candidate, when they have the
-     choice.
-
-     This affects all commands that use ‘magit-read-upstream-branch’ or
-     ‘magit-read-starting-point’, which includes all commands that
-     change the upstream and many which create new branches.
-
-
-File: magit.info,  Node: Auxillary Branch Commands,  Prev: The Branch Config Popup,  Up: Branching
-
-6.5.4 Auxillary Branch Commands
--------------------------------
-
-These commands are not available from the branch popup by default.
-
- -- Command: magit-branch-shelve
-
-     This command shelve a branch.  This is done by deleting the branch,
-     and creating a new reference "refs/shelved/BRANCH-NAME" pointing at
-     the same commit as the branch pointed at.  If the deleted branch
-     had a reflog, then that is preserved as the reflog of the new
-     reference.
-
-     This is useful if you want to move a branch out of sight, but are
-     not ready to completely discard it yet.
-
- -- Command: magit-branch-unshelve
-
-     This command unshelve a branch that was previously shelved using
-     ‘magit-branch-shelve’.  This is done by deleting the reference
-     "refs/shelved/BRANCH-NAME" and creating a branch "BRANCH-NAME"
-     pointing at the same commit as the deleted reference pointed at.
-     If the deleted reference had a reflog, then that is restored as the
-     reflog of the branch.
-
-
-File: magit.info,  Node: Merging,  Next: Resolving Conflicts,  Prev: Branching,  Up: Manipulating
-
-6.6 Merging
-===========
-
-Also see *note (gitman)git-merge::.  For information on how to resolve
-merge conflicts see the next section.
-
-‘m’     (‘magit-merge-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   When no merge is in progress, then the popup buffer features the
-following commands.
-
-‘m m’     (‘magit-merge’)
-
-     This command merges another branch or an arbitrary revision into
-     the current branch.  The branch or revision to be merged is read in
-     the minibuffer and defaults to the branch at point.
-
-     Unless there are conflicts or a prefix argument is used, then the
-     resulting merge commit uses a generic commit message, and the user
-     does not get a chance to inspect or change it before the commit is
-     created.  With a prefix argument this does not actually create the
-     merge commit, which makes it possible to inspect how conflicts were
-     resolved and to adjust the commit message.
-
-‘m e’     (‘magit-merge-editmsg’)
-
-     This command merges another branch or an arbitrary revision into
-     the current branch and opens a commit message buffer, so that the
-     user can make adjustments.  The commit is not actually created
-     until the user finishes with ‘C-c C-c’.
-
-‘m n’     (‘magit-merge-nocommit’)
-
-     This command merges another branch or an arbitrary revision into
-     the current branch, but does not actually create the merge commit.
-     The user can then further adjust the merge, even when automatic
-     conflict resolution succeeded and/or adjust the commit message.
-
-‘m a’     (‘magit-merge-absorb’)
-
-     This command merges another local branch into the current branch
-     and then removes the former.
-
-     Before the source branch is merged, it is first force pushed to its
-     push-remote, provided the respective remote branch already exists.
-     This ensures that the respective pull-request (if any) won’t get
-     stuck on some obsolete version of the commits that are being
-     merged.  Finally, if ‘magit-branch-pull-request’ was used to create
-     the merged branch, then the respective remote branch is also
-     removed.
-
-‘m i’     (‘magit-merge-into’)
-
-     This command merges the current branch into another local branch
-     and then removes the former.  The latter becomes the new current
-     branch.
-
-     Before the source branch is merged, it is first force pushed to its
-     push-remote, provided the respective remote branch already exists.
-     This ensures that the respective pull-request (if any) won’t get
-     stuck on some obsolete version of the commits that are being
-     merged.  Finally, if ‘magit-branch-pull-request’ was used to create
-     the merged branch, then the respective remote branch is also
-     removed.
-
-‘m s’     (‘magit-merge-squash’)
-
-     This command squashes the changes introduced by another branch or
-     an arbitrary revision into the current branch.  This only applies
-     the changes made by the squashed commits.  No information is
-     preserved that would allow creating an actual merge commit.
-     Instead of this command you should probably use a command from the
-     apply popup.
-
-‘m p’     (‘magit-merge-preview’)
-
-     This command shows a preview of merging another branch or an
-     arbitrary revision into the current branch.
-
-   When a merge is in progress, then the popup buffer features these
-commands instead.
-
-‘m m’     (‘magit-merge’)
-
-     After the user resolved conflicts, this command proceeds with the
-     merge.  If some conflicts weren’t resolved, then this command
-     fails.
-
-‘m a’     (‘magit-merge-abort’)
-
-     This command aborts the current merge operation.
-
-
-File: magit.info,  Node: Resolving Conflicts,  Next: Rebasing,  Prev: Merging,  Up: Manipulating
-
-6.7 Resolving Conflicts
-=======================
-
-When merging branches (or otherwise combining or changing history)
-conflicts can occur.  If you edited two completely different parts of
-the same file in two branches and then merge one of these branches into
-the other, then Git can resolve that on its own, but if you edit the
-same area of a file, then a human is required to decide how the two
-versions, or "sides of the conflict", are to be combined into one.
-
-   Here we can only provide a brief introduction to the subject and
-point you toward some tools that can help.  If you are new to this, then
-please also consult Git’s own documentation as well as other resources.
-
-   If a file has conflicts and Git cannot resolve them by itself, then
-it puts both versions into the affected file along with special markers
-whose purpose is to denote the boundaries of the unresolved part of the
-file and between the different versions.  These boundary lines begin
-with the strings consisting of six times the same character, one of ‘<’,
-‘|’, ‘=’ and ‘>’ and are followed by information about the source of the
-respective versions, e.g.:
-
-     <<<<<<< HEAD
-     Take the blue pill.
-     =======
-     Take the red pill.
-     >>>>>>> feature
-
-   In this case you have chosen to take the red pill on one branch and
-on another you picked the blue pill.  Now that you are merging these two
-diverging branches, Git cannot possibly know which pill you want to
-take.
-
-   To resolve that conflict you have to create a version of the affected
-area of the file by keeping only one of the sides, possibly by editing
-it in order to bring in the changes from the other side, remove the
-other versions as well as the markers, and then stage the result.  A
-possible resolution might be:
-
-     Take both pills.
-
-   Often it is useful to see not only the two sides of the conflict but
-also the "original" version from before the same area of the file was
-modified twice on different branches.  Instruct Git to insert that
-version as well by running this command once:
-
-     git config --global merge.conflictStyle diff3
-
-   The above conflict might then have looked like this:
-
-     <<<<<<< HEAD
-     Take the blue pill.
-     ||||||| merged common ancestors
-     Take either the blue or the red pill, but not both.
-     =======
-     Take the red pill.
-     >>>>>>> feature
-
-   If that were the case, then the above conflict resolution would not
-have been correct, which demonstrates why seeing the original version
-alongside the conflicting versions can be useful.
-
-   You can perform the conflict resolution completely by hand, but Emacs
-also provides some packages that help in the process: Smerge, Ediff
-(*note (ediff)Top::), and Emerge (*note (emacs)Emerge::).  Magit does
-not provide its own tools for conflict resolution, but it does make
-using Smerge and Ediff more convenient.  (Ediff supersedes Emerge, so
-you probably don’t want to use the latter anyway.)
-
-   In the Magit status buffer, files with unresolved conflicts are
-listed in the "Unstaged changes" and/or "Staged changes" sections.  They
-are prefixed with the word "unmerged", which in this context essentially
-is a synonym for "unresolved".
-
-   Pressing ‘RET’ while point is on such a file section shows a buffer
-visiting that file, turns on ‘smerge-mode’ in that buffer, and places
-point inside the first area with conflicts.  You should then resolve
-that conflict using regular edit commands and/or Smerge commands.
-
-   Unfortunately Smerge does not have a manual, but you can get a list
-of commands and binding ‘C-c ^ C-h’ and press ‘RET’ while point is on a
-command name to read its documentation.
-
-   Normally you would edit one version and then tell Smerge to keep only
-that version.  Use ‘C-c ^ m’ (‘smerge-keep-mine’) to keep the ‘HEAD’
-version or ‘C-c ^ o’ (‘smerge-keep-other’) to keep the version that
-follows "|||||||".  Then use ‘C-c ^ n’ to move to the next conflicting
-area in the same file.  Once you are done resolving conflicts, return to
-the Magit status buffer.  The file should now be shown as "modified", no
-longer as "unmerged", because Smerge automatically stages the file when
-you save the buffer after resolving the last conflict.
-
-   Alternatively you could use Ediff, which uses separate buffers for
-the different versions of the file.  To resolve conflicts in a file
-using Ediff press ‘e’ while point is on such a file in the status
-buffer.
-
-   Ediff can be used for other purposes as well.  For more information
-on how to enter Ediff from Magit, see *note Ediffing::.  Explaining how
-to use Ediff is beyond the scope of this manual, instead see *note
-(ediff)Top::.
-
-   If you are unsure whether you should Smerge or Ediff, then use the
-former.  It is much easier to understand and use, and except for truly
-complex conflicts, the latter is usually overkill.
-
-
-File: magit.info,  Node: Rebasing,  Next: Cherry Picking,  Prev: Resolving Conflicts,  Up: Manipulating
-
-6.8 Rebasing
-============
-
-Also see *note (gitman)git-rebase::.  For information on how to resolve
-conflicts that occur during rebases see the preceding section.
-
-‘r’     (‘magit-rebase-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   When no rebase is in progress, then the popup buffer features the
-following commands.
-
-   Using one of these commands _starts_ a rebase sequence.  Git might
-then stop somewhere along the way, either because you told it to do so,
-or because applying a commit failed due to a conflict.  When that
-happens, then the status buffer shows information about the rebase
-sequence which is in progress in a section similar to a log section.
-See *note Information About In-Progress Rebase::.
-
-‘r p’     (‘magit-rebase-onto-pushremote’)
-
-     Rebase the current branch onto ‘branch.<name>.pushRemote’.  If that
-     variable is unset, then rebase onto ‘remote.pushDefault’.
-
-‘r u’     (‘magit-rebase-onto-upstream’)
-
-     Rebase the current branch onto its upstream branch.
-
-‘r e’     (‘magit-rebase’)
-
-     Rebase the current branch onto a branch read in the minibuffer.
-     All commits that are reachable from head but not from the selected
-     branch TARGET are being rebased."
-
-‘r s’     (‘magit-rebase-subset’)
-
-     Start a non-interactive rebase sequence with commits from START to
-     ‘HEAD’ onto NEWBASE.  START has to be selected from a list of
-     recent commits.
-
-   By default Magit uses the ‘--autostash’ argument, which causes
-uncommitted changes to be stored in a stash before the rebase begins.
-These changes are restored after the rebase completes and if possible
-the stash is removed.  If the stash does not apply cleanly, then the
-stash is not removed.  In case something goes wrong when resolving the
-conflicts, this allows you to start over.
-
-   Even though one of the actions is dedicated to interactive rebases,
-the popup also features the infix argument ‘--interactive’.  This can be
-used to turn one of the other, non-interactive rebase variants into an
-interactive rebase.
-
-   For example if you want to clean up a feature branch and at the same
-time rebase it onto ‘master’, then you could use ‘r-iu’.  But we
-recommend that you instead do that in two steps.  First use ‘ri’ to
-cleanup the feature branch, and then in a second step ‘ru’ to rebase it
-onto ‘master’.  That way if things turn out to be more complicated than
-you thought and/or you make a mistake and have to start over, then you
-only have to redo half the work.
-
-   Explicitly enabling ‘--interactive’ won’t have an effect on the
-following commands as they always use that argument anyway, even if it
-is not enabled in the popup.
-
-‘r i’     (‘magit-rebase-interactive’)
-
-     Start an interactive rebase sequence.
-
-‘r f’     (‘magit-rebase-autosquash’)
-
-     Combine squash and fixup commits with their intended targets.
-
-‘r m’     (‘magit-rebase-edit-commit’)
-
-     Edit a single older commit using rebase.
-
-‘r w’     (‘magit-rebase-reword-commit’)
-
-     Reword a single older commit using rebase.
-
-‘r k’     (‘magit-rebase-remove-commit’)
-
-     Remove a single older commit using rebase.
-
-   When a rebase is in progress, then the popup buffer features these
-commands instead.
-
-‘r r’     (‘magit-rebase-continue’)
-
-     Restart the current rebasing operation.
-
-     In some cases this pops up a commit message buffer for you do edit.
-     With a prefix argument the old message is reused as-is.
-
-‘r s’     (‘magit-rebase-skip’)
-
-     Skip the current commit and restart the current rebase operation.
-
-‘r e’     (‘magit-rebase-edit’)
-
-     Edit the todo list of the current rebase operation.
-
-‘r a’     (‘magit-rebase-abort’)
-
-     Abort the current rebase operation, restoring the original branch.
-
-* Menu:
-
-* Editing Rebase Sequences::
-* Information About In-Progress Rebase::
-
-
-File: magit.info,  Node: Editing Rebase Sequences,  Next: Information About In-Progress Rebase,  Up: Rebasing
-
-6.8.1 Editing Rebase Sequences
-------------------------------
-
-‘C-c C-c’     (‘with-editor-finish’)
-
-     Finish the current editing session by returning with exit code 0.
-     Git then uses the rebase instructions it finds in the file.
-
-‘C-c C-k’     (‘with-editor-cancel’)
-
-     Cancel the current editing session by returning with exit code 1.
-     Git then forgoes starting the rebase sequence.
-
-‘RET’     (‘git-rebase-show-commit’)
-
-     Show the commit on the current line in another buffer and select
-     that buffer.
-
-‘SPC’     (‘git-rebase-show-or-scroll-up’)
-
-     Show the commit on the current line in another buffer without
-     selecting that buffer.  If the revision buffer is already visible
-     in another window of the current frame, then instead scroll that
-     window up.
-
-‘DEL’     (‘git-rebase-show-or-scroll-down’)
-
-     Show the commit on the current line in another buffer without
-     selecting that buffer.  If the revision buffer is already visible
-     in another window of the current frame, then instead scroll that
-     window down.
-
-‘p’     (‘git-rebase-backward-line’)
-
-     Move to previous line.
-
-‘n’     (‘forward-line’)
-
-     Move to next line.
-
-‘M-p’     (‘git-rebase-move-line-up’)
-
-     Move the current commit (or command) up.
-
-‘M-n’     (‘git-rebase-move-line-down’)
-
-     Move the current commit (or command) down.
-
-‘r’     (‘git-rebase-reword’)
-
-     Edit message of commit on current line.
-
-‘e’     (‘git-rebase-edit’)
-
-     Stop at the commit on the current line.
-
-‘s’     (‘git-rebase-squash’)
-
-     Meld commit on current line into previous commit, and edit message.
-
-‘f’     (‘git-rebase-fixup’)
-
-     Meld commit on current line into previous commit, discarding the
-     current commit’s message.
-
-‘k’     (‘git-rebase-kill-line’)
-
-     Kill the current action line.
-
-‘c’     (‘git-rebase-pick’)
-
-     Use commit on current line.
-
-‘x’     (‘git-rebase-exec’)
-
-     Insert a shell command to be run after the proceeding commit.
-
-     If there already is such a command on the current line, then edit
-     that instead.  With a prefix argument insert a new command even
-     when there already is one on the current line.  With empty input
-     remove the command on the current line, if any.
-
-‘y’     (‘git-rebase-insert’)
-
-     Read an arbitrary commit and insert it below current line.
-
-‘C-x u’     (‘git-rebase-undo’)
-
-     Undo some previous changes.  Like ‘undo’ but works in read-only
-     buffers.
-
- -- User Option: git-rebase-auto-advance
-
-     Whether to move to next line after changing a line.
-
- -- User Option: git-rebase-show-instructions
-
-     Whether to show usage instructions inside the rebase buffer.
-
- -- User Option: git-rebase-confirm-cancel
-
-     Whether confirmation is required to cancel.
-
-
-File: magit.info,  Node: Information About In-Progress Rebase,  Prev: Editing Rebase Sequences,  Up: Rebasing
-
-6.8.2 Information About In-Progress Rebase
-------------------------------------------
-
-While a rebase sequence is in progress, the status buffer features a
-section that lists the commits that have already been applied as well as
-the commits that still have to be applied.
-
-   The commits are split in two halves.  When rebase stops at a commit,
-either because the user has to deal with a conflict or because s/he
-explicitly requested that rebase stops at that commit, then point is
-placed on the commit that separates the two groups, i.e.  on ‘HEAD’.
-The commits above it have not been applied yet, while the ‘HEAD’ and the
-commits below it have already been applied.  In between these two groups
-of applied and yet-to-be applied commits, there sometimes is a commit
-which has been dropped.
-
-   Each commit is prefixed with a word and these words are additionally
-shown in different colors to indicate the status of the commits.
-
-   The following colors are used:
-
-   • Yellow commits have not been applied yet.
-
-   • Gray commits have already been applied.
-
-   • The blue commit is the ‘HEAD’ commit.
-
-   • The green commit is the commit the rebase sequence stopped at.  If
-     this is the same commit as ‘HEAD’ (e.g.  because you haven’t done
-     anything yet after rebase stopped at the commit, then this commit
-     is shown in blue, not green).  There can only be a green *and* a
-     blue commit at the same time, if you create one or more new commits
-     after rebase stops at a commit.
-
-   • Red commits have been dropped.  They are shown for reference only,
-     e.g.  to make it easier to diff.
-
-   Of course these colors are subject to the color-theme in use.
-
-   The following words are used:
-
-   • Commits prefixed with ‘pick’, ‘reword’, ‘edit’, ‘squash’, and
-     ‘fixup’ have not been applied yet.  These words have the same
-     meaning here as they do in the buffer used to edit the rebase
-     sequence.  See *note Editing Rebase Sequences::.
-
-   • Commits prefixed with ‘done’ and ‘onto’ have already been applied.
-     It is possible for such a commit to be the ‘HEAD’, in which case it
-     is blue.  Otherwise it is grey.
-
-        • The commit prefixed with ‘onto’ is the commit on top of which
-          all the other commits are being re-applied.  This commit
-          itself did not have to be re-applied, it is the commit rebase
-          did rewind to before starting to re-apply other commits.
-
-        • Commits prefixed with ‘done’ have already been re-applied.
-          This includes commits that have been re-applied but also new
-          commits that you have created during the rebase.
-
-   • All other commits, those not prefixed with any of the above words,
-     are in some way related to the commit at which rebase stopped.
-
-     To determine whether a commit is related to the stopped-at commit
-     their hashes, trees and patch-ids (1) are being compared.  The
-     commit message is not used for this purpose.
-
-     Generally speaking commits that are related to the stopped-at
-     commit can have any of the used colors, though not all color/word
-     combinations are possible.
-
-     Words used for stopped-at commits are:
-
-        • When a commit is prefixed with ‘void’, then that indicates
-          that Magit knows for sure that all the changes in that commit
-          have been applied using several new commits.  This commit is
-          no longer reachable from ‘HEAD’, and it also isn’t one of the
-          commits that will be applied when resuming the session.
-
-        • When a commit is prefixed with ‘join’, then that indicates
-          that the rebase sequence stopped at that commit due to a
-          conflict - you now have to join (merge) the changes with what
-          has already been applied.  In a sense this is the commit
-          rebase stopped at, but while its effect is already in the
-          index and in the worktree (with conflict markers), the commit
-          itself has not actually been applied yet (it isn’t the
-          ‘HEAD’).  So it is shown in yellow, like the other commits
-          that still have to be applied.
-
-        • When a commit is prefixed with ‘stop’ or a _blue_ or _green_
-          ‘same’, then that indicates that rebase stopped at this
-          commit, that it is still applied or has been applied again,
-          and that at least its patch-id is unchanged.
-
-             • When a commit is prefixed with ‘stop’, then that
-               indicates that rebase stopped at that commit because you
-               requested that earlier, and its patch-id is unchanged.
-               It might even still be the exact same commit.
-
-             • When a commit is prefixed with a _blue_ or _green_
-               ‘same’, then that indicates that while its tree or hash
-               changed, its patch-id did not.  If it is blue, then it is
-               the ‘HEAD’ commit (as always for blue).  When it is
-               green, then it no longer is ‘HEAD’ because other commit
-               have been created since (but before continuing the
-               rebase).
-
-        • When a commit is prefixed with ‘goal’, a _yellow_ ‘same,’ or
-          ‘work’, then that indicates that rebase applied that commit
-          but that you then reset ‘HEAD’ to an earlier commit (likely to
-          split it up into multiple commits), and that there are some
-          uncommitted changes remaining which likely (but not
-          necessarily) originate from that commit.
-
-             • When a commit is prefixed with ‘goal’, then that
-               indicates that it is still possible to create a new
-               commit with the exact same tree (the "goal") without
-               manually editing any files, by committing the index, or
-               by staging all changes and then committing that.  This is
-               the case when the original tree still exists in the index
-               or worktree in untainted form.
-
-             • When a commit is prefixed with a yellow ‘same’, then that
-               indicates that it is no longer possible to create a
-               commit with the exact same tree, but that it is still
-               possible to create a commit with the same patch-id.  This
-               would be the case if you created a new commit with other
-               changes, but the changes from the original commit still
-               exist in the index or working tree in untainted form.
-
-             • When a commit is prefixed with ‘work’, then that
-               indicates that you reset ‘HEAD’ to an earlier commit, and
-               that there are some staged and/or unstaged changes
-               (likely, but not necessarily) originating from that
-               commit.  However it is no longer possible to create a new
-               commit with the same tree or at least the same patch-id
-               because you have already made other changes.
-
-        • When a commit is prefixed with ‘poof’ or ‘gone’, then that
-          indicates that rebase applied that commit but that you then
-          reset ‘HEAD’ to an earlier commit (likely to split it up into
-          multiple commits), and that there are no uncommitted changes.
-
-             • When a commit is prefixed with ‘poof’, then that
-               indicates that it is no longer reachable from ‘HEAD’, but
-               that it has been replaced with one or more commits, which
-               together have the exact same effect.
-
-             • When a commit is prefixed with ‘gone’, then that
-               indicates that it is no longer reachable from ‘HEAD’ and
-               that we also cannot determine whether its changes are
-               still in effect in one or more new commits.  They might
-               be, but if so, then there must also be other changes
-               which makes it impossible to know for sure.
-
-   Do not worry if you do not fully understand the above.  That’s okay,
-you will acquire a good enough understanding through practice.
-
-   For other sequence operations such as cherry-picking, a similar
-section is displayed, but they lack some of the features described
-above, due to limitations in the git commands used to implement them.
-Most importantly these sequences only support "picking" a commit but not
-other actions such as "rewording", and they do not keep track of the
-commits which have already been applied.
-
-   ---------- Footnotes ----------
-
-   (1) The patch-id is a hash of the _changes_ introduced by a commit.
-It differs from the hash of the commit itself, which is a hash of the
-result of applying that change (i.e.  the resulting trees and blobs) as
-well as author and committer information, the commit message, and the
-hashes of the parents of the commit.  The patch-id hash on the other
-hand is created only from the added and removed lines, even line numbers
-and whitespace changes are ignored when calculating this hash.  The
-patch-ids of two commits can be used to answer the question "Do these
-commits make the same change?".
-
-
-File: magit.info,  Node: Cherry Picking,  Next: Resetting,  Prev: Rebasing,  Up: Manipulating
-
-6.9 Cherry Picking
-==================
-
-Also see *note (gitman)git-cherry-pick::.
-
-‘A’     (‘magit-cherry-pick-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   When no cherry-pick or revert is in progress, then the popup buffer
-features the following commands.
-
-‘A A’     (‘magit-cherry-pick’)
-
-     This command copies COMMITS from another branch onto the current
-     branch.  If the region selects multiple commits, then those are
-     copied, without prompting.  Otherwise the user is prompted for a
-     commit or range, defaulting to the commit at point.
-
-‘A a’     (‘magit-cherry-apply’)
-
-     This command applies the changes in COMMITS from another branch
-     onto the current branch.  If the region selects multiple commits,
-     then those are used, without prompting.  Otherwise the user is
-     prompted for a commit or range, defaulting to the commit at point.
-
-     This command also has a top-level binding, which can be invoked
-     without using the popup by typing ‘a’ at the top-level.
-
-   The following commands not only apply some commits to some branch,
-but also remove them from some other branch.  The removal is performed
-using either ‘git-update-ref’ or if necessary ‘git-rebase’.  Both
-applying commits as well as removing them using ‘git-rebase’ can lead to
-conflicts.  If that happens, then these commands abort and you not only
-have to resolve the conflicts but also finish the process the same way
-you would have to if these commands didn’t exist at all.
-
-‘A h’     (‘magit-cherry-harvest’)
-
-     This command moves the selected COMMITS that must be located on
-     another BRANCH onto the current branch instead, removing them from
-     the former.  When this command succeeds, then the same branch is
-     current as before.
-
-     Applying the commits on the current branch or removing them from
-     the other branch can lead to conflicts.  When that happens, then
-     this command stops and you have to resolve the conflicts and then
-     finish the process manually.
-
-‘A d’     (‘magit-cherry-donate’)
-
-     This command moves the selected COMMITS from the current branch
-     onto another existing BRANCH, removing them from the former.  When
-     this command succeeds, then the same branch is current as before.
-
-     Applying the commits on the other branch or removing them from the
-     current branch can lead to conflicts.  When that happens, then this
-     command stops and you have to resolve the conflicts and then finish
-     the process manually.
-
-‘A n’     (‘magit-cherry-spinout’)
-
-     This command moves the selected COMMITS from the current branch
-     onto a new branch BRANCH, removing them from the former.  When this
-     command succeeds, then the same branch is current as before.
-
-     Applying the commits on the other branch or removing them from the
-     current branch can lead to conflicts.  When that happens, then this
-     command stops and you have to resolve the conflicts and then finish
-     the process manually.
-
-‘A s’     (‘magit-cherry-spinoff’)
-
-     This command moves the selected COMMITS from the current branch
-     onto a new branch BRANCH, removing them from the former.  When this
-     command succeeds, then the new branch is checked out.
-
-     Applying the commits on the other branch or removing them from the
-     current branch can lead to conflicts.  When that happens, then this
-     command stops and you have to resolve the conflicts and then finish
-     the process manually.
-
-   When a cherry-pick or revert is in progress, then the popup buffer
-features these commands instead.
-
-‘A A’     (‘magit-sequence-continue’)
-
-     Resume the current cherry-pick or revert sequence.
-
-‘A s’     (‘magit-sequence-skip’)
-
-     Skip the stopped at commit during a cherry-pick or revert sequence.
-
-‘A a’     (‘magit-sequence-abort’)
-
-     Abort the current cherry-pick or revert sequence.  This discards
-     all changes made since the sequence started.
-
-* Menu:
-
-* Reverting::
-
-
-File: magit.info,  Node: Reverting,  Up: Cherry Picking
-
-6.9.1 Reverting
----------------
-
-‘V’     (‘magit-revert-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   When no cherry-pick or revert is in progress, then the popup buffer
-features the following commands.
-
-‘V V’     (‘magit-revert’)
-
-     Revert a commit by creating a new commit.  Prompt for a commit,
-     defaulting to the commit at point.  If the region selects multiple
-     commits, then revert all of them, without prompting.
-
-‘V v’     (‘magit-revert-no-commit’)
-
-     Revert a commit by applying it in reverse to the working tree.
-     Prompt for a commit, defaulting to the commit at point.  If the
-     region selects multiple commits, then revert all of them, without
-     prompting.
-
-   When a cherry-pick or revert is in progress, then the popup buffer
-features these commands instead.
-
-‘V A’     (‘magit-sequence-continue’)
-
-     Resume the current cherry-pick or revert sequence.
-
-‘V s’     (‘magit-sequence-skip’)
-
-     Skip the stopped at commit during a cherry-pick or revert sequence.
-
-‘V a’     (‘magit-sequence-abort’)
-
-     Abort the current cherry-pick or revert sequence.  This discards
-     all changes made since the sequence started.
-
-
-File: magit.info,  Node: Resetting,  Next: Stashing,  Prev: Cherry Picking,  Up: Manipulating
-
-6.10 Resetting
-==============
-
-Also see *note (gitman)git-reset::.
-
-‘x’     (‘magit-reset’)
-
-     Reset the head and index to some commit read from the user and
-     defaulting to the commit at point.  The working tree is kept as-is.
-     With a prefix argument also reset the working tree.
-
-‘X m’     (‘magit-reset-head’)
-
-     Reset the ‘HEAD’ and index to some commit read from the user and
-     defaulting to the commit at point.  The working tree is kept as-is.
-
-‘X s’     (‘magit-reset-soft’)
-
-     Reset the ‘HEAD’ to some commit read from the user and defaulting
-     to the commit at point.  The index and the working tree are kept
-     as-is.
-
-‘X h’     (‘magit-reset-hard’)
-
-     Reset the ‘HEAD’, index, and working tree to some commit read from
-     the user and defaulting to the commit at point.
-
-‘X i’     (‘magit-reset-index’)
-
-     Reset the index to some commit read from the user and defaulting to
-     the commit at point.  Keep the ‘HEAD’ and working tree as-is, so if
-     the commit refers to the ‘HEAD’, then this effectively unstages all
-     changes.
-
-‘X w’     (‘magit-reset-worktree’)
-
-     Reset the working tree to some commit read from the user and
-     defaulting to the commit at point.  Keep the ‘HEAD’ and index
-     as-is.
-
-‘X f’     (‘magit-file-checkout’)
-
-     Update file in the working tree and index to the contents from a
-     revision.  Both the revision and file are read from the user.
-
-
-File: magit.info,  Node: Stashing,  Prev: Resetting,  Up: Manipulating
-
-6.11 Stashing
-=============
-
-Also see *note (gitman)git-stash::.
-
-‘z’     (‘magit-stash-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘z z’     (‘magit-stash’)
-
-     Create a stash of the index and working tree.  Untracked files are
-     included according to popup arguments.  One prefix argument is
-     equivalent to ‘--include-untracked’ while two prefix arguments are
-     equivalent to ‘--all’.
-
-‘z i’     (‘magit-stash-index’)
-
-     Create a stash of the index only.  Unstaged and untracked changes
-     are not stashed.
-
-‘z w’     (‘magit-stash-worktree’)
-
-     Create a stash of unstaged changes in the working tree.  Untracked
-     files are included according to popup arguments.  One prefix
-     argument is equivalent to ‘--include-untracked’ while two prefix
-     arguments are equivalent to ‘--all’.
-
-‘z x’     (‘magit-stash-keep-index’)
-
-     Create a stash of the index and working tree, keeping index intact.
-     Untracked files are included according to popup arguments.  One
-     prefix argument is equivalent to ‘--include-untracked’ while two
-     prefix arguments are equivalent to ‘--all’.
-
-‘z Z’     (‘magit-snapshot’)
-
-     Create a snapshot of the index and working tree.  Untracked files
-     are included according to popup arguments.  One prefix argument is
-     equivalent to ‘--include-untracked’ while two prefix arguments are
-     equivalent to ‘--all’.
-
-‘z I’     (‘magit-snapshot-index’)
-
-     Create a snapshot of the index only.  Unstaged and untracked
-     changes are not stashed.
-
-‘z W’     (‘magit-snapshot-worktree’)
-
-     Create a snapshot of unstaged changes in the working tree.
-     Untracked files are included according to popup arguments.  One
-     prefix argument is equivalent to ‘--include-untracked’ while two
-     prefix arguments are equivalent to ‘--all’-.
-
-‘z a’     (‘magit-stash-apply’)
-
-     Apply a stash to the working tree.  Try to preserve the stash
-     index.  If that fails because there are staged changes, apply
-     without preserving the stash index.
-
-‘z p’     (‘magit-stash-pop’)
-
-     Apply a stash to the working tree and remove it from stash list.
-     Try to preserve the stash index.  If that fails because there are
-     staged changes, apply without preserving the stash index and forgo
-     removing the stash.
-
-‘z k’     (‘magit-stash-drop’)
-
-     Remove a stash from the stash list.  When the region is active,
-     offer to drop all contained stashes.
-
-‘z v’     (‘magit-stash-show’)
-
-     Show all diffs of a stash in a buffer.
-
-‘z b’     (‘magit-stash-branch’)
-
-     Create and checkout a new BRANCH from STASH.  The branch starts at
-     the commit that was current when the stash was created.
-
-‘z B’     (‘magit-stash-branch-here’)
-
-     Create and checkout a new BRANCH using ‘magit-branch’ with the
-     current branch or ‘HEAD’ as the starting-point.  Then apply STASH,
-     dropping it if it applies cleanly.
-
-‘z f’     (‘magit-stash-format-patch’)
-
-     Create a patch from STASH.
-
-‘k’     (‘magit-stash-clear’)
-
-     Remove all stashes saved in REF’s reflog by deleting REF.
-
-‘z l’     (‘magit-stash-list’)
-
-     List all stashes in a buffer.
-
- -- User Option: magit-stashes-margin
-
-     This option specifies whether the margin is initially shown in
-     stashes buffers and how it is formatted.
-
-     The value has the form ‘(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)’.
-
-        • If INIT is non-nil, then the margin is shown initially.
-
-        • STYLE controls how to format the committer date.  It can be
-          one of ‘age’ (to show the age of the commit),
-          ‘age-abbreviated’ (to abbreviate the time unit to a
-          character), or a string (suitable for ‘format-time-string’) to
-          show the actual date.
-
-        • WIDTH controls the width of the margin.  This exists for
-          forward compatibility and currently the value should not be
-          changed.
-
-        • AUTHOR controls whether the name of the author is also shown
-          by default.
-
-        • AUTHOR-WIDTH has to be an integer.  When the name of the
-          author is shown, then this specifies how much space is used to
-          do so.
-
-
-File: magit.info,  Node: Transferring,  Next: Miscellaneous,  Prev: Manipulating,  Up: Top
-
-7 Transferring
-**************
-
-* Menu:
-
-* Remotes::
-* Fetching::
-* Pulling::
-* Pushing::
-* Creating and Sending Patches::
-* Applying Patches::
-
-
-File: magit.info,  Node: Remotes,  Next: Fetching,  Up: Transferring
-
-7.1 Remotes
-===========
-
-* Menu:
-
-* The Remote Popup::
-* The Remote Config Popup::
-
-
-File: magit.info,  Node: The Remote Popup,  Next: The Remote Config Popup,  Up: Remotes
-
-7.1.1 The Remote Popup
-----------------------
-
-The popup ‘magit-remote-popup’ is used to add remotes and to make
-changes to existing remotes.  This popup only deals with remotes
-themselves, not with branches or the transfer of commits.  Those
-features are available from separate popups.
-
-   Also see *note (gitman)git-remote::.
-
-‘M’     (‘magit-remote-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
- -- User Option: magit-remote-popup-show-variables
-
-     This option controls whether the ‘magit-remote-popup’ shows remote
-     related Git variables.  When set to nil, no variables are displayed
-     directly in this popup, and the sub-popup
-     ‘magit-remote-config-popup’ has to be used instead to view and
-     change remote related variables.
-
-‘M C’     (‘magit-remote-config-popup’)
-
-     This command shows remote related variables in a separate popup.
-     By default this asks the user for which remote the variables should
-     be shown.  When ‘magit-remote-popup-show-variables’ is ‘nil’, then
-     it shows the variables for the upstream of the current branch or
-     "origin" it that branch has no remote upstream.  To select another
-     remote use a prefix argument.
-
-‘M a’     (‘magit-remote-add’)
-
-     This command add a remote and fetches it.  The remote name and url
-     are read in the minibuffer.
-
-‘M r’     (‘magit-remote-rename’)
-
-     This command renames a remote.  Both the old and the new names are
-     read in the minibuffer.
-
-‘M u’     (‘magit-remote-set-url’)
-
-     This command changes the url of a remote.  Both the remote and the
-     new url are read in the minibuffer.
-
-‘M k’     (‘magit-remote-remove’)
-
-     This command deletes a remote, read in the minibuffer.
-
-‘M p’     (‘magit-remote-prune’)
-
-     This command removes stale remote-tracking branches for a remote
-     read in the minibuffer.
-
-‘M P’     (‘magit-remote-prune-refspecs’)
-
-     This command removes stale refspecs for a remote read in the
-     minibuffer.
-
-     A refspec is stale if there no longer exists at least one branch on
-     the remote that would be fetched due to that refspec.  A stale
-     refspec is problematic because its existence causes Git to refuse
-     to fetch according to the remaining non-stale refspecs.
-
-     If only stale refspecs remain, then this command offers to either
-     delete the remote or to replace the stale refspecs with the default
-     refspec ("+refs/heads/*:refs/remotes/REMOTE/*").
-
-     This command also removes the remote-tracking branches that were
-     created due to the now stale refspecs.  Other stale branches are
-     not removed.
-
- -- User Option: magit-remote-add-set-remote.pushDefault
-
-     This option controls whether the user is asked whether they want to
-     set ‘remote.pushDefault’ after adding a remote.
-
-     If ‘ask’, then users is always ask.  If ‘ask-if-unset’, then the
-     user is only if the variable isn’t set already.  If ‘nil’, then the
-     user isn’t asked and the variable isn’t set.  If the value is a
-     string, then the variable is set without the user being asked,
-     provided that the name of the added remote is equal to that string
-     and the variable isn’t already set.
-
-
-File: magit.info,  Node: The Remote Config Popup,  Prev: The Remote Popup,  Up: Remotes
-
-7.1.2 The Remote Config Popup
------------------------------
-
- -- Command: magit-remote-config-popup
-
-     This prefix command shows the following remote-related Git
-     variables in a popup buffer.  The values can be changed from that
-     buffer.
-
-     This popup is a sub-popup of the ‘magit-remote-popup’ in which "C"
-     is bound to this popup.
-
-   The following variables are used to configure a specific remote.  The
-values are being displayed for the upstream remote of the current
-branch.  To change the value for another remote invoke
-‘magit-remote-config-popup’ with a prefix argument.
-
- -- Variable: remote.NAME.url
-
-     This variable specifies the url of the remote named NAME.  It can
-     have multiple values.
-
- -- Variable: remote.NAME.fetch
-
-     The refspec used when fetching from the remote named NAME.  It can
-     have multiple values.
-
- -- Variable: remote.NAME.pushurl
-
-     This variable specifies the url used for fetching from the remote
-     named NAME.  If it is not specified, then ‘remote.NAME.url’ is used
-     instead.  It can have multiple values.
-
- -- Variable: remote.NAME.push
-
-     The refspec used when pushing to the remote named NAME.  It can
-     have multiple values.
-
- -- Variable: remote.NAME.tagOpts
-
-     This variable specifies what tags are fetched by default.  If the
-     value is ‘--no-tags’ then no tags are fetched.  If the value is
-     ‘--tags’, then all tags are fetched.  If this variable has not
-     value, then only tags are fetched that are reachable from fetched
-     branches.
-
-
-File: magit.info,  Node: Fetching,  Next: Pulling,  Prev: Remotes,  Up: Transferring
-
-7.2 Fetching
-============
-
-For information about the differences between the _upstream_ and the
-_push-remote_, see *note Branching::.
-
-   Also see *note (gitman)git-fetch::.
-
-‘f’     (‘magit-fetch-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘f p’     (‘magit-fetch-from-pushremote’)
-
-     Fetch from the push-remote of the current branch.
-
-‘f u’     (‘magit-fetch-from-upstream’)
-
-     Fetch from the upstream of the current branch.
-
-‘f e’     (‘magit-fetch’)
-
-     Fetch from another repository.
-
-‘f o’     (‘magit-fetch-branch’)
-
-     Fetch a branch from a remote, both of which are read from the
-     minibuffer.
-
-‘f r’     (‘magit-fetch-refspec’)
-
-     Fetch from a remote using an explicit refspec, both of which are
-     read from the minibuffer.
-
-‘f a’     (‘magit-fetch-all’)
-
-     Fetch from all remotes.
-
-‘f m’     (‘magit-submodule-fetch’)
-
-     Fetch all submodules.  With a prefix argument fetch all remotes of
-     all submodules.
-
-   Instead of using one popup for fetching and another for pulling, you
-could also use ‘magit-pull-and-fetch-popup’.  See its doc-string for
-more information.
-
-
-File: magit.info,  Node: Pulling,  Next: Pushing,  Prev: Fetching,  Up: Transferring
-
-7.3 Pulling
-===========
-
-For information about the differences between the _upstream_ and the
-_push-remote_, see *note Branching::.
-
-   Also see *note (gitman)git-pull::.
-
-‘F’     (‘magit-pull-popup’)
-
-     This prefix command shows the following suffix commands in a popup
-     buffer.
-
-‘F p’     (‘magit-pull-from-pushremote’)
-
-     Pull from the push-remote of the current branch.
-
-‘F u’     (‘magit-pull-from-upstream’)
-
-     Pull from the upstream of the current branch.
-
-‘F e’     (‘magit-pull’)
-
-     Pull from a branch read in the minibuffer.
-
-   Instead of using one popup for fetching and another for pulling, you
-could also use ‘magit-pull-and-fetch-popup’.  See its doc-string for
-more information.
-
-
-File: magit.info,  Node: Pushing,  Next: Creating and Sending Patches,  Prev: Pulling,  Up: Transferring
-
-7.4 Pushing
-===========
-
-For information about the differences between the _upstream_ and the
-_push-remote_, see *note Branching::.
-
-   Also see *note (gitman)git-push::.
-
-‘P’     (‘magit-push-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘P p’     (‘magit-push-current-to-pushremote’)
-
-     Push the current branch to ‘branch.<name>.pushRemote’ or if that is
-     unset to ‘remote.pushDefault’.
-
-     When ‘magit-push-current-set-remote-if-missing’ is non-nil and the
-     push-remote is not configured, then read the push-remote from the
-     user, set it, and then push to it.  With a prefix argument the
-     push-remote can be changed before pushed to it.
-
-‘P u’     (‘magit-push-current-to-upstream’)
-
-     Push the current branch to its upstream branch.
-
-     When ‘magit-push-current-set-remote-if-missing’ is non-nil and the
-     push-remote is not configured, then read the upstream from the
-     user, set it, and then push to it.  With a prefix argument the
-     push-remote can be changed before pushed to it.
-
-‘P e’     (‘magit-push-current’)
-
-     Push the current branch to a branch read in the minibuffer.
-
-‘P o’     (‘magit-push’)
-
-     Push an arbitrary branch or commit somewhere.  Both the source and
-     the target are read in the minibuffer.
-
-‘P r’     (‘magit-push-refspecs’)
-
-     Push one or multiple refspecs to a remote, both of which are read
-     in the minibuffer.
-
-     To use multiple refspecs, separate them with commas.  Completion is
-     only available for the part before the colon, or when no colon is
-     used.
-
-‘P m’     (‘magit-push-matching’)
-
-     Push all matching branches to another repository.  If multiple
-     remotes exit, then read one from the user.  If just one exists, use
-     that without requiring confirmation.
-
-‘P t’     (‘magit-push-tags’)
-
-     Push all tags to another repository.  If only one remote exists,
-     then push to that.  Otherwise prompt for a remote, offering the
-     remote configured for the current branch as default.
-
-‘P T’     (‘magit-push-tag’)
-
-     Push a tag to another repository.
-
-   Two more push commands exist, which by default are not available from
-the push popup.  See their doc-strings for instructions on how to add
-them to the popup.
-
- -- Command: magit-push-implicitly args
-
-     Push somewhere without using an explicit refspec.
-
-     This command simply runs ‘git push -v [ARGS]’.  ARGS are the
-     arguments specified in the popup buffer.  No explicit refspec
-     arguments are used.  Instead the behavior depends on at least these
-     Git variables: ‘push.default’, ‘remote.pushDefault’,
-     ‘branch.<branch>.pushRemote’, ‘branch.<branch>.remote’,
-     ‘branch.<branch>.merge’, and ‘remote.<remote>.push’.
-
- -- Command: magit-push-to-remote remote args
-
-     Push to the remote REMOTE without using an explicit refspec.  The
-     remote is read in the minibuffer.
-
-     This command simply runs ‘git push -v [ARGS] REMOTE’.  ARGS are the
-     arguments specified in the popup buffer.  No refspec arguments are
-     used.  Instead the behavior depends on at least these Git
-     variables: ‘push.default’, ‘remote.pushDefault’,
-     ‘branch.<branch>.pushRemote’, ‘branch.<branch>.remote’,
-     ‘branch.<branch>.merge’, and ‘remote.<remote>.push’.
-
- -- User Option: magit-push-current-set-remote-if-missing
-
-     This option controls whether missing remotes are configured before
-     pushing.
-
-     When ‘nil’, then the command ‘magit-push-current-to-pushremote’ and
-     ‘magit-push-current-to-upstream’ do not appear in the push popup if
-     the push-remote resp.  upstream is not configured.  If the user
-     invokes one of these commands anyway, then it raises an error.
-
-     When ‘non-nil’, then these commands always appear in the push
-     popup.  But if the required configuration is missing, then they do
-     appear in a way that indicates that this is the case.  If the user
-     invokes one of them, then it asks for the necessary configuration,
-     stores the configuration, and then uses it to push a first time.
-
-     This option also affects whether the argument ‘--set-upstream’ is
-     available in the popup.  If the value is ‘non-nil’, then that
-     argument is redundant.  But note that changing the value of this
-     option does not take affect immediately, the argument will only be
-     added or removed after restarting Emacs.
-
-
-File: magit.info,  Node: Creating and Sending Patches,  Next: Applying Patches,  Prev: Pushing,  Up: Transferring
-
-7.5 Creating and Sending Patches
-================================
-
-‘W’     (‘magit-patch-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘W p’     (‘magit-format-patch’)
-
-     Create patches for a set commits.  If the region marks commits,
-     then create patches for those.  Otherwise prompt for a range or a
-     single commit, defaulting to the commit at point.
-
-‘W r’     (‘magit-request-pull’)
-
-     Request that upstream pulls from your public repository.
-
-   It is also possible to save a plain patch file by using ‘C-x C-w’
-inside a ‘magit-diff-mode’ or ‘magit-revision-mode’ buffer.
-
-
-File: magit.info,  Node: Applying Patches,  Prev: Creating and Sending Patches,  Up: Transferring
-
-7.6 Applying Patches
-====================
-
-Also see *note (gitman)git-am::.  and *note (gitman)git-apply::.
-
-‘w’     (‘magit-am-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘w w’     (‘magit-am-apply-patches’)
-
-     Apply one or more patches.  If the region marks files, then apply
-     those patches.  Otherwise read a file name in the minibuffer
-     defaulting to the file at point.
-
-‘w m’     (‘magit-am-apply-maildir’)
-
-     Apply the patches from a maildir.
-
-   When an "am" operation is in progress, then the popup buffer features
-these commands instead.
-
-‘w w’     (‘magit-am-continue’)
-
-     Resume the current patch applying sequence.
-
-‘w s’     (‘magit-am-skip’)
-
-     Skip the stopped at patch during a patch applying sequence.
-
-‘w a’     (‘magit-am-abort’)
-
-     Abort the current patch applying sequence.  This discards all
-     changes made since the sequence started.
-
-   In addition to the commands listed at the top, the "am" popup also
-has a binding for the related "patch" popup.
-
-‘w a’     (‘magit-patch-apply-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘w a a’     (‘magit-patch-apply’)
-
-     This command applies a simple patch file, which may not contain any
-     Git metadata in addition to the actual diff.
-
-
-File: magit.info,  Node: Miscellaneous,  Next: Customizing,  Prev: Transferring,  Up: Top
-
-8 Miscellaneous
-***************
-
-* Menu:
-
-* Tagging::
-* Notes::
-* Submodules::
-* Subtree::
-* Worktree::
-* Common Commands::
-* Wip Modes::
-* Minor Mode for Buffers Visiting Files::
-* Minor Mode for Buffers Visiting Blobs::
-
-
-File: magit.info,  Node: Tagging,  Next: Notes,  Up: Miscellaneous
-
-8.1 Tagging
-===========
-
-Also see *note (gitman)git-tag::.
-
-‘t’     (‘magit-tag-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘t t’     (‘magit-tag’)
-
-     Create a new tag with the given NAME at REV.  With a prefix
-     argument annotate the tag.
-
-‘t k’     (‘magit-tag-delete’)
-
-     Delete one or more tags.  If the region marks multiple tags (and
-     nothing else), then offer to delete those.  Otherwise, prompt for a
-     single tag to be deleted, defaulting to the tag at point.
-
-‘t p’     (‘magit-tag-prune’)
-
-     Offer to delete tags missing locally from REMOTE, and vice versa.
-
- -- Command: magit-tag-release
-
-     Create an opinionated release tag.
-
-     Assume version tags that match "\\‘v?[0-9]\*\\’".  Prompt for the
-     name of the new tag using the highest existing tag as initial input
-     and call "git tag –annotate –sign -m MSG" TAG, regardless of
-     whether these arguments are enabled in the popup.  Given a TAG
-     "v1.2.3" and a repository "/path/to/foo-bar", the MESSAGE would be
-     "Foo-Bar 1.2.3".
-
-     Because it is so opinionated, this command is not available from
-     the tag popup by default.
-
-
-File: magit.info,  Node: Notes,  Next: Submodules,  Prev: Tagging,  Up: Miscellaneous
-
-8.2 Notes
-=========
-
-Also see *note (gitman)git-notes::.
-
-‘T’     (‘magit-notes-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-‘T T’     (‘magit-notes-edit’)
-
-     Edit the note attached to a commit, defaulting to the commit at
-     point.
-
-     By default use the value of Git variable ‘core.notesRef’ or
-     "refs/notes/commits" if that is undefined.
-
-‘T r’     (‘magit-notes-remove’)
-
-     Remove the note attached to a commit, defaulting to the commit at
-     point.
-
-     By default use the value of Git variable ‘core.notesRef’ or
-     "refs/notes/commits" if that is undefined.
-
-‘T p’     (‘magit-notes-prune’)
-
-     Remove notes about unreachable commits.
-
-   It is possible to merge one note ref into another.  That may result
-in conflicts which have to resolved in the temporary worktree
-".git/NOTES_MERGE_WORKTREE".
-
-‘T m’     (‘magit-notes-merge’)
-
-     Merge the notes of a ref read from the user into the current notes
-     ref.  The current notes ref is the value of Git variable
-     ‘core.notesRef’ or "refs/notes/commits" if that is undefined.
-
-   When a notes merge is in progress then the popup features the
-following suffix commands, instead of those listed above.
-
-‘T c’     (‘magit-notes-merge-commit’)
-
-     Commit the current notes ref merge, after manually resolving
-     conflicts.
-
-‘T a’     (‘magit-notes-merge-abort’)
-
-     Abort the current notes ref merge.
-
-   The following variables control what notes reference ‘magit-notes-*’,
-‘git notes’ and ‘git show’ act on and display.  Both the local and
-global values are displayed and can be modified.
-
- -- Variable: core.notesRef
-
-     This variable specifies the notes ref that is displayed by default
-     and which commands act on by default.
-
- -- Variable: notes.displayRef
-
-     This variable specifies additional notes ref to be displayed in
-     addition to the ref specified by ‘core.notesRef’.  It can have
-     multiple values and may end with ‘*’ to display all refs in the
-     ‘refs/notes/’ namespace (or ‘**’ if some names contain slashes).
-
-
-File: magit.info,  Node: Submodules,  Next: Subtree,  Prev: Notes,  Up: Miscellaneous
-
-8.3 Submodules
-==============
-
-Also see *note (gitman)git-submodule::.
-
-* Menu:
-
-* Listing Submodules::
-* Submodule Popup::
-
-
-File: magit.info,  Node: Listing Submodules,  Next: Submodule Popup,  Up: Submodules
-
-8.3.1 Listing Submodules
-------------------------
-
-The command ‘magit-list-submodules’ displays a list of the current
-repository’s submodules in a separate buffer.  It’s also possible to
-display information about submodules directly in the status buffer of
-the super-repository by adding ‘magit-insert-submodules’ to the hook
-‘magit-status-sections-hook’ as described in *note Status Module
-Sections::.
-
- -- Command: magit-list-submodules
-
-     This command displays a list of the current repository’s submodules
-     in a separate buffer.
-
-     It can be invoked by pressing ‘RET’ on the section titled
-     "Modules".
-
- -- User Option: magit-submodule-list-columns
-
-     This option controls what columns are displayed by the command
-     ‘magit-list-submodules’ and how they are displayed.
-
-     Each element has the form ‘(HEADER WIDTH FORMAT PROPS)’.
-
-     HEADER is the string displayed in the header.  WIDTH is the width
-     of the column.  FORMAT is a function that is called with one
-     argument, the repository identification (usually its basename), and
-     with ‘default-directory’ bound to the toplevel of its working tree.
-     It has to return a string to be inserted or nil.  PROPS is an alist
-     that supports the keys ‘:right-align’ and ‘:pad-right’.
-
- -- Function: magit-insert-submodules
-
-     Insert sections for all submodules.  For each section insert the
-     path, the branch, and the output of ‘git describe --tags’, or,
-     failing that, the abbreviated HEAD commit hash.
-
-     Press ‘RET’ on such a submodule section to show its own status
-     buffer.  Press ‘RET’ on the "Modules" section to display a list of
-     submodules in a separate buffer.  This shows additional information
-     not displayed in the super-repository’s status buffer.
-
-
-File: magit.info,  Node: Submodule Popup,  Prev: Listing Submodules,  Up: Submodules
-
-8.3.2 Submodule Popup
----------------------
-
-‘o’     (‘magit-submodule-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   Some of the below commands default to act on the modules that are
-selected using the region.  For brevity their description talk about
-"the selected modules", but if no modules are selected, then they act on
-the current module instead, or if point isn’t on a module, then the read
-a single module to act on.  With a prefix argument these commands ignore
-the selection and the current module and instead act on all suitable
-modules.
-
-‘o a’     (‘magit-submodule-add’)
-
-     This commands adds the repository at URL as a module.  Optional
-     PATH is the path to the module relative to the root of the
-     super-project.  If it is nil then the path is determined based on
-     URL.
-
-‘o r’     (‘magit-submodule-register’)
-
-     This command registers the selected modules by copying their urls
-     from ".gitmodules" to "$GIT_DIR/config".  These values can then be
-     edited before running ‘magit-submodule-populate’.  If you don’t
-     need to edit any urls, then use the latter directly.
-
-‘o p’     (‘magit-submodule-populate’)
-
-     This command creates the working directory or directories of the
-     selected modules, checking out the recorded commits.
-
-‘o u’     (‘magit-submodule-update’)
-
-     This command updates the selected modules checking out the recorded
-     commits.
-
-‘o s’     (‘magit-submodule-synchronize’)
-
-     This command synchronizes the urls of the selected modules, copying
-     the values from ".gitmodules" to the ".git/config" of the
-     super-project as well those of the modules.
-
-‘o d’     (‘magit-submodule-unpopulate’)
-
-     This command removes the working directory of the selected modules.
-
-‘o l’     (‘magit-list-submodules’)
-
-     This command displays a list of the current repository’s modules.
-
-‘o f’     (‘magit-fetch-modules’)
-
-     This command fetches all modules.
-
-     Option ‘magit-fetch-modules-jobs’ controls how many submodules are
-     being fetched in parallel.  Also fetch the super-repository,
-     because ‘git fetch’ does not support not doing that.  With a prefix
-     argument fetch all remotes.
-
-
-File: magit.info,  Node: Subtree,  Next: Worktree,  Prev: Submodules,  Up: Miscellaneous
-
-8.4 Subtree
-===========
-
-Also see *note (gitman)git-subtree::.
-
-‘O’     (‘magit-tree-popup’)
-
-     This prefix command shows the following suffix commands along with
-     the appropriate infix arguments in a popup buffer.
-
-   Most infix arguments only apply to some of the ‘git subtree’
-subcommands.  When an argument that does not apply to the invoked
-command is set, then it is silently ignored.
-
-   When the ‘--prefix’ argument is set in the popup buffer, then that is
-used.  Otherwise the prefix is read in the minibuffer.
-
-‘O a’     (‘magit-subtree-add’)
-
-     Add COMMIT from REPOSITORY as a new subtree at PREFIX.
-
-‘O c’     (‘magit-subtree-add-commit’)
-
-     Add COMMIT as a new subtree at PREFIX.
-
-‘O m’     (‘magit-subtree-merge’)
-
-     Merge COMMIT into the PREFIX subtree.
-
-‘O f’     (‘magit-subtree-pull’)
-
-     Pull COMMIT from REPOSITORY into the PREFIX subtree.
-
-‘O p’     (‘magit-subtree-push’)
-
-     Extract the history of the subtree PREFIX and push it to REF on
-     REPOSITORY.
-
-‘O s’     (‘magit-subtree-split’)
-
-     Extract the history of the subtree PREFIX.
-
-
-File: magit.info,  Node: Worktree,  Next: Common Commands,  Prev: Subtree,  Up: Miscellaneous
-
-8.5 Worktree
-============
-
-Also see *note (gitman)git-worktree::.
-
-‘%’     (‘magit-worktree-popup’)
-
-     This prefix command shows the following suffix commands in a popup
-     buffer.
-
-‘% b’     (‘magit-worktree-checkout’)
-
-     Checkout BRANCH in a new worktree at PATH.
-
-‘% c’     (‘magit-worktree-branch’)
-
-     Create a new BRANCH and check it out in a new worktree at PATH.
-
-‘% p’     (‘magit-worktree-checkout-pull-request’)
-
-     Create, configure and checkout a new worktree from a pull-request.
-
-     This is like ‘magit-checkout-pull-request’ (which see) except that
-     it also creates a new worktree.
-
-‘% k’     (‘magit-worktree-delete’)
-
-     Delete a worktree, defaulting to the worktree at point.  The
-     primary worktree cannot be deleted.
-
-‘% g’     (‘magit-worktree-status’)
-
-     Show the status for the worktree at point.
-
-     If there is no worktree at point, then read one in the minibuffer.
-     If the worktree at point is the one whose status is already being
-     displayed in the current buffer, then show it in Dired instead.
-
-
-File: magit.info,  Node: Common Commands,  Next: Wip Modes,  Prev: Worktree,  Up: Miscellaneous
-
-8.6 Common Commands
-===================
-
-These are some of the commands that can be used in all buffers whose
-major-modes derive from ‘magit-mode’.  There are other common commands
-beside the ones below, but these didn’t fit well anywhere else.
-
-‘M-w’     (‘magit-copy-section-value’)
-
-     This command saves the value of the current section to the
-     ‘kill-ring’, and, provided that the current section is a commit,
-     branch, or tag section, it also pushes the (referenced) revision to
-     the ‘magit-revision-stack’.
-
-     When the current section is a branch or a tag, and a prefix
-     argument is used, then it saves the revision at its tip to the
-     ‘kill-ring’ instead of the reference name.
-
-‘C-w’     (‘magit-copy-buffer-revision’)
-
-     This command saves the revision being displayed in the current
-     buffer to the ‘kill-ring’ and also pushes it to the
-     ‘magit-revision-stack’.  It is mainly intended for use in
-     ‘magit-revision-mode’ buffers, the only buffers where it is always
-     unambiguous exactly which revision should be saved.
-
-     Most other Magit buffers usually show more than one revision, in
-     some way or another, so this command has to select one of them, and
-     that choice might not always be the one you think would have been
-     the best pick.
-
-   Outside of Magit ‘M-w’ and ‘C-w’ are usually bound to
-‘kill-ring-save’ and ‘kill-region’, and these commands would also be
-useful in Magit buffers.  Therefore when the region is active, then both
-of these commands behave like ‘kill-ring-save’ instead of as described
-above.
-
-
-File: magit.info,  Node: Wip Modes,  Next: Minor Mode for Buffers Visiting Files,  Prev: Common Commands,  Up: Miscellaneous
-
-8.7 Wip Modes
-=============
-
-Git keeps *committed* changes around long enough for users to recover
-changes they have accidentally deleted.  It does so by not garbage
-collecting any committed but no longer referenced objects for a certain
-period of time, by default 30 days.
-
-   But Git does *not* keep track of *uncommitted* changes in the working
-tree and not even the index (the staging area).  Because Magit makes it
-so convenient to modify uncommitted changes, it also makes it easy to
-shoot yourself in the foot in the process.
-
-   For that reason Magit provides three global modes that save *tracked*
-files to work-in-progress references after or before certain actions.
-(Untracked files are never saved and these modes also only work after
-the first commit has been created).
-
-   Two separate work-in-progress references are used to track the state
-of the index and of the working tree: "refs/wip/index/<branchref>" and
-"refs/wip/wtree/<branchref>", where ‘<branchref>’ is the full ref of the
-current branch, e.g.  "refs/heads/master".  When the ‘HEAD’ is detached
-then "HEAD" is in place of ‘<branchref>’.
-
-   Checking out another branch (or detaching ‘HEAD’) causes the use of
-different wip refs for subsequent changes, but the old refs are not
-deleted.
-
-   Creating a commit and then making a change causes the wip refs to be
-recreated to fork from the new commit.  But the old commits on the wip
-refs are not lost.  They are still available from the reflog.  To make
-it easier to see when the fork point of a wip ref was changed, an
-additional commit with the message "restart autosaving" is created on it
-(‘xxO’ commits below are such boundary commits).
-
-   Starting with
-
-           BI0---BI1    refs/wip/index/refs/heads/master
-          /
-     A---B              refs/heads/master
-          \
-           BW0---BW1    refs/wip/wtree/refs/heads/master
-
-   and committing the staged changes and editing and saving a file would
-result in
-
-           BI0---BI1        refs/wip/index/refs/heads/master
-          /
-     A---B---C              refs/heads/master
-          \   \
-           \   CW0---CW1    refs/wip/wtree/refs/heads/master
-            \
-             BW0---BW1      refs/wip/wtree/refs/heads/master@{2}
-
-   The fork-point of the index wip ref is not changed until some change
-is being staged.  Likewise just checking out a branch or creating a
-commit does not change the fork-point of the working tree wip ref.  The
-fork-points are not adjusted until there actually is a change that
-should be committed to the respective wip ref.
-
- -- User Option: magit-wip-merge-branch
-
-     This option controls whether the current branch is merged into the
-     wip refs after a new commit was created on the branch.  If nil
-     (currently the default), then no merge is perfomed and wip refs are
-     reset as described above.
-
-     If this is non-nil and the current branch has new commits, then it
-     is merged into the wip ref before creating a new wip commit.  This
-     makes it easier to inspect wip history and the wip commits are
-     never garbage collected.
-
-            *--*--*--*--*--*       refs/wip/index/refs/heads/master
-           /     /     /
-          A-----B-----C            refs/heads/master
-
-   To view the log for a branch and its wip refs use the commands
-‘magit-wip-log’ and ‘magit-wip-log-current’.  You should use ‘--graph’
-when using these commands.  Alternatively you can use the reflog to show
-all commits that ever existed on a wip ref.  You can then recover lost
-changes from the commits shown in the log or reflog.
-
- -- Command: magit-wip-log
-
-     This command shows the log for a branch and its wip refs.
-
-     With a negative prefix argument only the worktree wip ref is shown.
-     The absolute numeric value of the prefix argument controls how many
-     "branches" of each wip ref are shown.
-
- -- Command: magit-wip-log-current
-
-     This command shows the log for the current branch and its wip refs.
-
-     With a negative prefix argument only the worktree wip ref is shown.
-     The absolute numeric value of the prefix argument controls how many
-     "branches" of each wip ref are shown.
-
-‘X w’     (‘magit-reset-worktree’)
-
-     This command resets the working tree to some commit read from the
-     user and defaulting to the commit at point, while keeping the
-     ‘HEAD’ and index as-is.
-
-     This can be used to restore files to the state committed to a wip
-     ref.  Note that this will discard any unstaged changes that might
-     have existed before invoking this command (but of course only after
-     committing that to the working tree wip ref).
-
-   There exists a total of three global modes that save to the wip refs,
-which might seem excessive, but allows fine tuning of when exactly
-changes are being committed to the wip refs.  Enabling all modes makes
-it less likely that a change slips through the cracks.
-
-   Setting the following variables directly does not take effect; either
-customize them or call the respective mode function.
-
- -- User Option: magit-wip-after-save-mode
-
-     When this mode is enabled, then saving a buffer that visits a file
-     tracked in a Git repository causes its current state to be
-     committed to the working tree wip ref for the current branch.
-
- -- User Option: magit-wip-after-apply-mode
-
-     When this mode is enabled, then applying (i.e.  staging, unstaging,
-     discarding, reversing, and regularly applying) a change to a file
-     tracked in a Git repository causes its current state to be
-     committed to the index and/or working tree wip refs for the current
-     branch.
-
-   If you only ever edit files using Emacs and only ever interact with
-Git using Magit, then the above two modes should be enough to protect
-each and every change from accidental loss.  In practice nobody does
-that.  So an additional mode exists that does commit to the wip refs
-before making changes that could cause the loss of earlier changes.
-
- -- User Option: magit-wip-before-change-mode
-
-     When this mode is enabled, then certain commands commit the
-     existing changes to the files they are about to make changes to.
-
- -- Function: magit-wip-commit-initial-backup
-
-     Adding this function to ‘before-save-hook’ causes the current
-     version of the file to be committed to the worktree wip ref before
-     the modifications in the buffer are saved.  It backs up the same
-     version of the file as ‘backup-buffer’ would but, instead of using
-     a backup file as ‘backup-buffer’ would, it uses the same worktree
-     wip ref as used by the various Magit Wip modes.  Like
-     ‘backup-buffer’, it only does this once; unless you kill the buffer
-     and visit the file again only one backup will be created per Emacs
-     session.
-
-     This function ignores the variables that affect ‘backup-buffer’ and
-     can be used along-side that function, which is recommended because
-     this function only backs up files that are tracked in a Git
-     repository.
-
-   Note that even if you enable all three modes and add the above
-function to the intended hook, this won’t give you perfect protection.
-The most likely scenario for losing changes despite the use of these
-modes is making a change outside Emacs and then destroying it also
-outside Emacs.  In some such a scenario, Magit, being an Emacs package,
-didn’t get the opportunity to keep you from shooting yourself in the
-foot.
-
-   When you are unsure whether Magit did commit a change to the wip
-refs, then you can explicitly request that all changes to all tracked
-files are being committed.
-
-‘M-x magit-wip-commit’     (‘magit-wip-commit’)
-
-     This command commits all changes to all tracked files to the index
-     and working tree work-in-progress refs.  Like the modes described
-     above, it does not commit untracked files, but it does check all
-     tracked files for changes.  Use this command when you suspect that
-     the modes might have overlooked a change made outside Emacs/Magit.
-
- -- User Option: magit-wip-after-save-local-mode-lighter
-
-     Mode-line lighter for ‘magit-wip-after-save-local-mode’.
-
- -- User Option: magit-wip-after-apply-mode-lighter
-
-     Mode-line lighter for ‘magit-wip-after-apply-mode’.
-
- -- User Option: magit-wip-before-change-mode-lighter
-
-     Mode-line lighter for ‘magit-wip-before-change-mode’.
-
- -- User Option: magit-wip-namespace
-
-     The namespace used for work-in-progress refs.  It has to end with a
-     slash.  The wip refs are named "<namespace>index/<branchref>" and
-     "<namespace>wtree/<branchref>".  When snapshots are created while
-     the ‘HEAD’ is detached then "HEAD" is used in place of
-     ‘<branchref>’.
-
-
-File: magit.info,  Node: Minor Mode for Buffers Visiting Files,  Next: Minor Mode for Buffers Visiting Blobs,  Prev: Wip Modes,  Up: Miscellaneous
-
-8.8 Minor Mode for Buffers Visiting Files
-=========================================
-
-The ‘magit-file-mode’ enables certain Magit features in file-visiting
-buffers belonging to a Git repository.  It should be enabled globally
-using ‘global-magit-file-mode’.  Currently this mode only establishes a
-few key bindings, but this might be extended in the future.
-
- -- User Option: magit-file-mode
-
-     Whether to establish certain Magit key bindings in all
-     file-visiting buffers belonging to a Git repository.  This
-     establishes the bindings suggested in *note Getting Started:: (but
-     only for file-visiting buffers), and additionally binds ‘C-c M-g’
-     to ‘magit-file-popup’.
-
-‘C-c M-g’     (‘magit-file-popup’)
-
-     This prefix command shows a popup buffer featuring suffix commands
-     that operate on the file being visited in the current buffer.
-
-‘C-c M-g s’     (‘magit-stage-file’)
-
-     Stage all changes to the file being visited in the current buffer.
-
-‘C-c M-g u’     (‘magit-unstage-file’)
-
-     Unstage all changes to the file being visited in the current
-     buffer.
-
-‘C-c M-g c’     (‘magit-commit-popup’)
-
-     This prefix command shows suffix commands along with the
-     appropriate infix arguments in a popup buffer.  See *note
-     Initiating a Commit::.
-
-‘C-c M-g D’     (‘magit-diff-buffer-file-popup’)
-
-     This prefix command shows the same suffix commands and infix
-     arguments in a popup buffer as ‘magit-diff-popup’.  But this
-     variant has to be called from a file-visiting buffer and the
-     visited file is automatically used in the popup to limit the diff
-     to that file.
-
-‘C-c M-g d’     (‘magit-diff-buffer-file’)
-
-     This command shows the diff for the file of blob that the current
-     buffer visits.
-
- -- User Option: magit-diff-buffer-file-locked
-
-     This option controls whether ‘magit-diff-buffer-file’ uses a
-     dedicated buffer.  See *note Modes and Buffers::.
-
-‘C-c M-g L’     (‘magit-log-buffer-file-popup’)
-
-     This prefix command shows the same suffix commands and infix
-     arguments in a popup buffer as ‘magit-log-popup’.  But this variant
-     has to be called from a file-visiting buffer and the visited file
-     is automatically used in the popup to limit the log to that file.
-
-‘C-c M-g l’     (‘magit-log-buffer-file’)
-
-     This command shows the log for the file of blob that the current
-     buffer visits.  Renames are followed when a prefix argument is used
-     or when ‘--follow’ is part of ‘magit-log-arguments’.  When the
-     region is active, the log is restricted to the selected line range.
-
-‘C-c M-g t’     (‘magit-log-trace-definition’)
-
-     This command shows the log for the definition at point.
-
- -- User Option: magit-log-buffer-file-locked
-
-     This option controls whether ‘magit-log-buffer-file’ uses a
-     dedicated buffer.  See *note Modes and Buffers::.
-
-‘C-c M-g B’     (‘magit-blame-popup’)
-
-     This prefix command shows all blaming suffix command along with the
-     appropriate infix arguments in a popup buffer.  See *note
-     Blaming::.
-
-‘C-c M-g b’     (‘magit-blame’)
-
-     This command shows for each line the revision in which it was
-     added.
-
-‘C-c M-g r’     (‘magit-blame-removal’)
-
-     This command shows for each line the revision in which it was
-     removed.  This command is only available in blob-visiting buffers.
-
-‘C-c M-g f’     (‘magit-blame-reverse’)
-
-     This command shows for each line the last revision in which it
-     still exists.  This command is only available in blob-visiting
-     buffers.
-
-‘C-c M-g e’     (‘magit-edit-line-commit’)
-
-     This command makes the commit editable that added the current line.
-
-     With a prefix argument it makes the commit editable that removes
-     the line, if any.  The commit is determined using ‘git blame’ and
-     made editable using ‘git rebase --interactive’ if it is reachable
-     from ‘HEAD’, or by checking out the commit (or a branch that points
-     at it) otherwise.
-
-‘C-c M-g p’     (‘magit-blob-previous’)
-
-     Visit the previous blob which modified the current file.
-
-   There are a few additional commands that operate on a single file but
-are not available from the file popup by default:
-
- -- Command: magit-file-rename
-
-     This command renames a file read from the user.
-
- -- Command: magit-file-delete
-
-     This command deletes a file read from the user.
-
- -- Command: magit-file-untrack
-
-     This command untracks a file read from the user.
-
- -- Command: magit-file-checkout
-
-     This command updates a file in the working tree and index to the
-     contents from a revision.  Both the revision and file are read from
-     the user.
-
-   You could add them to the popup like so:
-
-     (magit-define-popup-action 'magit-file-popup
-       ?R "Rename file" 'magit-file-rename)
-     (magit-define-popup-action 'magit-file-popup
-       ?K "Delete file" 'magit-file-delete)
-     (magit-define-popup-action 'magit-file-popup
-       ?U "Untrack file" 'magit-file-untrack)
-     (magit-define-popup-action 'magit-file-popup
-       ?C "Checkout file" 'magit-file-checkout)
-
-
-File: magit.info,  Node: Minor Mode for Buffers Visiting Blobs,  Prev: Minor Mode for Buffers Visiting Files,  Up: Miscellaneous
-
-8.9 Minor Mode for Buffers Visiting Blobs
-=========================================
-
-The ‘magit-blob-mode’ enables certain Magit features in blob-visiting
-buffers.  Such buffers can be created using ‘magit-find-file’ and some
-of the commands mentioned below, which also take care of turning on this
-minor mode.  Currently this mode only establishes a few key bindings,
-but this might be extended.
-
-‘p’     (‘magit-blob-previous’)
-
-     Visit the previous blob which modified the current file.
-
-‘n’     (‘magit-blob-next’)
-
-     Visit the next blob which modified the current file.
-
-‘q’     (‘magit-kill-this-buffer’)
-
-     Kill the current buffer.
-
-
-File: magit.info,  Node: Customizing,  Next: Plumbing,  Prev: Miscellaneous,  Up: Top
-
-9 Customizing
-*************
-
-Both Git and Emacs are highly customizable.  Magit is both a Git
-porcelain as well as an Emacs package, so it makes sense to customize it
-using both Git variables as well as Emacs options.  However this
-flexibility doesn’t come without problems, including but not limited to
-the following.
-
-   • Some Git variables automatically have an effect in Magit without
-     requiring any explicit support.  Sometimes that is desirable - in
-     other cases, it breaks Magit.
-
-     When a certain Git setting breaks Magit but you want to keep using
-     that setting on the command line, then that can be accomplished by
-     overriding the value for Magit only by appending something like
-     ‘("-c" "some.variable=compatible-value")’ to
-     ‘magit-git-global-arguments’.
-
-   • Certain settings like ‘fetch.prune=true’ are respected by Magit
-     commands (because they simply call the respective Git command) but
-     their value is not reflected in the respective popup buffers.  In
-     this case the ‘--prune’ argument in ‘magit-fetch-popup’ might be
-     active or inactive depending on the value of
-     ‘magit-fetch-arguments’ only, but that doesn’t keep the Git
-     variable from being honored by the suffix commands anyway.  So
-     pruning might happen despite the ‘--prune’ arguments being
-     displayed in a way that seems to indicate that no pruning will
-     happen.
-
-   I intend to address these and similar issues in a future release.
-
-* Menu:
-
-* Per-Repository Configuration::
-* Essential Settings::
-
-
-File: magit.info,  Node: Per-Repository Configuration,  Next: Essential Settings,  Up: Customizing
-
-9.1 Per-Repository Configuration
-================================
-
-Magit can be configured on a per-repository level using both Git
-variables as well as Emacs options.
-
-   To set a Git variable for one repository only, simply set it in
-‘/path/to/repo/.git/config’ instead of ‘$HOME/.gitconfig’ or
-‘/etc/gitconfig’.  See *note (gitman)git-config::.
-
-   Similarly, Emacs options can be set for one repository only by
-editing ‘/path/to/repo/.dir-locals.el’.  See *note (emacs)Directory
-Variables::.  For example to disable automatic refreshes of
-file-visiting buffers in just one huge repository use this:
-
-   • ‘/path/to/huge/repo/.dir-locals.el’
-
-          ((nil . ((magit-refresh-buffers . nil))))
-
-   If you want to apply the same settings to several, but not all,
-repositories then keeping the repository-local config files in sync
-would quickly become annoying.  To avoid that you can create config
-files for certain classes of repositories (e.g.  "huge repositories")
-and then include those files in the per-repository config files.  For
-example:
-
-   • ‘/path/to/huge/repo/.git/config’
-
-          [include]
-                  path = /path/to/huge-gitconfig
-
-   • ‘/path/to/huge-gitconfig’
-
-          [status]
-                  showUntrackedFiles = no
-
-   • ‘$HOME/.emacs.d/init.el’
-
-          (dir-locals-set-class-variables 'huge-git-repository
-             '((nil . ((magit-refresh-buffers . nil)))))
-
-          (dir-locals-set-directory-class
-             "/path/to/huge/repo/" 'huge-git-repository)
-
-
-File: magit.info,  Node: Essential Settings,  Prev: Per-Repository Configuration,  Up: Customizing
-
-9.2 Essential Settings
-======================
-
-The next two sections list and discuss several variables that many users
-might want to customize, for safety and/or performance reasons.
-
-* Menu:
-
-* Safety::
-* Performance::
-
-
-File: magit.info,  Node: Safety,  Next: Performance,  Up: Essential Settings
-
-9.2.1 Safety
-------------
-
-This section discusses various variables that you might want to change
-(or *not* change) for safety reasons.
-
-   Git keeps *committed* changes around long enough for users to recover
-changes they have accidentally been deleted.  It does not do the same
-for *uncommitted* changes in the working tree and not even the index
-(the staging area).  Because Magit makes it so easy to modify
-uncommitted changes, it also makes it easy to shoot yourself in the foot
-in the process.  For that reason Magit provides three global modes that
-save *tracked* files to work-in-progress references after or before
-certain actions.  See *note Wip Modes::.
-
-   These modes are not enabled by default because of performance
-concerns.  Instead a lot of potentially destructive commands require
-confirmation every time they are used.  In many cases this can be
-disabled by adding a symbol to ‘magit-no-confirm’ (see *note Completion
-and Confirmation::).  If you enable the various wip modes then you
-should add ‘safe-with-wip’ to this list.
-
-   Similarly it isn’t necessary to require confirmation before moving a
-file to the system trash - if you trashed a file by mistake then you can
-recover it from the there.  Option ‘magit-delete-by-moving-to-trash’
-controls whether the system trash is used, which is the case by default.
-Nevertheless, ‘trash’ isn’t a member of ‘magit-no-confirm’ - you might
-want to change that.
-
-   By default buffers visiting files are automatically reverted when the
-visited file changes on disk.  This isn’t as risky as it might seem, but
-to make an informed decision you should see *note Risk of Reverting
-Automatically::.
-
-
-File: magit.info,  Node: Performance,  Prev: Safety,  Up: Essential Settings
-
-9.2.2 Performance
------------------
-
-After Magit has run ‘git’ for side-effects, it also refreshes the
-current Magit buffer and the respective status buffer.  This is
-necessary because otherwise outdated information might be displayed
-without the user noticing.  Magit buffers are updated by recreating
-their content from scratch, which makes updating simpler and less
-error-prone, but also more costly.  Keeping it simple and just
-re-creating everything from scratch is an old design decision and
-departing from that will require major refactoring.
-
-   I plan to do that in time for the next major release.  I also intend
-to create logs and diffs asynchronously, which should also help a lot
-but also requires major refactoring.
-
-   Meanwhile you can tell Magit to only automatically refresh the
-current Magit buffer, but not the status buffer.  If you do that, then
-the status buffer is only refreshed automatically if it is the current
-buffer.
-
-     (setq magit-refresh-status-buffer nil)
-
-   You should also check whether any third-party packages have added
-anything to ‘magit-refresh-buffer-hook’, ‘magit-status-refresh-hook’,
-‘magit-pre-refresh-hook’, and ‘magit-post-refresh-hook’.  If so, then
-check whether those additions impact performance significantly.  Setting
-‘magit-refresh-verbose’ and then inspecting the output in the
-‘*Messages*’ buffer, should help doing so.
-
-   Magit also reverts buffers for visited files located inside the
-current repository when the visited file changes on disk.  That is
-implemented on top of ‘auto-revert-mode’ from the built-in library
-‘autorevert’.  To figure out whether that impacts performance, check
-whether performance is significantly worse, when many buffers exist
-and/or when some buffers visit files using TRAMP.  If so, then this
-should help.
-
-     (setq auto-revert-buffer-list-filter
-           'magit-auto-revert-repository-buffers-p)
-
-   For alternative approaches see *note Automatic Reverting of
-File-Visiting Buffers::.
-
-   If you have enabled any features that are disabled by default, then
-you should check whether they impact performance significantly.  It’s
-likely that they were not enabled by default because it is known that
-they reduce performance at least in large repositories.
-
-   If performance is only slow inside certain unusually large
-repositories, then you might want to disable certain features on a
-per-repository or per-repository-class basis only.  See *note
-Per-Repository Configuration::.
-
-* Menu:
-
-* Microsoft Windows Performance::
-* MacOS Performance::
-
-Log Performance
-...............
-
-When showing logs, Magit limits the number of commits initially shown in
-the hope that this avoids unnecessary work.  When using ‘--graph’ is
-used, then this unfortunately does not have the desired effect for large
-histories.  Junio, Git’s maintainer, said on the git mailing list
-(<http://www.spinics.net/lists/git/msg232230.html>): "‘--graph’ wants to
-compute the whole history and the max-count only affects the output
-phase after ‘--graph’ does its computation".
-
-   In other words, it’s not that Git is slow at outputting the
-differences, or that Magit is slow at parsing the output - the problem
-is that Git first goes outside and has a smoke.
-
-   We actually work around this issue by limiting the number of commits
-not only by using ‘-<N>’ but by also using a range.  But unfortunately
-that’s not always possible.
-
-   In repositories with more than a few thousand commits ‘--graph’
-should never be a member of ‘magit-log-section-arguments’.  That
-variable is used in the status buffer which is refreshed every time you
-run any Magit command.
-
-   Using ‘--color --graph’ is even slower.  Magit uses code that is part
-of Emacs to turn control characters into faces.  That code is pretty
-slow and this is quite noticeable when showing a log with many branches
-and merges.  For that reason ‘--color’ is not enabled by default
-anymore.  Consider leaving it at that.
-
-Diff Performance
-................
-
-If diffs are slow, then consider turning off some optional diff features
-by setting all or some of the following variables to ‘nil’:
-‘magit-diff-highlight-indentation’, ‘magit-diff-highlight-trailing’,
-‘magit-diff-paint-whitespace’, ‘magit-diff-highlight-hunk-body’, and
-‘magit-diff-refine-hunk’.
-
-   When showing a commit instead of some arbitrary diff, then some
-additional information is displayed.  Calculating this information can
-be quite expensive given certain circumstances.  If looking at a commit
-using ‘magit-revision-mode’ takes considerably more time than looking at
-the same commit in ‘magit-diff-mode’, then consider setting
-‘magit-revision-insert-related-refs’ to ‘nil’.
-
-Refs Buffer Performance
-.......................
-
-When refreshing the "references buffer" is slow, then that’s usually
-because several hundred refs are being displayed.  The best way to
-address that is to display fewer refs, obviously.
-
-   If you are not, or only mildly, interested in seeing the list of
-tags, then start by not displaying them:
-
-     (remove-hook 'magit-refs-sections-hook 'magit-insert-tags)
-
-   Then you should also make sure that the listed remote branches
-actually all exist.  You can do so by pruning branches which no longer
-exist using ‘f-pa’.
-
-Committing Performance
-......................
-
-When you initiate a commit, then Magit by default automatically shows a
-diff of the changes you are about to commit.  For large commits this can
-take a long time, which is especially distracting when you are
-committing large amounts of generated data which you don’t actually
-intend to inspect before committing.  This behavior can be turned off
-using:
-
-     (remove-hook 'server-switch-hook 'magit-commit-diff)
-
-   Then you can type ‘C-c C-d’ to show the diff when you actually want
-to see it, but only then.  Alternatively you can leave the hook alone
-and just type ‘C-g’ in those cases when it takes too long to generate
-the diff.  If you do that, then you will end up with a broken diff
-buffer, but doing it this way has the advantage that you usually get to
-see the diff, which is useful because it increases the odds that you
-spot potential issues.
-
-The Built-In VC Package
-.......................
-
-Emacs comes with a version control interface called "VC", see *note
-(emacs)Version Control::.  It is enabled be default, and if you don’t
-use it in addition to Magit, then you should disable it to keep it from
-performing unnecessary work:
-
-     (setq vc-handled-backends nil)
-
-   You can also disable its use for Git but keep using it when using
-another version control system:
-
-     (setq vc-handled-backends (delq 'Git vc-handled-backends))
-
diff --git a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-2 b/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-2
deleted file mode 100644
index ef180cef00b4..000000000000
--- a/configs/shared/emacs/.emacs.d/elpa/magit-20180913.1247/magit.info-2
+++ /dev/null
@@ -1,2676 +0,0 @@
-This is magit.info, produced by makeinfo version 6.5 from magit.texi.
-
-     Copyright (C) 2015-2018 Jonas Bernoulli <jonas@bernoul.li>
-
-     You can redistribute this document and/or modify it under the terms
-     of the GNU General Public License as published by the Free Software
-     Foundation, either version 3 of the License, or (at your option)
-     any later version.
-
-     This document is distributed in the hope that it will be useful,
-     but WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* Magit: (magit).       Using Git from Emacs with Magit.
-END-INFO-DIR-ENTRY
-
-
-File: magit.info,  Node: Microsoft Windows Performance,  Next: MacOS Performance,  Up: Performance
-
-Microsoft Windows Performance
-.............................
-
-In order to update the status buffer, ‘git’ has to be run a few dozen
-times.  That is problematic on Microsoft Windows, because that operating
-system is exceptionally slow at starting processes.  Sadly this is an
-issue that can only be fixed by Microsoft itself, and they don’t appear
-to be particularly interested in doing so.
-
-   Beside the subprocess issue, there are also other Windows-specific
-performance issues.  Some of these have workarounds.  The maintainers of
-"Git for Windows" try to improve performance on Windows.  Always use the
-latest release in order to benefit from the latest performance tweaks.
-Magit too tries to work around some Windows-specific issues.
-
-   According to some sources, setting the following Git variables can
-also help.
-
-     git config --global core.preloadindex true   # default since v2.1
-     git config --global core.fscache true        # default since v2.8
-     git config --global gc.auto 256
-
-   You should also check whether an anti-virus program is affecting
-performance.
-
-
-File: magit.info,  Node: MacOS Performance,  Prev: Microsoft Windows Performance,  Up: Performance
-
-MacOS Performance
-.................
-
-On macOS Emacs currently creates child processes using ‘fork’.  It
-appears that this also copies GUI resources.  The result is that forking
-takes about 30 times as long on Darwin than on Linux.  And because Magit
-starts many ‘git’ processes even when doing simple things, that makes
-quite a difference.
-
-   On the ‘master’ branch Emacs now uses ‘vfork’ when possible, like
-this was already done on Linux, and now child creation only takes about
-twice as long on Darwin.  See (1) for more information.
-
-   Nobody knows when the changes on the ‘master’ branch will be released
-as ‘26.1’, but it is still a long way off.  You might want to get your
-hands on this change before then.  The easiest way to get a patched
-Emacs is to install the ‘emacs-plus’ formula (2) using ‘homebrew’.  The
-change has been backported, so you get it not only when using ‘--HEAD’,
-but also when using ‘--devel’ or when installing the latest release (by
-not using a version argument).
-
-   Alternatively you can apply the backport (3) manually.
-
-   ---------- Footnotes ----------
-
-   (1) 
-<https://lists.gnu.org/archive/html/bug-gnu-emacs/2017-04/msg00201.html>
-
-   (2) <https://github.com/d12frosted/homebrew-emacs-plus>
-
-   (3) 
-<https://gist.githubusercontent.com/aaronjensen/f45894ddf431ecbff78b1bcf533d3e6b/raw/6a5cd7f57341aba673234348d8b0d2e776f86719/Emacs-25-OS-X-use-vfork.patch>
-
-
-File: magit.info,  Node: Plumbing,  Next: FAQ,  Prev: Customizing,  Up: Top
-
-10 Plumbing
-***********
-
-The following sections describe how to use several of Magit’s core
-abstractions to extend Magit itself or implement a separate extension.
-
-   A few of the low-level features used by Magit have been factored out
-into separate libraries/packages, so that they can be used by other
-packages, without having to depend on Magit.  These libraries are
-described in separate manuals, see *note (with-editor)Top:: and *note
-(magit-popup)Top::.
-
-   If you are trying to find an unused key that you can bind to a
-command provided by your own Magit extension, then checkout
-<https://github.com/magit/magit/wiki/Plugin-Dispatch-Key-Registry>.
-
-* Menu:
-
-* Calling Git::
-* Section Plumbing::
-* Refreshing Buffers::
-* Conventions::
-
-
-File: magit.info,  Node: Calling Git,  Next: Section Plumbing,  Up: Plumbing
-
-10.1 Calling Git
-================
-
-Magit provides many specialized functions for calling Git.  All of these
-functions are defined in either ‘magit-git.el’ or ‘magit-process.el’ and
-have one of the prefixes ‘magit-run-’, ‘magit-call-’, ‘magit-start-’, or
-‘magit-git-’ (which is also used for other things).
-
-   All of these functions accept an indefinite number of arguments,
-which are strings that specify command line arguments for Git (or in
-some cases an arbitrary executable).  These arguments are flattened
-before being passed on to the executable; so instead of strings they can
-also be lists of strings and arguments that are ‘nil’ are silently
-dropped.  Some of these functions also require a single mandatory
-argument before these command line arguments.
-
-   Roughly speaking, these functions run Git either to get some value or
-for side-effects.  The functions that return a value are useful to
-collect the information necessary to populate a Magit buffer, while the
-others are used to implement Magit commands.
-
-   The functions in the value-only group always run synchronously, and
-they never trigger a refresh.  The function in the side-effect group can
-be further divided into subgroups depending on whether they run Git
-synchronously or asynchronously, and depending on whether they trigger a
-refresh when the executable has finished.
-
-* Menu:
-
-* Getting a Value from Git::
-* Calling Git for Effect::
-
-
-File: magit.info,  Node: Getting a Value from Git,  Next: Calling Git for Effect,  Up: Calling Git
-
-10.1.1 Getting a Value from Git
--------------------------------
-
-These functions run Git in order to get a value, an exit status, or
-output.  Of course you could also use them to run Git commands that have
-side-effects, but that should be avoided.
-
- -- Function: magit-git-exit-code &rest args
-
-     Executes git with ARGS and returns its exit code.
-
- -- Function: magit-git-success &rest args
-
-     Executes git with ARGS and returns ‘t’ if the exit code is ‘0’,
-     ‘nil’ otherwise.
-
- -- Function: magit-git-failure &rest args
-
-     Executes git with ARGS and returns ‘t’ if the exit code is ‘1’,
-     ‘nil’ otherwise.
-
- -- Function: magit-git-true &rest args
-
-     Executes git with ARGS and returns ‘t’ if the first line printed by
-     git is the string "true", ‘nil’ otherwise.
-
- -- Function: magit-git-false &rest args
-
-     Executes git with ARGS and returns ‘t’ if the first line printed by
-     git is the string "false", ‘nil’ otherwise.
-
- -- Function: magit-git-insert &rest args
-
-     Executes git with ARGS and inserts its output at point.
-
- -- Function: magit-git-string &rest args
-
-     Executes git with ARGS and returns the first line of its output.
-     If there is no output or if it begins with a newline character,
-     then this returns ‘nil’.
-
- -- Function: magit-git-lines &rest args
-
-     Executes git with ARGS and returns its output as a list of lines.
-     Empty lines anywhere in the output are omitted.
-
- -- Function: magit-git-items &rest args
-
-     Executes git with ARGS and returns its null-separated output as a
-     list.  Empty items anywhere in the output are omitted.
-
-     If the value of option ‘magit-git-debug’ is non-nil and git exits
-     with a non-zero exit status, then warn about that in the echo area
-     and add a section containing git’s standard error in the current
-     repository’s process buffer.
-
-   If an error occurs when using one of the above functions, then that
-is usually due to a bug, i.e.  using an argument which is not actually
-supported.  Such errors are usually not reported, but when they occur we
-need to be able to debug them.
-
- -- User Option: magit-git-debug
-
-     Whether to report errors that occur when using ‘magit-git-insert’,
-     ‘magit-git-string’, ‘magit-git-lines’, or ‘magit-git-items’.  This
-     does not actually raise an error.  Instead a message is shown in
-     the echo area, and git’s standard error is insert into a new
-     section in the current repository’s process buffer.
-
- -- Function: magit-git-str &rest args
-
-     This is a variant of ‘magit-git-string’ that ignores the option
-     ‘magit-git-debug’.  It is mainly intended to be used while handling
-     errors in functions that do respect that option.  Using such a
-     function while handing an error could cause yet another error and
-     therefore lead to an infinite recursion.  You probably won’t ever
-     need to use this function.
-
-
-File: magit.info,  Node: Calling Git for Effect,  Prev: Getting a Value from Git,  Up: Calling Git
-
-10.1.2 Calling Git for Effect
------------------------------
-
-These functions are used to run git to produce some effect.  Most Magit
-commands that actually run git do so by using such a function.
-
-   Because we do not need to consume git’s output when using these
-functions, their output is instead logged into a per-repository buffer,
-which can be shown using ‘$’ from a Magit buffer or ‘M-x magit-process’
-elsewhere.
-
-   These functions can have an effect in two distinct ways.  Firstly,
-running git may change something, i.e.  create or push a new commit.
-Secondly, that change may require that Magit buffers are refreshed to
-reflect the changed state of the repository.  But refreshing isn’t
-always desirable, so only some of these functions do perform such a
-refresh after git has returned.
-
-   Sometimes it is useful to run git asynchronously.  For example, when
-the user has just initiated a push, then there is no reason to make her
-wait until that has completed.  In other cases it makes sense to wait
-for git to complete before letting the user do something else.  For
-example after staging a change it is useful to wait until after the
-refresh because that also automatically moves to the next change.
-
- -- Function: magit-call-git &rest args
-
-     Calls git synchronously with ARGS.
-
- -- Function: magit-call-process program &rest args
-
-     Calls PROGRAM synchronously with ARGS.
-
- -- Function: magit-run-git &rest args
-
-     Calls git synchronously with ARGS and then refreshes.
-
- -- Function: magit-run-git-with-input input &rest args
-
-     Calls git synchronously with ARGS and sends it INPUT on standard
-     input.
-
-     INPUT should be a buffer or the name of an existing buffer.  The
-     content of that buffer is used as the process’ standard input.
-     After the process returns a refresh is performed.
-
-     As a special case, INPUT may also be nil.  In that case the content
-     of the current buffer is used as standard input and *no* refresh is
-     performed.
-
-     This function actually runs git asynchronously.  But then it waits
-     for the process to return, so the function itself is synchronous.
-
- -- Function: magit-run-git-with-logfile file &rest args
-
-     Calls git synchronously with ARGS.  The process’ output is saved in
-     FILE.  This is rarely useful and so this function might be removed
-     in the future.
-
-     This function actually runs git asynchronously.  But then it waits
-     for the process to return, so the function itself is synchronous.
-
- -- Function: magit-git &rest args
-
-     Calls git synchronously with ARGS for side-effects only.  This
-     function does not refresh the buffer.
-
- -- Function: magit-git-wash washer &rest args
-
-     Execute Git with ARGS, inserting washed output at point.  Actually
-     first insert the raw output at point.  If there is no output call
-     ‘magit-cancel-section’.  Otherwise temporarily narrow the buffer to
-     the inserted text, move to its beginning, and then call function
-     WASHER with ARGS as its sole argument.
-
-   And now for the asynchronous variants.
-
- -- Function: magit-run-git-async &rest args
-
-     Start Git, prepare for refresh, and return the process object.
-     ARGS is flattened and then used as arguments to Git.
-
-     Display the command line arguments in the echo area.
-
-     After Git returns some buffers are refreshed: the buffer that was
-     current when this function was called (if it is a Magit buffer and
-     still alive), as well as the respective Magit status buffer.
-     Unmodified buffers visiting files that are tracked in the current
-     repository are reverted if ‘magit-revert-buffers’ is non-nil.
-
- -- Function: magit-run-git-with-editor &rest args
-
-     Export GIT_EDITOR and start Git.  Also prepare for refresh and
-     return the process object.  ARGS is flattened and then used as
-     arguments to Git.
-
-     Display the command line arguments in the echo area.
-
-     After Git returns some buffers are refreshed: the buffer that was
-     current when this function was called (if it is a Magit buffer and
-     still alive), as well as the respective Magit status buffer.
-
- -- Function: magit-start-git &rest args
-
-     Start Git, prepare for refresh, and return the process object.
-
-     If INPUT is non-nil, it has to be a buffer or the name of an
-     existing buffer.  The buffer content becomes the processes standard
-     input.
-
-     Option ‘magit-git-executable’ specifies the Git executable and
-     option ‘magit-git-global-arguments’ specifies constant arguments.
-     The remaining arguments ARGS specify arguments to Git.  They are
-     flattened before use.
-
-     After Git returns, some buffers are refreshed: the buffer that was
-     current when this function was called (if it is a Magit buffer and
-     still alive), as well as the respective Magit status buffer.
-     Unmodified buffers visiting files that are tracked in the current
-     repository are reverted if ‘magit-revert-buffers’ is non-nil.
-
- -- Function: magit-start-process &rest args
-
-     Start PROGRAM, prepare for refresh, and return the process object.
-
-     If optional argument INPUT is non-nil, it has to be a buffer or the
-     name of an existing buffer.  The buffer content becomes the
-     processes standard input.
-
-     The process is started using ‘start-file-process’ and then setup to
-     use the sentinel ‘magit-process-sentinel’ and the filter
-     ‘magit-process-filter’.  Information required by these functions is
-     stored in the process object.  When this function returns the
-     process has not started to run yet so it is possible to override
-     the sentinel and filter.
-
-     After the process returns, ‘magit-process-sentinel’ refreshes the
-     buffer that was current when ‘magit-start-process’ was called (if
-     it is a Magit buffer and still alive), as well as the respective
-     Magit status buffer.  Unmodified buffers visiting files that are
-     tracked in the current repository are reverted if
-     ‘magit-revert-buffers’ is non-nil.
-
- -- Variable: magit-this-process
-
-     The child process which is about to start.  This can be used to
-     change the filter and sentinel.
-
- -- Variable: magit-process-raise-error
-
-     When this is non-nil, then ‘magit-process-sentinel’ raises an error
-     if git exits with a non-zero exit status.  For debugging purposes.
-
-
-File: magit.info,  Node: Section Plumbing,  Next: Refreshing Buffers,  Prev: Calling Git,  Up: Plumbing
-
-10.2 Section Plumbing
-=====================
-
-* Menu:
-
-* Creating Sections::
-* Section Selection::
-* Matching Sections::
-
-
-File: magit.info,  Node: Creating Sections,  Next: Section Selection,  Up: Section Plumbing
-
-10.2.1 Creating Sections
-------------------------
-
- -- Macro: magit-insert-section &rest args
-
-     Insert a section at point.
-
-     TYPE is the section type, a symbol.  Many commands that act on the
-     current section behave differently depending on that type.  Also if
-     a variable ‘magit-TYPE-section-map’ exists, then use that as the
-     text-property ‘keymap’ of all text belonging to the section (but
-     this may be overwritten in subsections).  TYPE can also have the
-     form ‘(eval FORM)’ in which case FORM is evaluated at runtime.
-
-     Optional VALUE is the value of the section, usually a string that
-     is required when acting on the section.
-
-     When optional HIDE is non-nil collapse the section body by default,
-     i.e.  when first creating the section, but not when refreshing the
-     buffer.  Otherwise, expand it by default.  This can be overwritten
-     using ‘magit-section-set-visibility-hook’.  When a section is
-     recreated during a refresh, then the visibility of predecessor is
-     inherited and HIDE is ignored (but the hook is still honored).
-
-     BODY is any number of forms that actually insert the section’s
-     heading and body.  Optional NAME, if specified, has to be a symbol,
-     which is then bound to the struct of the section being inserted.
-
-     Before BODY is evaluated the ‘start’ of the section object is set
-     to the value of ‘point’ and after BODY was evaluated its ‘end’ is
-     set to the new value of ‘point’; BODY is responsible for moving
-     ‘point’ forward.
-
-     If it turns out inside BODY that the section is empty, then
-     ‘magit-cancel-section’ can be used to abort and remove all traces
-     of the partially inserted section.  This can happen when creating a
-     section by washing Git’s output and Git didn’t actually output
-     anything this time around.
-
- -- Function: magit-insert-heading &rest args
-
-     Insert the heading for the section currently being inserted.
-
-     This function should only be used inside ‘magit-insert-section’.
-
-     When called without any arguments, then just set the ‘content’ slot
-     of the object representing the section being inserted to a marker
-     at ‘point’.  The section should only contain a single line when
-     this function is used like this.
-
-     When called with arguments ARGS, which have to be strings, then
-     insert those strings at point.  The section should not contain any
-     text before this happens and afterwards it should again only
-     contain a single line.  If the ‘face’ property is set anywhere
-     inside any of these strings, then insert all of them unchanged.
-     Otherwise use the ‘magit-section-heading’ face for all inserted
-     text.
-
-     The ‘content’ property of the section struct is the end of the
-     heading (which lasts from ‘start’ to ‘content’) and the beginning
-     of the body (which lasts from ‘content’ to ‘end’).  If the value of
-     ‘content’ is nil, then the section has no heading and its body
-     cannot be collapsed.  If a section does have a heading then its
-     height must be exactly one line, including a trailing newline
-     character.  This isn’t enforced; you are responsible for getting it
-     right.  The only exception is that this function does insert a
-     newline character if necessary.
-
- -- Function: magit-cancel-section
-
-     Cancel the section currently being inserted.  This exits the
-     innermost call to ‘magit-insert-section’ and removes all traces of
-     what has already happened inside that call.
-
- -- Function: magit-define-section-jumper sym title &optional value
-
-     Define an interactive function to go to section SYM.  TITLE is the
-     displayed title of the section.
-
-
-File: magit.info,  Node: Section Selection,  Next: Matching Sections,  Prev: Creating Sections,  Up: Section Plumbing
-
-10.2.2 Section Selection
-------------------------
-
- -- Function: magit-current-section
-
-     Return the section at point.
-
- -- Function: magit-region-sections
-
-     Return a list of the selected sections.
-
-     When the region is active and constitutes a valid section
-     selection, then return a list of all selected sections.  This is
-     the case when the region begins in the heading of a section and
-     ends in the heading of a sibling of that first section.  When the
-     selection is not valid then return nil.  Most commands that can act
-     on the selected sections, then instead just act on the current
-     section, the one point is in.
-
-     When the region looks like it would in any other buffer then the
-     selection is invalid.  When the selection is valid then the region
-     uses the ‘magit-section-highlight’.  This does not apply to diffs
-     where things get a bit more complicated, but even here if the
-     region looks like it usually does, then that’s not a valid
-     selection as far as this function is concerned.
-
- -- Function: magit-region-values &rest types
-
-     Return a list of the values of the selected sections.
-
-     Also see ‘magit-region-sections’ whose doc-string explains when a
-     region is a valid section selection.  If the region is not active
-     or is not a valid section selection, then return nil.  If optional
-     TYPES is non-nil then the selection not only has to be valid; the
-     types of all selected sections additionally have to match one of
-     TYPES, or nil is returned.
-
-
-File: magit.info,  Node: Matching Sections,  Prev: Section Selection,  Up: Section Plumbing
-
-10.2.3 Matching Sections
-------------------------
-
-‘M-x magit-describe-section-briefly’     (‘magit-describe-section-briefly’)
-
-     Show information about the section at point.  This command is
-     intended for debugging purposes.
-
- -- Function: magit-section-ident
-
-     Return an unique identifier for SECTION.  The return value has the
-     form ‘((TYPE . VALUE)...)’.
-
- -- Function: magit-get-section
-
-     Return the section identified by IDENT.  IDENT has to be a list as
-     returned by ‘magit-section-ident’.
-
- -- Function: magit-section-match condition &optional section
-
-     Return ‘t’ if SECTION matches CONDITION.  SECTION defaults to the
-     section at point.  If SECTION is not specified and there also is no
-     section at point, then return ‘nil’.
-
-     CONDITION can take the following forms:
-        • ‘(CONDITION...)’
-
-          matches if any of the CONDITIONs matches.
-
-        • ‘[TYPE...]’
-
-          matches if the first TYPE matches the type of the section, the
-          second matches that of its parent, and so on.
-
-        • ‘[* TYPE...]’
-
-          matches sections that match [TYPE...] and also recursively all
-          their child sections.
-
-        • ‘TYPE’
-
-          matches sections of TYPE regardless of the types of the parent
-          sections.
-
-     Each TYPE is a symbol.  Note that it is not necessary to specify
-     all TYPEs up to the root section as printed by
-     ‘magit-describe-type’, unless of course you want to be that
-     precise.
-
- -- Function: magit-section-when condition &rest body
-
-     If the section at point matches CONDITION evaluate BODY.
-
-     If the section matches, then evaluate BODY forms sequentially with
-     ‘it’ bound to the section and return the value of the last form.
-     If there are no BODY forms, then return the value of the section.
-     If the section does not match or if there is no section at point
-     then return nil.
-
-     See ‘magit-section-match’ for the forms CONDITION can take.
-
- -- Function: magit-section-case &rest clauses
-
-     Choose among clauses on the type of the section at point.
-
-     Each clause looks like (CONDITION BODY...).  The type of the
-     section is compared against each CONDITION; the BODY forms of the
-     first match are evaluated sequentially and the value of the last
-     form is returned.  Inside BODY the symbol ‘it’ is bound to the
-     section at point.  If no clause succeeds or if there is no section
-     at point return nil.
-
-     See ‘magit-section-match’ for the forms CONDITION can take.
-     Additionally a CONDITION of t is allowed in the final clause and
-     matches if no other CONDITION match, even if there is no section at
-     point.
-
- -- Variable: magit-root-section
-
-     The root section in the current buffer.  All other sections are
-     descendants of this section.  The value of this variable is set by
-     ‘magit-insert-section’ and you should never modify it.
-
-   For diff related sections a few additional tools exist.
-
- -- Function: magit-diff-type &optional section
-
-     Return the diff type of SECTION.
-
-     The returned type is one of the symbols ‘staged’, ‘unstaged’,
-     ‘committed’, or ‘undefined’.  This type serves a similar purpose as
-     the general type common to all sections (which is stored in the
-     ‘type’ slot of the corresponding ‘magit-section’ struct) but takes
-     additional information into account.  When the SECTION isn’t
-     related to diffs and the buffer containing it also isn’t a
-     diff-only buffer, then return nil.
-
-     Currently the type can also be one of ‘tracked’ and ‘untracked’,
-     but these values are not handled explicitly in every place they
-     should be.  A possible fix could be to just return nil here.
-
-     The section has to be a ‘diff’ or ‘hunk’ section, or a section
-     whose children are of type ‘diff’.  If optional SECTION is nil,
-     return the diff type for the current section.  In buffers whose
-     major mode is ‘magit-diff-mode’ SECTION is ignored and the type is
-     determined using other means.  In ‘magit-revision-mode’ buffers the
-     type is always ‘committed’.
-
- -- Function: magit-diff-scope &optional section strict
-
-     Return the diff scope of SECTION or the selected section(s).
-
-     A diff’s "scope" describes what part of a diff is selected, it is a
-     symbol, one of ‘region’, ‘hunk’, ‘hunks’, ‘file’, ‘files’, or
-     ‘list’.  Do not confuse this with the diff "type", as returned by
-     ‘magit-diff-type’.
-
-     If optional SECTION is non-nil, then return the scope of that,
-     ignoring the sections selected by the region.  Otherwise return the
-     scope of the current section, or if the region is active and
-     selects a valid group of diff related sections, the type of these
-     sections, i.e.  ‘hunks’ or ‘files’.  If SECTION (or if the current
-     section that is nil) is a ‘hunk’ section and the region starts and
-     ends inside the body of a that section, then the type is ‘region’.
-
-     If optional STRICT is non-nil then return nil if the diff type of
-     the section at point is ‘untracked’ or the section at point is not
-     actually a ‘diff’ but a ‘diffstat’ section.
-
-
-File: magit.info,  Node: Refreshing Buffers,  Next: Conventions,  Prev: Section Plumbing,  Up: Plumbing
-
-10.3 Refreshing Buffers
-=======================
-
-All commands that create a new Magit buffer or change what is being
-displayed in an existing buffer do so by calling ‘magit-mode-setup’.
-Among other things, that function sets the buffer local values of
-‘default-directory’ (to the top-level of the repository),
-‘magit-refresh-function’, and ‘magit-refresh-args’.
-
-   Buffers are refreshed by calling the function that is the local value
-of ‘magit-refresh-function’ (a function named ‘magit-*-refresh-buffer’,
-where ‘*’ may be something like ‘diff’) with the value of
-‘magit-refresh-args’ as arguments.
-
- -- Macro: magit-mode-setup buffer switch-func mode refresh-func
-          &optional refresh-args
-
-     This function displays and selects BUFFER, turns on MODE, and
-     refreshes a first time.
-
-     This function displays and optionally selects BUFFER by calling
-     ‘magit-mode-display-buffer’ with BUFFER, MODE and SWITCH-FUNC as
-     arguments.  Then it sets the local value of
-     ‘magit-refresh-function’ to REFRESH-FUNC and that of
-     ‘magit-refresh-args’ to REFRESH-ARGS.  Finally it creates the
-     buffer content by calling REFRESH-FUNC with REFRESH-ARGS as
-     arguments.
-
-     All arguments are evaluated before switching to BUFFER.
-
- -- Function: magit-mode-display-buffer buffer mode &optional
-          switch-function
-
-     This function display BUFFER in some window and select it.  BUFFER
-     may be a buffer or a string, the name of a buffer.  The buffer is
-     returned.
-
-     Unless BUFFER is already displayed in the selected frame, store the
-     previous window configuration as a buffer local value, so that it
-     can later be restored by ‘magit-mode-bury-buffer’.
-
-     The buffer is displayed and selected using SWITCH-FUNCTION.  If
-     that is ‘nil’ then ‘pop-to-buffer’ is used if the current buffer’s
-     major mode derives from ‘magit-mode’.  Otherwise ‘switch-to-buffer’
-     is used.
-
- -- Variable: magit-refresh-function
-
-     The value of this buffer-local variable is the function used to
-     refresh the current buffer.  It is called with ‘magit-refresh-args’
-     as arguments.
-
- -- Variable: magit-refresh-args
-
-     The list of arguments used by ‘magit-refresh-function’ to refresh
-     the current buffer.  ‘magit-refresh-function’ is called with these
-     arguments.
-
-     The value is usually set using ‘magit-mode-setup’, but in some
-     cases it’s also useful to provide commands which can change the
-     value.  For example, the ‘magit-diff-refresh-popup’ can be used to
-     change any of the arguments used to display the diff, without
-     having to specify again which differences should be shown.
-     ‘magit-diff-more-context’, ‘magit-diff-less-context’, and
-     ‘magit-diff-default-context’ change just the ‘-U<N>’ argument.  In
-     both case this is done by changing the value of this variable and
-     then calling this ‘magit-refresh-function’.
-
-
-File: magit.info,  Node: Conventions,  Prev: Refreshing Buffers,  Up: Plumbing
-
-10.4 Conventions
-================
-
-Also see *note Completion and Confirmation::.
-
-* Menu:
-
-* Theming Faces::
-
-
-File: magit.info,  Node: Theming Faces,  Up: Conventions
-
-10.4.1 Theming Faces
---------------------
-
-The default theme uses blue for local branches, green for remote
-branches, and goldenrod (brownish yellow) for tags.  When creating a new
-theme, you should probably follow that example.  If your theme already
-uses other colors, then stick to that.
-
-   In older releases these reference faces used to have a background
-color and a box around them.  The basic default faces no longer do so,
-to make Magit buffers much less noisy, and you should follow that
-example at least with regards to boxes.  (Boxes were used in the past to
-work around a conflict between the highlighting overlay and text
-property backgrounds.  That’s no longer necessary because highlighting
-no longer causes other background colors to disappear.)  Alternatively
-you can keep the background color and/or box, but then have to take
-special care to adjust ‘magit-branch-current’ accordingly.  By default
-it looks mostly like ‘magit-branch-local’, but with a box (by default
-the former is the only face that uses a box, exactly so that it sticks
-out).  If the former also uses a box, then you have to make sure that it
-differs in some other way from the latter.
-
-   The most difficult faces to theme are those related to diffs,
-headings, highlighting, and the region.  There are faces that fall into
-all four groups - expect to spend some time getting this right.
-
-   The ‘region’ face in the default theme, in both the light and dark
-variants, as well as in many other themes, distributed with Emacs or by
-third-parties, is very ugly.  It is common to use a background color
-that really sticks out, which is ugly but if that were the only problem
-then it would be acceptable.  Unfortunately many themes also set the
-foreground color, which ensures that all text within the region is
-readable.  Without doing that there might be cases where some foreground
-color is too close to the region background color to still be readable.
-But it also means that text within the region loses all syntax
-highlighting.
-
-   I consider the work that went into getting the ‘region’ face right to
-be a good indicator for the general quality of a theme.  My
-recommendation for the ‘region’ face is this: use a background color
-slightly different from the background color of the ‘default’ face, and
-do not set the foreground color at all.  So for a light theme you might
-use a light (possibly tinted) gray as the background color of ‘default’
-and a somewhat darker gray for the background of ‘region’.  That should
-usually be enough to not collide with the foreground color of any other
-face.  But if some other faces also set a light gray as background
-color, then you should also make sure it doesn’t collide with those (in
-some cases it might be acceptable though).
-
-   Magit only uses the ‘region’ face when the region is "invalid" by its
-own definition.  In a Magit buffer the region is used to either select
-multiple sibling sections, so that commands which support it act on all
-of these sections instead of just the current section, or to select
-lines within a single hunk section.  In all other cases, the section is
-considered invalid and Magit won’t act on it.  But such invalid sections
-happen, either because the user has not moved point enough yet to make
-it valid or because she wants to use a non-magit command to act on the
-region, e.g.  ‘kill-region’.
-
-   So using the regular ‘region’ face for invalid sections is a feature.
-It tells the user that Magit won’t be able to act on it.  It’s
-acceptable if that face looks a bit odd and even (but less so) if it
-collides with the background colors of section headings and other things
-that have a background color.
-
-   Magit highlights the current section.  If a section has subsections,
-then all of them are highlighted.  This is done using faces that have
-"highlight" in their names.  For most sections,
-‘magit-section-highlight’ is used for both the body and the heading.
-Like the ‘region’ face, it should only set the background color to
-something similar to that of ‘default’.  The highlight background color
-must be different from both the ‘region’ background color and the
-‘default’ background color.
-
-   For diff related sections Magit uses various faces to highlight
-different parts of the selected section(s).  Note that hunk headings,
-unlike all other section headings, by default have a background color,
-because it is useful to have very visible separators between hunks.
-That face ‘magit-diff-hunk-heading’, should be different from both
-‘magit-diff-hunk-heading-highlight’ and ‘magit-section-highlight’, as
-well as from ‘magit-diff-context’ and ‘magit-diff-context-highlight’.
-By default we do that by changing the foreground color.  Changing the
-background color would lead to complications, and there are already
-enough we cannot get around.  (Also note that it is generally a good
-idea for section headings to always be bold, but only for sections that
-have subsections).
-
-   When there is a valid region selecting diff-related sibling sections,
-i.e.  multiple files or hunks, then the bodies of all these sections use
-the respective highlight faces, but additionally the headings instead
-use one of the faces ‘magit-diff-file-heading-selection’ or
-‘magit-diff-hunk-heading-selection’.  These faces have to be different
-from the regular highlight variants to provide explicit visual
-indication that the region is active.
-
-   When theming diff related faces, start by setting the option
-‘magit-diff-refine-hunk’ to ‘all’.  You might personally prefer to only
-refine the current hunk or not use hunk refinement at all, but some of
-the users of your theme want all hunks to be refined, so you have to
-cater to that.
-
-   (Also turn on ‘magit-diff-highlight-indentation’,
-‘magit-diff-highlight-trailing’, and ‘magit-diff-paint-whitespace’; and
-insert some whitespace errors into the code you use for testing.)
-
-   For e.g.  "added lines" you have to adjust three faces:
-‘magit-diff-added’, ‘magit-diff-added-highlight’, and
-‘smerge-refined-added’.  Make sure that the latter works well with both
-of the former, as well as ‘smerge-other’ and ‘diff-added’.  Then do the
-same for the removed lines, context lines, lines added by us, and lines
-added by them.  Also make sure the respective added, removed, and
-context faces use approximately the same saturation for both the
-highlighted and unhighlighted variants.  Also make sure the file and
-diff headings work nicely with context lines (e.g.  make them look
-different).  Line faces should set both the foreground and the
-background color.  For example, for added lines use two different
-greens.
-
-   It’s best if the foreground color of both the highlighted and the
-unhighlighted variants are the same, so you will need to have to find a
-color that works well on the highlight and unhighlighted background, the
-refine background, and the highlight context background.  When there is
-an hunk internal region, then the added- and removed-lines background
-color is used only within that region.  Outside the region the
-highlighted context background color is used.  This makes it easier to
-see what is being staged.  With an hunk internal region the hunk heading
-is shown using ‘magit-diff-hunk-heading-selection’, and so are the thin
-lines that are added around the lines that fall within the region.  The
-background color of that has to be distinct enough from the various
-other involved background colors.
-
-   Nobody said this would be easy.  If your theme restricts itself to a
-certain set of colors, then you should make an exception here.
-Otherwise it would be impossible to make the diffs look good in each and
-every variation.  Actually you might want to just stick to the default
-definitions for these faces.  You have been warned.  Also please note
-that if you do not get this right, this will in some cases look to users
-like bugs in Magit - so please do it right or not at all.
-
-
-File: magit.info,  Node: FAQ,  Next: Debugging Tools,  Prev: Plumbing,  Up: Top
-
-Appendix A FAQ
-**************
-
-The next two nodes lists frequently asked questions.  For a list of
-frequently *and recently* asked questions, i.e.  questions that haven’t
-made it into the manual yet, see
-<https://github.com/magit/magit/wiki/FAQ>.
-
-   Please also use the *note Debugging Tools::.
-
-* Menu:
-
-* FAQ - How to ...?::
-* FAQ - Issues and Errors::
-
-
-File: magit.info,  Node: FAQ - How to ...?,  Next: FAQ - Issues and Errors,  Up: FAQ
-
-A.1 FAQ - How to ...?
-=====================
-
-* Menu:
-
-* How to show git's output?::
-* How to install the gitman info manual?::
-* How to show diffs for gpg-encrypted files?::
-* How does branching and pushing work?::
-* Can Magit be used as ediff-version-control-package?::
-
-
-File: magit.info,  Node: How to show git's output?,  Next: How to install the gitman info manual?,  Up: FAQ - How to ...?
-
-A.1.1 How to show git’s output?
--------------------------------
-
-To show the output of recently run git commands, press ‘$’ (or, if that
-isn’t available, ‘M-x magit-process-buffer’).  This will show a buffer
-containing a section per git invocation; as always press ‘TAB’ to expand
-or collapse them.
-
-   By default, git’s output is only inserted into the process buffer if
-it is run for side-effects.  When the output is consumed in some way,
-also inserting it into the process buffer would be too expensive.  For
-debugging purposes, it’s possible to do so anyway by setting
-‘magit-git-debug’ to ‘t’.
-
-
-File: magit.info,  Node: How to install the gitman info manual?,  Next: How to show diffs for gpg-encrypted files?,  Prev: How to show git's output?,  Up: FAQ - How to ...?
-
-A.1.2 How to install the gitman info manual?
---------------------------------------------
-
-Git’s manpages can be exported as an info manual called ‘gitman’.
-Magit’s own info manual links to nodes in that manual instead of the
-actual manpages because Info doesn’t support linking to manpages.
-
-   Unfortunately some distributions do not install the ‘gitman’ manual
-by default and you will have to install a separate documentation package
-to get it.
-
-   Magit patches Info adding the ability to visit links to the ‘gitman’
-Info manual by instead viewing the respective manpage.  If you prefer
-that approach, then set the value of ‘magit-view-git-manual-method’ to
-one of the supported packages ‘man’ or ‘woman’, e.g.:
-
-     (setq magit-view-git-manual-method 'man)
-
-
-File: magit.info,  Node: How to show diffs for gpg-encrypted files?,  Next: How does branching and pushing work?,  Prev: How to install the gitman info manual?,  Up: FAQ - How to ...?
-
-A.1.3 How to show diffs for gpg-encrypted files?
-------------------------------------------------
-
-Git supports showing diffs for encrypted files, but has to be told to do
-so.  Since Magit just uses Git to get the diffs, configuring Git also
-affects the diffs displayed inside Magit.
-
-     git config --global diff.gpg.textconv "gpg --no-tty --decrypt"
-     echo "*.gpg filter=gpg diff=gpg" > .gitattributes
-
-
-File: magit.info,  Node: How does branching and pushing work?,  Next: Can Magit be used as ediff-version-control-package?,  Prev: How to show diffs for gpg-encrypted files?,  Up: FAQ - How to ...?
-
-A.1.4 How does branching and pushing work?
-------------------------------------------
-
-Please see *note Branching:: and
-<http://emacsair.me/2016/01/17/magit-2.4>
-
-
-File: magit.info,  Node: Can Magit be used as ediff-version-control-package?,  Prev: How does branching and pushing work?,  Up: FAQ - How to ...?
-
-A.1.5 Can Magit be used as ‘ediff-version-control-package’?
------------------------------------------------------------
-
-No, it cannot.  For that to work the functions ‘ediff-magit-internal’
-and ‘ediff-magit-merge-internal’ would have to be implemented, and they
-are not.  These two functions are only used by the three commands
-‘ediff-revision’, ‘ediff-merge-revisions-with-ancestor’, and
-‘ediff-merge-revisions’.
-
-   These commands only delegate the task of populating buffers with
-certain revisions to the "internal" functions.  The equally important
-task of determining which revisions are to be compared/merged is not
-delegated.  Instead this is done without any support whatsoever from the
-version control package/system - meaning that the user has to enter the
-revisions explicitly.  Instead of implementing ‘ediff-magit-internal’ we
-provide ‘magit-ediff-compare’, which handles both tasks like it is 2005.
-
-   The other commands ‘ediff-merge-revisions’ and
-‘ediff-merge-revisions-with-ancestor’ are normally not what you want
-when using a modern version control system like Git.  Instead of letting
-the user resolve only those conflicts which Git could not resolve on its
-own, they throw away all work done by Git and then expect the user to
-manually merge all conflicts, including those that had already been
-resolved.  That made sense back in the days when version control systems
-couldn’t merge (or so I have been told), but not anymore.  Once in a
-blue moon you might actually want to see all conflicts, in which case
-you *can* use these commands, which then use ‘ediff-vc-merge-internal’.
-So we don’t actually have to implement ‘ediff-magit-merge-internal’.
-Instead we provide the more useful command ‘magit-ediff-resolve’ which
-only shows yet-to-be resolved conflicts.
-
-
-File: magit.info,  Node: FAQ - Issues and Errors,  Prev: FAQ - How to ...?,  Up: FAQ
-
-A.2 FAQ - Issues and Errors
-===========================
-
-* Menu:
-
-* Magit is slow::
-* I changed several thousand files at once and now Magit is unusable::
-* I am having problems committing::
-* I am using MS Windows and cannot push with Magit::
-* I am using OS X and SOMETHING works in shell, but not in Magit: I am using OS X and SOMETHING works in shell but not in Magit.
-* Diffs contain control sequences::
-* Expanding a file to show the diff causes it to disappear::
-* Point is wrong in the COMMIT_EDITMSG buffer::
-* The mode-line information isn't always up-to-date::
-* A branch and tag sharing the same name breaks SOMETHING::
-* My Git hooks work on the command-line but not inside Magit::
-* git-commit-mode isn't used when committing from the command-line::
-* Point ends up inside invisible text when jumping to a file-visiting buffer::
-
-
-File: magit.info,  Node: Magit is slow,  Next: I changed several thousand files at once and now Magit is unusable,  Up: FAQ - Issues and Errors
-
-A.2.1 Magit is slow
--------------------
-
-See *note Performance::.
-
-
-File: magit.info,  Node: I changed several thousand files at once and now Magit is unusable,  Next: I am having problems committing,  Prev: Magit is slow,  Up: FAQ - Issues and Errors
-
-A.2.2 I changed several thousand files at once and now Magit is unusable
-------------------------------------------------------------------------
-
-Magit is *currently* not expected to work under such conditions.  It
-sure would be nice if it did, and v2.5 will hopefully be a big step into
-that direction.  But it might take until v3.1 to accomplish fully
-satisfactory performance, because that requires some heavy refactoring.
-
-   But for now we recommend you use the command line to complete this
-one commit.  Also see *note Performance::.
-
-
-File: magit.info,  Node: I am having problems committing,  Next: I am using MS Windows and cannot push with Magit,  Prev: I changed several thousand files at once and now Magit is unusable,  Up: FAQ - Issues and Errors
-
-A.2.3 I am having problems committing
--------------------------------------
-
-That likely means that Magit is having problems finding an appropriate
-emacsclient executable.  See *note (with-editor)Configuring
-With-Editor:: and *note (with-editor)Debugging::.
-
-
-File: magit.info,  Node: I am using MS Windows and cannot push with Magit,  Next: I am using OS X and SOMETHING works in shell but not in Magit,  Prev: I am having problems committing,  Up: FAQ - Issues and Errors
-
-A.2.4 I am using MS Windows and cannot push with Magit
-------------------------------------------------------
-
-It’s almost certain that Magit is only incidental to this issue.  It is
-much more likely that this is a configuration issue, even if you can
-push on the command line.
-
-   Detailed setup instructions can be found at
-<https://github.com/magit/magit/wiki/Pushing-with-Magit-from-Windows>.
-
-
-File: magit.info,  Node: I am using OS X and SOMETHING works in shell but not in Magit,  Next: Diffs contain control sequences,  Prev: I am using MS Windows and cannot push with Magit,  Up: FAQ - Issues and Errors
-
-A.2.5 I am using OS X and SOMETHING works in shell, but not in Magit
---------------------------------------------------------------------
-
-This usually occurs because Emacs doesn’t have the same environment
-variables as your shell.  Try installing and configuring
-<https://github.com/purcell/exec-path-from-shell>.  By default it
-synchronizes ‘$PATH’, which helps Magit find the same ‘git’ as the one
-you are using on the shell.
-
-   If SOMETHING is "passphrase caching with gpg-agent for commit and/or
-tag signing", then you’ll also need to synchronize ‘$GPG_AGENT_INFO’.
-
-
-File: magit.info,  Node: Diffs contain control sequences,  Next: Expanding a file to show the diff causes it to disappear,  Prev: I am using OS X and SOMETHING works in shell but not in Magit,  Up: FAQ - Issues and Errors
-
-A.2.6 Diffs contain control sequences
--------------------------------------
-
-This happens when you configure Git to always color diffs and/or all of
-its output.  The valid values for relevant Git variables ‘color.ui’ and
-‘color.diff’ are ‘false’, ‘true’ and ‘always’, and the default is
-‘true’.  You should leave it that way because then you get colorful
-output in terminals by default but when git’s output is consumed by
-something else, then no color control sequences are used.
-
-   If you actually use some other tool that requires setting ‘color.ui’
-and/or ‘color.diff’ to ‘always’ (which is highly unlikely), then you can
-override these settings just for Magit by using:
-
-     (setq magit-git-global-arguments
-           (nconc magit-git-global-arguments
-                  '("-c" "color.ui=false"
-                    "-c" "color.diff=false")))
-
-
-File: magit.info,  Node: Expanding a file to show the diff causes it to disappear,  Next: Point is wrong in the COMMIT_EDITMSG buffer,  Prev: Diffs contain control sequences,  Up: FAQ - Issues and Errors
-
-A.2.7 Expanding a file to show the diff causes it to disappear
---------------------------------------------------------------
-
-This is probably caused by a change of a ‘diff.*’ Git variable.  You
-probably set that variable for a reason, and should therefore only undo
-that setting in Magit by customizing ‘magit-git-global-arguments’.
-
-
-File: magit.info,  Node: Point is wrong in the COMMIT_EDITMSG buffer,  Next: The mode-line information isn't always up-to-date,  Prev: Expanding a file to show the diff causes it to disappear,  Up: FAQ - Issues and Errors
-
-A.2.8 Point is wrong in the ‘COMMIT_EDITMSG’ buffer
----------------------------------------------------
-
-Neither Magit nor ‘git-commit‘ fiddle with point in the buffer used to
-write commit messages, so something else must be doing it.
-
-   You have probably globally enabled a mode which does restore point in
-file-visiting buffers.  It might be a bit surprising, but when you write
-a commit message, then you are actually editing a file.
-
-   So you have to figure out which package is doing.  ‘saveplace’,
-‘pointback’, and ‘session’ are likely candidates.  These snippets might
-help:
-
-     (setq session-name-disable-regexp "\\(?:\\`'\\.git/[A-Z_]+\\'\\)")
-
-     (with-eval-after-load 'pointback
-       (lambda ()
-         (when (or git-commit-mode git-rebase-mode)
-           (pointback-mode -1))))
-
-
-File: magit.info,  Node: The mode-line information isn't always up-to-date,  Next: A branch and tag sharing the same name breaks SOMETHING,  Prev: Point is wrong in the COMMIT_EDITMSG buffer,  Up: FAQ - Issues and Errors
-
-A.2.9 The mode-line information isn’t always up-to-date
--------------------------------------------------------
-
-Magit is not responsible for the version control information that is
-being displayed in the mode-line and looks something like ‘Git-master’.
-The built-in "Version Control" package, also known as "VC", updates that
-information, and can be told to do so more often:
-
-     (setq auto-revert-check-vc-info t)
-
-   But doing so isn’t good for performance.  For more (overly
-optimistic) information see *note (emacs)VC Mode Line::.
-
-   If you don’t really care about seeing that information in the
-mode-line, but just don’t want to see _incorrect_ information, then
-consider disabling VC when using Git:
-
-     (setq vc-handled-backends (delq 'Git vc-handled-backends))
-
-   Or to disable it completely:
-
-     (setq vc-handled-backends nil)
-
-
-File: magit.info,  Node: A branch and tag sharing the same name breaks SOMETHING,  Next: My Git hooks work on the command-line but not inside Magit,  Prev: The mode-line information isn't always up-to-date,  Up: FAQ - Issues and Errors
-
-A.2.10 A branch and tag sharing the same name breaks SOMETHING
---------------------------------------------------------------
-
-Or more generally, ambiguous refnames break SOMETHING.
-
-   Magit assumes that refs are named non-ambiguously across the
-"refs/heads/", "refs/tags/", and "refs/remotes/" namespaces (i.e., all
-the names remain unique when those prefixes are stripped).  We consider
-ambiguous refnames unsupported and recommend that you use a
-non-ambiguous naming scheme.  However, if you do work with a repository
-that has ambiguous refnames, please report any issues you encounter so
-that we can investigate whether there is a simple fix.
-
-
-File: magit.info,  Node: My Git hooks work on the command-line but not inside Magit,  Next: git-commit-mode isn't used when committing from the command-line,  Prev: A branch and tag sharing the same name breaks SOMETHING,  Up: FAQ - Issues and Errors
-
-A.2.11 My Git hooks work on the command-line but not inside Magit
------------------------------------------------------------------
-
-When Magit calls ‘git’ it adds a few global arguments including
-‘--literal-pathspecs’ and the ‘git’ process started by Magit then passes
-that setting on to other ‘git’ process it starts itself.  It does so by
-setting the environment variable ‘GIT_LITERAL_PATHSPECS’, not by calling
-subprocesses with the ‘--literal-pathspecs’.  You can therefore override
-this setting in hook scripts using ‘unset GIT_LITERAL_PATHSPECS’.
-
-
-File: magit.info,  Node: git-commit-mode isn't used when committing from the command-line,  Next: Point ends up inside invisible text when jumping to a file-visiting buffer,  Prev: My Git hooks work on the command-line but not inside Magit,  Up: FAQ - Issues and Errors
-
-A.2.12 ‘git-commit-mode’ isn’t used when committing from the command-line
--------------------------------------------------------------------------
-
-The reason for this is that ‘git-commit.el’ has not been loaded yet
-and/or that the server has not been started yet.  These things have
-always already been taken care of when you commit from Magit because in
-order to do so, Magit has to be loaded and doing that involves loading
-‘git-commit’ and starting the server.
-
-   If you want to commit from the command-line, then you have to take
-care of these things yourself.  Your ‘init.el’ file should contain:
-
-     (require 'git-commit)
-     (server-mode)
-
-   Instead of ‘(require ’git-commit)‘ you may also use:
-
-     (load "/path/to/magit-autoloads.el")
-
-   You might want to do that because loading ‘git-commit’ causes large
-parts of Magit to be loaded.
-
-   There are also some variations of ‘(server-mode)’ that you might want
-to try.  Personally I use:
-
-     (use-package server
-       :config (or (server-running-p) (server-mode)))
-
-   Now you can use:
-
-     $ emacs&
-     $ EDITOR=emacsclient git commit
-
-   However you cannot use:
-
-     $ killall emacs
-     $ EDITOR="emacsclient --alternate-editor emacs" git commit
-
-   This will actually end up using ‘emacs’, not ‘emacsclient’.  If you
-do this, then can still edit the commit message but ‘git-commit-mode’
-won’t be used and you have to exit ‘emacs’ to finish the process.
-
-   Tautology ahead.  If you want to be able to use ‘emacsclient’ to
-connect to a running ‘emacs’ instance, even though no ‘emacs’ instance
-is running, then you cannot use ‘emacsclient’ directly.
-
-   Instead you have to create a script that does something like this:
-
-   Try to use ‘emacsclient’ (without using ‘--alternate-editor’).  If
-that succeeds, do nothing else.  Otherwise start ‘emacs &’ (and
-‘init.el’ must call ‘server-start’) and try to use ‘emacsclient’ again.
-
-
-File: magit.info,  Node: Point ends up inside invisible text when jumping to a file-visiting buffer,  Prev: git-commit-mode isn't used when committing from the command-line,  Up: FAQ - Issues and Errors
-
-A.2.13 Point ends up inside invisible text when jumping to a file-visiting buffer
----------------------------------------------------------------------------------
-
-This can happen when you type ‘RET’ on a hunk to visit the respective
-file at the respective position.  One solution to this problem is to use
-‘global-reveal-mode’.  It makes sure that text around point is always
-visible.  If that is too drastic for your taste, then you may instead
-use ‘magit-diff-visit-file-hook’ to reveal the text, possibly using
-‘reveal-post-command’ or for Org buffers ‘org-reveal’.
-
-
-File: magit.info,  Node: Debugging Tools,  Next: Keystroke Index,  Prev: FAQ,  Up: Top
-
-B Debugging Tools
-*****************
-
-Magit and its dependencies provide a few debugging tools, and we
-appreciate it very much if you use those tools before reporting an
-issue.  Please include all relevant output when reporting an issue.
-
-‘M-x magit-version’     (‘magit-version’)
-
-     This command shows the currently used versions of Magit, Git, and
-     Emacs in the echo area.  Non-interactively this just returns the
-     Magit version.
-
-‘M-x magit-emacs-Q-command’     (‘magit-emacs-Q-command’)
-
-     This command shows a debugging shell command in the echo area and
-     adds it to the kill ring.  Paste that command into a shell and run
-     it.
-
-     This shell command starts ‘emacs’ with only ‘magit’ and its
-     dependencies loaded.  Neither your configuration nor other
-     installed packages are loaded.  This makes it easier to determine
-     whether some issue lays with Magit or something else.
-
-     If you run Magit from its Git repository, then you should be able
-     to use ‘make emacs-Q’ instead of the output of this command.
-
-‘M-x magit-debug-git-executable’     (‘magit-debug-git-executable’)
-
-     This command displays a buffer containing information about the
-     available and used ‘git’ executable(s), and can be useful when
-     investigating ‘exec-path’ issues.
-
-     Also see *note Git Executable::.
-
-‘M-x with-editor-debug’     (‘with-editor-debug’)
-
-     This command displays a buffer containing information about the
-     available and used ‘~emacsclient’ executable(s), and can be useful
-     when investigating why Magit (or rather ‘with-editor’) cannot find
-     an appropriate ‘emacsclient’ executable.
-
-     Also see *note (with-editor)Debugging::.
-
-   Please also see the *note FAQ::.
-
-
-File: magit.info,  Node: Keystroke Index,  Next: Command Index,  Prev: Debugging Tools,  Up: Top
-
-Appendix C Keystroke Index
-**************************
-
-
-* Menu:
-
-* !:                                     Running Git Manually.
-                                                              (line  12)
-* ! !:                                   Running Git Manually.
-                                                              (line  16)
-* ! a:                                   Running Git Manually.
-                                                              (line  57)
-* ! b:                                   Running Git Manually.
-                                                              (line  61)
-* ! g:                                   Running Git Manually.
-                                                              (line  65)
-* ! k:                                   Running Git Manually.
-                                                              (line  53)
-* ! p:                                   Running Git Manually.
-                                                              (line  24)
-* ! s:                                   Running Git Manually.
-                                                              (line  34)
-* ! S:                                   Running Git Manually.
-                                                              (line  39)
-* $:                                     Viewing Git Output.  (line  16)
-* %:                                     Worktree.            (line   8)
-* % b:                                   Worktree.            (line  13)
-* % c:                                   Worktree.            (line  17)
-* % g:                                   Worktree.            (line  33)
-* % k:                                   Worktree.            (line  28)
-* % p:                                   Worktree.            (line  21)
-* +:                                     Log Buffer.          (line  59)
-* + <1>:                                 Refreshing Diffs.    (line  68)
-* -:                                     Log Buffer.          (line  63)
-* - <1>:                                 Refreshing Diffs.    (line  64)
-* 0:                                     Refreshing Diffs.    (line  72)
-* 1:                                     Section Visibility.  (line  26)
-* 2:                                     Section Visibility.  (line  27)
-* 3:                                     Section Visibility.  (line  28)
-* 4:                                     Section Visibility.  (line  29)
-* =:                                     Log Buffer.          (line  53)
-* ^:                                     Section Movement.    (line  31)
-* a:                                     Applying.            (line  33)
-* A:                                     Cherry Picking.      (line   8)
-* A A:                                   Cherry Picking.      (line  16)
-* A a:                                   Cherry Picking.      (line  23)
-* A A <1>:                               Cherry Picking.      (line  89)
-* A a <1>:                               Cherry Picking.      (line  97)
-* A d:                                   Cherry Picking.      (line  53)
-* A h:                                   Cherry Picking.      (line  41)
-* A n:                                   Cherry Picking.      (line  64)
-* A s:                                   Cherry Picking.      (line  75)
-* A s <1>:                               Cherry Picking.      (line  93)
-* B:                                     Bisecting.           (line   8)
-* b:                                     Blaming.             (line  86)
-* b <1>:                                 The Branch Popup.    (line  12)
-* B B:                                   Bisecting.           (line  16)
-* B b:                                   Bisecting.           (line  31)
-* b b:                                   The Branch Popup.    (line  37)
-* b C:                                   The Branch Popup.    (line  29)
-* b c:                                   The Branch Popup.    (line  55)
-* B g:                                   Bisecting.           (line  36)
-* B k:                                   Bisecting.           (line  41)
-* b k:                                   The Branch Popup.    (line 240)
-* b l:                                   The Branch Popup.    (line  62)
-* b n:                                   The Branch Popup.    (line  45)
-* B r:                                   Bisecting.           (line  47)
-* b r:                                   The Branch Popup.    (line 246)
-* B s:                                   Bisecting.           (line  24)
-* b s:                                   The Branch Popup.    (line  85)
-* b x:                                   The Branch Popup.    (line 224)
-* b Y:                                   The Branch Popup.    (line 113)
-* b y:                                   The Branch Popup.    (line 218)
-* c:                                     Blaming.             (line 120)
-* c <1>:                                 Initiating a Commit. (line   8)
-* c <2>:                                 Editing Rebase Sequences.
-                                                              (line  72)
-* c a:                                   Initiating a Commit. (line  18)
-* c A:                                   Initiating a Commit. (line  66)
-* c c:                                   Initiating a Commit. (line  13)
-* c e:                                   Initiating a Commit. (line  22)
-* c f:                                   Initiating a Commit. (line  42)
-* c F:                                   Initiating a Commit. (line  50)
-* c s:                                   Initiating a Commit. (line  54)
-* c S:                                   Initiating a Commit. (line  62)
-* c w:                                   Initiating a Commit. (line  32)
-* C-<return>:                            Diff Buffer.         (line  48)
-* C-<tab>:                               Section Visibility.  (line  13)
-* C-c C-a:                               Editing Commit Messages.
-                                                              (line 128)
-* C-c C-b:                               Log Buffer.          (line  19)
-* C-c C-b <1>:                           Refreshing Diffs.    (line  90)
-* C-c C-c:                               Popup Buffers and Prefix Commands.
-                                                              (line  20)
-* C-c C-c <1>:                           Select from Log.     (line  20)
-* C-c C-c <2>:                           Editing Commit Messages.
-                                                              (line  19)
-* C-c C-c <3>:                           Editing Rebase Sequences.
-                                                              (line   6)
-* C-c C-d:                               Refreshing Diffs.    (line  80)
-* C-c C-d <1>:                           Editing Commit Messages.
-                                                              (line  57)
-* C-c C-e:                               Diff Buffer.         (line  74)
-* C-c C-f:                               Log Buffer.          (line  23)
-* C-c C-f <1>:                           Refreshing Diffs.    (line  94)
-* C-c C-i:                               Editing Commit Messages.
-                                                              (line 153)
-* C-c C-k:                               Select from Log.     (line  26)
-* C-c C-k <1>:                           Editing Commit Messages.
-                                                              (line  24)
-* C-c C-k <2>:                           Editing Rebase Sequences.
-                                                              (line  11)
-* C-c C-n:                               Log Buffer.          (line  27)
-* C-c C-o:                               Editing Commit Messages.
-                                                              (line 144)
-* C-c C-p:                               Editing Commit Messages.
-                                                              (line 148)
-* C-c C-r:                               Editing Commit Messages.
-                                                              (line 132)
-* C-c C-s:                               Editing Commit Messages.
-                                                              (line 136)
-* C-c C-t:                               Diff Buffer.         (line  70)
-* C-c C-t <1>:                           Editing Commit Messages.
-                                                              (line 140)
-* C-c C-w:                               Editing Commit Messages.
-                                                              (line  63)
-* C-c M-g:                               Minor Mode for Buffers Visiting Files.
-                                                              (line  19)
-* C-c M-g B:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  80)
-* C-c M-g b:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  86)
-* C-c M-g c:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  33)
-* C-c M-g D:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  39)
-* C-c M-g d:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  47)
-* C-c M-g e:                             Minor Mode for Buffers Visiting Files.
-                                                              (line 102)
-* C-c M-g f:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  96)
-* C-c M-g L:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  57)
-* C-c M-g l:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  64)
-* C-c M-g p:                             Minor Mode for Buffers Visiting Files.
-                                                              (line 112)
-* C-c M-g r:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  91)
-* C-c M-g s:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  24)
-* C-c M-g t:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  71)
-* C-c M-g u:                             Minor Mode for Buffers Visiting Files.
-                                                              (line  28)
-* C-c M-s:                               Editing Commit Messages.
-                                                              (line  35)
-* C-w:                                   Common Commands.     (line  21)
-* C-x g:                                 Status Buffer.       (line  22)
-* C-x u:                                 Editing Rebase Sequences.
-                                                              (line  89)
-* d:                                     Diffing.             (line  20)
-* D:                                     Refreshing Diffs.    (line  11)
-* d c:                                   Diffing.             (line  67)
-* d d:                                   Diffing.             (line  25)
-* D f:                                   Refreshing Diffs.    (line  45)
-* D F:                                   Refreshing Diffs.    (line  50)
-* D g:                                   Refreshing Diffs.    (line  16)
-* d p:                                   Diffing.             (line  59)
-* d r:                                   Diffing.             (line  29)
-* D r:                                   Refreshing Diffs.    (line  40)
-* d s:                                   Diffing.             (line  49)
-* D s:                                   Refreshing Diffs.    (line  21)
-* d t:                                   Diffing.             (line  72)
-* D t:                                   Refreshing Diffs.    (line  36)
-* d u:                                   Diffing.             (line  55)
-* d w:                                   Diffing.             (line  43)
-* D w:                                   Refreshing Diffs.    (line  28)
-* DEL:                                   Log Buffer.          (line  43)
-* DEL <1>:                               Diff Buffer.         (line 103)
-* DEL <2>:                               Blaming.             (line  73)
-* DEL <3>:                               Editing Rebase Sequences.
-                                                              (line  28)
-* e:                                     Ediffing.            (line   9)
-* E:                                     Ediffing.            (line  21)
-* e <1>:                                 Editing Rebase Sequences.
-                                                              (line  55)
-* E c:                                   Ediffing.            (line  65)
-* E i:                                   Ediffing.            (line  57)
-* E m:                                   Ediffing.            (line  35)
-* E r:                                   Ediffing.            (line  26)
-* E s:                                   Ediffing.            (line  48)
-* E u:                                   Ediffing.            (line  53)
-* E w:                                   Ediffing.            (line  61)
-* E z:                                   Ediffing.            (line  69)
-* f:                                     Editing Rebase Sequences.
-                                                              (line  63)
-* f <1>:                                 Fetching.            (line  11)
-* F:                                     Pulling.             (line  11)
-* f a:                                   Fetching.            (line  38)
-* f e:                                   Fetching.            (line  24)
-* F e:                                   Pulling.             (line  24)
-* f m:                                   Fetching.            (line  42)
-* f o:                                   Fetching.            (line  28)
-* f p:                                   Fetching.            (line  16)
-* F p:                                   Pulling.             (line  16)
-* f r:                                   Fetching.            (line  33)
-* f u:                                   Fetching.            (line  20)
-* F u:                                   Pulling.             (line  20)
-* g:                                     Automatic Refreshing of Magit Buffers.
-                                                              (line  22)
-* G:                                     Automatic Refreshing of Magit Buffers.
-                                                              (line  31)
-* j:                                     Diff Buffer.         (line  93)
-* k:                                     Viewing Git Output.  (line  24)
-* k <1>:                                 Applying.            (line  40)
-* k <2>:                                 Editing Rebase Sequences.
-                                                              (line  68)
-* k <3>:                                 Stashing.            (line  95)
-* l:                                     Logging.             (line  28)
-* L:                                     Refreshing Logs.     (line  11)
-* L <1>:                                 Log Buffer.          (line   6)
-* L <2>:                                 Log Margin.          (line  47)
-* l a:                                   Logging.             (line  58)
-* l b:                                   Logging.             (line  54)
-* L d:                                   Log Margin.          (line  64)
-* L g:                                   Refreshing Logs.     (line  16)
-* l h:                                   Logging.             (line  46)
-* l H:                                   Reflog.              (line  19)
-* l l:                                   Logging.             (line  33)
-* l L:                                   Logging.             (line  50)
-* L L:                                   Log Margin.          (line  56)
-* L l:                                   Log Margin.          (line  60)
-* l o:                                   Logging.             (line  39)
-* l O:                                   Reflog.              (line  15)
-* l r:                                   Reflog.              (line  11)
-* L s:                                   Refreshing Logs.     (line  21)
-* L t:                                   Refreshing Logs.     (line  36)
-* L w:                                   Refreshing Logs.     (line  28)
-* m:                                     Merging.             (line   9)
-* M:                                     The Remote Popup.    (line  13)
-* m a:                                   Merging.             (line  44)
-* m a <1>:                               Merging.             (line  94)
-* M a:                                   The Remote Popup.    (line  35)
-* M C:                                   The Remote Popup.    (line  26)
-* m e:                                   Merging.             (line  30)
-* m i:                                   Merging.             (line  57)
-* M k:                                   The Remote Popup.    (line  50)
-* m m:                                   Merging.             (line  17)
-* m m <1>:                               Merging.             (line  88)
-* m n:                                   Merging.             (line  37)
-* m p:                                   Merging.             (line  80)
-* M p:                                   The Remote Popup.    (line  54)
-* M P:                                   The Remote Popup.    (line  59)
-* M r:                                   The Remote Popup.    (line  40)
-* m s:                                   Merging.             (line  71)
-* M u:                                   The Remote Popup.    (line  45)
-* M-1:                                   Section Visibility.  (line  33)
-* M-2:                                   Section Visibility.  (line  34)
-* M-3:                                   Section Visibility.  (line  35)
-* M-4:                                   Section Visibility.  (line  36)
-* M-<tab>:                               Section Visibility.  (line  17)
-* M-n:                                   Section Movement.    (line  26)
-* M-n <1>:                               Editing Commit Messages.
-                                                              (line  45)
-* M-n <2>:                               Editing Rebase Sequences.
-                                                              (line  47)
-* M-p:                                   Section Movement.    (line  20)
-* M-p <1>:                               Editing Commit Messages.
-                                                              (line  39)
-* M-p <2>:                               Editing Rebase Sequences.
-                                                              (line  43)
-* M-w:                                   Blaming.             (line 112)
-* M-w <1>:                               Common Commands.     (line  10)
-* M-x magit-clone:                       Repository Setup.    (line  16)
-* M-x magit-debug-git-executable:        Git Executable.      (line  45)
-* M-x magit-debug-git-executable <1>:    Debugging Tools.     (line  30)
-* M-x magit-describe-section-briefly:    Section Types and Values.
-                                                              (line  13)
-* M-x magit-describe-section-briefly <1>: Matching Sections.  (line   6)
-* M-x magit-emacs-Q-command:             Debugging Tools.     (line  16)
-* M-x magit-find-file:                   Visiting Blobs.      (line   6)
-* M-x magit-find-file-other-window:      Visiting Blobs.      (line  11)
-* M-x magit-init:                        Repository Setup.    (line   6)
-* M-x magit-reset-index:                 Staging and Unstaging.
-                                                              (line  87)
-* M-x magit-reverse-in-index:            Staging and Unstaging.
-                                                              (line  62)
-* M-x magit-stage-file:                  Staging from File-Visiting Buffers.
-                                                              (line  10)
-* M-x magit-toggle-buffer-lock:          Modes and Buffers.   (line  17)
-* M-x magit-unstage-file:                Staging from File-Visiting Buffers.
-                                                              (line  18)
-* M-x magit-version:                     Git Executable.      (line  17)
-* M-x magit-version <1>:                 Debugging Tools.     (line  10)
-* M-x magit-wip-commit:                  Wip Modes.           (line 174)
-* M-x with-editor-debug:                 Debugging Tools.     (line  38)
-* n:                                     Section Movement.    (line  16)
-* n <1>:                                 Blaming.             (line  91)
-* N:                                     Blaming.             (line  95)
-* n <2>:                                 Editing Rebase Sequences.
-                                                              (line  39)
-* n <3>:                                 Minor Mode for Buffers Visiting Blobs.
-                                                              (line  16)
-* o:                                     Submodule Popup.     (line   6)
-* O:                                     Subtree.             (line   8)
-* o a:                                   Submodule Popup.     (line  19)
-* O a:                                   Subtree.             (line  20)
-* O c:                                   Subtree.             (line  24)
-* o d:                                   Submodule Popup.     (line  49)
-* o f:                                   Submodule Popup.     (line  57)
-* O f:                                   Subtree.             (line  32)
-* o l:                                   Submodule Popup.     (line  53)
-* O m:                                   Subtree.             (line  28)
-* o p:                                   Submodule Popup.     (line  33)
-* O p:                                   Subtree.             (line  36)
-* o r:                                   Submodule Popup.     (line  26)
-* o s:                                   Submodule Popup.     (line  43)
-* O s:                                   Subtree.             (line  41)
-* o u:                                   Submodule Popup.     (line  38)
-* p:                                     Section Movement.    (line  10)
-* p <1>:                                 Blaming.             (line  99)
-* P:                                     Blaming.             (line 103)
-* p <2>:                                 Editing Rebase Sequences.
-                                                              (line  35)
-* P <1>:                                 Pushing.             (line  11)
-* p <3>:                                 Minor Mode for Buffers Visiting Blobs.
-                                                              (line  12)
-* P e:                                   Pushing.             (line  35)
-* P m:                                   Pushing.             (line  53)
-* P o:                                   Pushing.             (line  39)
-* P p:                                   Pushing.             (line  16)
-* P r:                                   Pushing.             (line  44)
-* P t:                                   Pushing.             (line  59)
-* P T:                                   Pushing.             (line  65)
-* P u:                                   Pushing.             (line  26)
-* q:                                     Quitting Windows.    (line   6)
-* q <1>:                                 Log Buffer.          (line  12)
-* q <2>:                                 Blaming.             (line 107)
-* q <3>:                                 Minor Mode for Buffers Visiting Blobs.
-                                                              (line  20)
-* r:                                     Rebasing.            (line   9)
-* r <1>:                                 Editing Rebase Sequences.
-                                                              (line  51)
-* r a:                                   Rebasing.            (line 107)
-* r e:                                   Rebasing.            (line  33)
-* r e <1>:                               Rebasing.            (line 103)
-* r f:                                   Rebasing.            (line  73)
-* r i:                                   Rebasing.            (line  69)
-* r k:                                   Rebasing.            (line  85)
-* r m:                                   Rebasing.            (line  77)
-* r p:                                   Rebasing.            (line  24)
-* r r:                                   Rebasing.            (line  92)
-* r s:                                   Rebasing.            (line  39)
-* r s <1>:                               Rebasing.            (line  99)
-* r u:                                   Rebasing.            (line  29)
-* r w:                                   Rebasing.            (line  81)
-* RET:                                   Diff Buffer.         (line   8)
-* RET <1>:                               References Buffer.   (line 166)
-* RET <2>:                               Blaming.             (line  59)
-* RET <3>:                               Editing Rebase Sequences.
-                                                              (line  16)
-* s:                                     Staging and Unstaging.
-                                                              (line  28)
-* S:                                     Staging and Unstaging.
-                                                              (line  36)
-* s <1>:                                 Editing Rebase Sequences.
-                                                              (line  59)
-* S-<tab>:                               Section Visibility.  (line  22)
-* SPC:                                   Log Buffer.          (line  33)
-* SPC <1>:                               Diff Buffer.         (line  99)
-* SPC <2>:                               Blaming.             (line  63)
-* SPC <3>:                               Editing Rebase Sequences.
-                                                              (line  21)
-* t:                                     Tagging.             (line   8)
-* T:                                     Notes.               (line   8)
-* T a:                                   Notes.               (line  51)
-* T c:                                   Notes.               (line  46)
-* t k:                                   Tagging.             (line  18)
-* T m:                                   Notes.               (line  37)
-* t p:                                   Tagging.             (line  24)
-* T p:                                   Notes.               (line  29)
-* T r:                                   Notes.               (line  21)
-* t t:                                   Tagging.             (line  13)
-* T T:                                   Notes.               (line  13)
-* TAB:                                   Section Visibility.  (line   9)
-* u:                                     Staging and Unstaging.
-                                                              (line  43)
-* U:                                     Staging and Unstaging.
-                                                              (line  52)
-* v:                                     Applying.            (line  44)
-* V:                                     Reverting.           (line   6)
-* V A:                                   Reverting.           (line  30)
-* V a:                                   Reverting.           (line  38)
-* V s:                                   Reverting.           (line  34)
-* V V:                                   Reverting.           (line  14)
-* V v:                                   Reverting.           (line  20)
-* W:                                     Creating and Sending Patches.
-                                                              (line   6)
-* w:                                     Applying Patches.    (line   8)
-* w a:                                   Applying Patches.    (line  34)
-* w a <1>:                               Applying Patches.    (line  42)
-* w a a:                                 Applying Patches.    (line  47)
-* w m:                                   Applying Patches.    (line  19)
-* W p:                                   Creating and Sending Patches.
-                                                              (line  11)
-* W r:                                   Creating and Sending Patches.
-                                                              (line  17)
-* w s:                                   Applying Patches.    (line  30)
-* w w:                                   Applying Patches.    (line  13)
-* w w <1>:                               Applying Patches.    (line  26)
-* x:                                     Editing Rebase Sequences.
-                                                              (line  76)
-* x <1>:                                 Resetting.           (line   8)
-* X f:                                   Resetting.           (line  43)
-* X h:                                   Resetting.           (line  25)
-* X i:                                   Resetting.           (line  30)
-* X m:                                   Resetting.           (line  14)
-* X s:                                   Resetting.           (line  19)
-* X w:                                   Resetting.           (line  37)
-* X w <1>:                               Wip Modes.           (line 101)
-* Y:                                     Cherries.            (line  17)
-* y:                                     References Buffer.   (line   6)
-* y <1>:                                 Editing Rebase Sequences.
-                                                              (line  85)
-* y c:                                   References Buffer.   (line  19)
-* y o:                                   References Buffer.   (line  24)
-* y y:                                   References Buffer.   (line  14)
-* z:                                     Stashing.            (line   8)
-* z a:                                   Stashing.            (line  58)
-* z b:                                   Stashing.            (line  80)
-* z B:                                   Stashing.            (line  85)
-* z f:                                   Stashing.            (line  91)
-* z i:                                   Stashing.            (line  20)
-* z I:                                   Stashing.            (line  46)
-* z k:                                   Stashing.            (line  71)
-* z l:                                   Stashing.            (line  99)
-* z p:                                   Stashing.            (line  64)
-* z v:                                   Stashing.            (line  76)
-* z w:                                   Stashing.            (line  25)
-* z W:                                   Stashing.            (line  51)
-* z x:                                   Stashing.            (line  32)
-* z z:                                   Stashing.            (line  13)
-* z Z:                                   Stashing.            (line  39)
-
-
-File: magit.info,  Node: Command Index,  Next: Function Index,  Prev: Keystroke Index,  Up: Top
-
-Appendix D Command Index
-************************
-
-
-* Menu:
-
-* auto-revert-mode:                      Automatic Reverting of File-Visiting Buffers.
-                                                              (line  62)
-* forward-line:                          Editing Rebase Sequences.
-                                                              (line  39)
-* git-commit-ack:                        Editing Commit Messages.
-                                                              (line 128)
-* git-commit-cc:                         Editing Commit Messages.
-                                                              (line 144)
-* git-commit-next-message:               Editing Commit Messages.
-                                                              (line  45)
-* git-commit-prev-message:               Editing Commit Messages.
-                                                              (line  39)
-* git-commit-reported:                   Editing Commit Messages.
-                                                              (line 148)
-* git-commit-review:                     Editing Commit Messages.
-                                                              (line 132)
-* git-commit-save-message:               Editing Commit Messages.
-                                                              (line  35)
-* git-commit-signoff:                    Editing Commit Messages.
-                                                              (line 136)
-* git-commit-suggested:                  Editing Commit Messages.
-                                                              (line 153)
-* git-commit-test:                       Editing Commit Messages.
-                                                              (line 140)
-* git-rebase-backward-line:              Editing Rebase Sequences.
-                                                              (line  35)
-* git-rebase-edit:                       Editing Rebase Sequences.
-                                                              (line  55)
-* git-rebase-exec:                       Editing Rebase Sequences.
-                                                              (line  76)
-* git-rebase-fixup:                      Editing Rebase Sequences.
-                                                              (line  63)
-* git-rebase-insert:                     Editing Rebase Sequences.
-                                                              (line  85)
-* git-rebase-kill-line:                  Editing Rebase Sequences.
-                                                              (line  68)
-* git-rebase-move-line-down:             Editing Rebase Sequences.
-                                                              (line  47)
-* git-rebase-move-line-up:               Editing Rebase Sequences.
-                                                              (line  43)
-* git-rebase-pick:                       Editing Rebase Sequences.
-                                                              (line  72)
-* git-rebase-reword:                     Editing Rebase Sequences.
-                                                              (line  51)
-* git-rebase-show-commit:                Editing Rebase Sequences.
-                                                              (line  16)
-* git-rebase-show-or-scroll-down:        Editing Rebase Sequences.
-                                                              (line  28)
-* git-rebase-show-or-scroll-up:          Editing Rebase Sequences.
-                                                              (line  21)
-* git-rebase-squash:                     Editing Rebase Sequences.
-                                                              (line  59)
-* git-rebase-undo:                       Editing Rebase Sequences.
-                                                              (line  89)
-* ido-enter-magit-status:                Status Buffer.       (line  47)
-* magit-am-abort:                        Applying Patches.    (line  34)
-* magit-am-apply-maildir:                Applying Patches.    (line  19)
-* magit-am-apply-patches:                Applying Patches.    (line  13)
-* magit-am-continue:                     Applying Patches.    (line  26)
-* magit-am-popup:                        Applying Patches.    (line   8)
-* magit-am-skip:                         Applying Patches.    (line  30)
-* magit-apply:                           Applying.            (line  33)
-* magit-bisect-bad:                      Bisecting.           (line  31)
-* magit-bisect-good:                     Bisecting.           (line  36)
-* magit-bisect-popup:                    Bisecting.           (line   8)
-* magit-bisect-reset:                    Bisecting.           (line  47)
-* magit-bisect-run:                      Bisecting.           (line  24)
-* magit-bisect-skip:                     Bisecting.           (line  41)
-* magit-bisect-start:                    Bisecting.           (line  16)
-* magit-blame:                           Blaming.             (line  17)
-* magit-blame <1>:                       Minor Mode for Buffers Visiting Files.
-                                                              (line  86)
-* magit-blame-copy-hash:                 Blaming.             (line 112)
-* magit-blame-cycle-style:               Blaming.             (line 120)
-* magit-blame-echo:                      Blaming.             (line  32)
-* magit-blame-next-chunk:                Blaming.             (line  91)
-* magit-blame-next-chunk-same-commit:    Blaming.             (line  95)
-* magit-blame-popup:                     Blaming.             (line  86)
-* magit-blame-popup <1>:                 Minor Mode for Buffers Visiting Files.
-                                                              (line  80)
-* magit-blame-previous-chunk:            Blaming.             (line  99)
-* magit-blame-previous-chunk-same-commit: Blaming.            (line 103)
-* magit-blame-quit:                      Blaming.             (line 107)
-* magit-blame-removal:                   Blaming.             (line  38)
-* magit-blame-removal <1>:               Minor Mode for Buffers Visiting Files.
-                                                              (line  91)
-* magit-blame-reverse:                   Blaming.             (line  46)
-* magit-blame-reverse <1>:               Minor Mode for Buffers Visiting Files.
-                                                              (line  96)
-* magit-blob-next:                       Minor Mode for Buffers Visiting Blobs.
-                                                              (line  16)
-* magit-blob-previous:                   Minor Mode for Buffers Visiting Files.
-                                                              (line 112)
-* magit-blob-previous <1>:               Minor Mode for Buffers Visiting Blobs.
-                                                              (line  12)
-* magit-branch:                          The Branch Popup.    (line  45)
-* magit-branch-and-checkout:             The Branch Popup.    (line  55)
-* magit-branch-checkout:                 The Branch Popup.    (line  62)
-* magit-branch-config-popup:             The Branch Popup.    (line  29)
-* magit-branch-config-popup <1>:         The Branch Config Popup.
-                                                              (line   6)
-* magit-branch-delete:                   The Branch Popup.    (line 240)
-* magit-branch-or-checkout:              The Branch Popup.    (line 350)
-* magit-branch-orphan:                   The Branch Popup.    (line 345)
-* magit-branch-popup:                    The Branch Popup.    (line  12)
-* magit-branch-pull-request:             The Branch Popup.    (line 113)
-* magit-branch-rename:                   The Branch Popup.    (line 246)
-* magit-branch-reset:                    The Branch Popup.    (line 224)
-* magit-branch-shelve:                   Auxillary Branch Commands.
-                                                              (line   8)
-* magit-branch-spinoff:                  The Branch Popup.    (line  85)
-* magit-branch-unshelve:                 Auxillary Branch Commands.
-                                                              (line  19)
-* magit-checkout:                        The Branch Popup.    (line  37)
-* magit-checkout-pull-request:           The Branch Popup.    (line 218)
-* magit-cherry:                          Cherries.            (line  17)
-* magit-cherry-apply:                    Cherry Picking.      (line  23)
-* magit-cherry-donate:                   Cherry Picking.      (line  53)
-* magit-cherry-harvest:                  Cherry Picking.      (line  41)
-* magit-cherry-pick:                     Cherry Picking.      (line  16)
-* magit-cherry-pick-popup:               Cherry Picking.      (line   8)
-* magit-cherry-spinoff:                  Cherry Picking.      (line  75)
-* magit-cherry-spinout:                  Cherry Picking.      (line  64)
-* magit-clone:                           Repository Setup.    (line  16)
-* magit-commit:                          Initiating a Commit. (line  13)
-* magit-commit-amend:                    Initiating a Commit. (line  18)
-* magit-commit-augment:                  Initiating a Commit. (line  66)
-* magit-commit-extend:                   Initiating a Commit. (line  22)
-* magit-commit-fixup:                    Initiating a Commit. (line  42)
-* magit-commit-instant-fixup:            Initiating a Commit. (line  50)
-* magit-commit-instant-squash:           Initiating a Commit. (line  62)
-* magit-commit-popup:                    Initiating a Commit. (line   8)
-* magit-commit-popup <1>:                Minor Mode for Buffers Visiting Files.
-                                                              (line  33)
-* magit-commit-reword:                   Initiating a Commit. (line  32)
-* magit-commit-squash:                   Initiating a Commit. (line  54)
-* magit-copy-buffer-revision:            Common Commands.     (line  21)
-* magit-copy-section-value:              Common Commands.     (line  10)
-* magit-cycle-margin-style:              Log Margin.          (line  60)
-* magit-debug-git-executable:            Git Executable.      (line  45)
-* magit-debug-git-executable <1>:        Debugging Tools.     (line  30)
-* magit-describe-section-briefly:        Section Types and Values.
-                                                              (line  13)
-* magit-describe-section-briefly <1>:    Matching Sections.   (line   6)
-* magit-diff:                            Diffing.             (line  29)
-* magit-diff-buffer-file:                Minor Mode for Buffers Visiting Files.
-                                                              (line  47)
-* magit-diff-buffer-file-popup:          Minor Mode for Buffers Visiting Files.
-                                                              (line  39)
-* magit-diff-default-context:            Refreshing Diffs.    (line  72)
-* magit-diff-dwim:                       Diffing.             (line  25)
-* magit-diff-edit-hunk-commit:           Diff Buffer.         (line  74)
-* magit-diff-flip-revs:                  Refreshing Diffs.    (line  45)
-* magit-diff-less-context:               Refreshing Diffs.    (line  64)
-* magit-diff-more-context:               Refreshing Diffs.    (line  68)
-* magit-diff-paths:                      Diffing.             (line  59)
-* magit-diff-popup:                      Diffing.             (line  20)
-* magit-diff-refresh:                    Refreshing Diffs.    (line  16)
-* magit-diff-refresh-popup:              Refreshing Diffs.    (line  11)
-* magit-diff-save-default-arguments:     Refreshing Diffs.    (line  28)
-* magit-diff-set-default-arguments:      Refreshing Diffs.    (line  21)
-* magit-diff-show-or-scroll-down:        Log Buffer.          (line  43)
-* magit-diff-show-or-scroll-down <1>:    Blaming.             (line  73)
-* magit-diff-show-or-scroll-up:          Log Buffer.          (line  33)
-* magit-diff-show-or-scroll-up <1>:      Blaming.             (line  63)
-* magit-diff-staged:                     Diffing.             (line  49)
-* magit-diff-switch-range-type:          Refreshing Diffs.    (line  40)
-* magit-diff-toggle-file-filter:         Refreshing Diffs.    (line  50)
-* magit-diff-toggle-refine-hunk:         Refreshing Diffs.    (line  36)
-* magit-diff-trace-definition:           Diff Buffer.         (line  70)
-* magit-diff-unstaged:                   Diffing.             (line  55)
-* magit-diff-visit-file:                 Diff Buffer.         (line   8)
-* magit-diff-visit-file-other-window:    Diff Buffer.         (line  65)
-* magit-diff-visit-file-worktree:        Diff Buffer.         (line  48)
-* magit-diff-while-committing:           Refreshing Diffs.    (line  80)
-* magit-diff-while-committing <1>:       Editing Commit Messages.
-                                                              (line  57)
-* magit-diff-working-tree:               Diffing.             (line  43)
-* magit-discard:                         Applying.            (line  40)
-* magit-dispatch-popup:                  Popup Buffers and Prefix Commands.
-                                                              (line  20)
-* magit-ediff-compare:                   Ediffing.            (line  26)
-* magit-ediff-dwim:                      Ediffing.            (line   9)
-* magit-ediff-popup:                     Ediffing.            (line  21)
-* magit-ediff-resolve:                   Ediffing.            (line  35)
-* magit-ediff-show-commit:               Ediffing.            (line  65)
-* magit-ediff-show-staged:               Ediffing.            (line  57)
-* magit-ediff-show-stash:                Ediffing.            (line  69)
-* magit-ediff-show-unstaged:             Ediffing.            (line  53)
-* magit-ediff-show-working-tree:         Ediffing.            (line  61)
-* magit-ediff-stage:                     Ediffing.            (line  48)
-* magit-edit-line-commit:                Minor Mode for Buffers Visiting Files.
-                                                              (line 102)
-* magit-emacs-Q-command:                 Debugging Tools.     (line  16)
-* magit-fetch:                           Fetching.            (line  24)
-* magit-fetch-all:                       Fetching.            (line  38)
-* magit-fetch-branch:                    Fetching.            (line  28)
-* magit-fetch-from-pushremote:           Fetching.            (line  16)
-* magit-fetch-from-upstream:             Fetching.            (line  20)
-* magit-fetch-modules:                   Submodule Popup.     (line  57)
-* magit-fetch-popup:                     Fetching.            (line  11)
-* magit-fetch-refspec:                   Fetching.            (line  33)
-* magit-file-checkout:                   Resetting.           (line  43)
-* magit-file-checkout <1>:               Minor Mode for Buffers Visiting Files.
-                                                              (line 131)
-* magit-file-delete:                     Minor Mode for Buffers Visiting Files.
-                                                              (line 123)
-* magit-file-popup:                      Minor Mode for Buffers Visiting Files.
-                                                              (line  19)
-* magit-file-rename:                     Minor Mode for Buffers Visiting Files.
-                                                              (line 119)
-* magit-file-untrack:                    Minor Mode for Buffers Visiting Files.
-                                                              (line 127)
-* magit-find-file:                       Visiting Blobs.      (line   6)
-* magit-find-file-other-window:          Visiting Blobs.      (line  11)
-* magit-format-patch:                    Creating and Sending Patches.
-                                                              (line  11)
-* magit-git-command:                     Running Git Manually.
-                                                              (line  24)
-* magit-git-command-topdir:              Running Git Manually.
-                                                              (line  16)
-* magit-go-backward:                     Log Buffer.          (line  19)
-* magit-go-backward <1>:                 Refreshing Diffs.    (line  90)
-* magit-go-forward:                      Log Buffer.          (line  23)
-* magit-go-forward <1>:                  Refreshing Diffs.    (line  94)
-* magit-init:                            Repository Setup.    (line   6)
-* magit-jump-to-diffstat-or-diff:        Diff Buffer.         (line  93)
-* magit-kill-this-buffer:                Minor Mode for Buffers Visiting Blobs.
-                                                              (line  20)
-* magit-list-repositories:               Repository List.     (line   6)
-* magit-list-submodules:                 Listing Submodules.  (line  13)
-* magit-list-submodules <1>:             Submodule Popup.     (line  53)
-* magit-log:                             Logging.             (line  39)
-* magit-log-all:                         Logging.             (line  58)
-* magit-log-all-branches:                Logging.             (line  54)
-* magit-log-branches:                    Logging.             (line  50)
-* magit-log-buffer-file:                 Minor Mode for Buffers Visiting Files.
-                                                              (line  64)
-* magit-log-buffer-file-popup:           Minor Mode for Buffers Visiting Files.
-                                                              (line  57)
-* magit-log-bury-buffer:                 Log Buffer.          (line  12)
-* magit-log-current:                     Logging.             (line  33)
-* magit-log-double-commit-limit:         Log Buffer.          (line  59)
-* magit-log-half-commit-limit:           Log Buffer.          (line  63)
-* magit-log-head:                        Logging.             (line  46)
-* magit-log-move-to-parent:              Log Buffer.          (line  27)
-* magit-log-popup:                       Logging.             (line  28)
-* magit-log-refresh:                     Refreshing Logs.     (line  16)
-* magit-log-refresh-popup:               Refreshing Logs.     (line  11)
-* magit-log-refresh-popup <1>:           Log Buffer.          (line   6)
-* magit-log-save-default-arguments:      Refreshing Logs.     (line  28)
-* magit-log-select-pick:                 Select from Log.     (line  20)
-* magit-log-select-quit:                 Select from Log.     (line  26)
-* magit-log-set-default-arguments:       Refreshing Logs.     (line  21)
-* magit-log-toggle-commit-limit:         Log Buffer.          (line  53)
-* magit-log-trace-definition:            Minor Mode for Buffers Visiting Files.
-                                                              (line  71)
-* magit-margin-popup:                    Log Margin.          (line  47)
-* magit-merge:                           Merging.             (line  17)
-* magit-merge <1>:                       Merging.             (line  88)
-* magit-merge-abort:                     Merging.             (line  94)
-* magit-merge-absorb:                    Merging.             (line  44)
-* magit-merge-editmsg:                   Merging.             (line  30)
-* magit-merge-into:                      Merging.             (line  57)
-* magit-merge-nocommit:                  Merging.             (line  37)
-* magit-merge-popup:                     Merging.             (line   9)
-* magit-merge-preview:                   Merging.             (line  80)
-* magit-merge-squash:                    Merging.             (line  71)
-* magit-mode-bury-buffer:                Quitting Windows.    (line   6)
-* magit-notes-edit:                      Notes.               (line  13)
-* magit-notes-merge:                     Notes.               (line  37)
-* magit-notes-merge-abort:               Notes.               (line  51)
-* magit-notes-merge-commit:              Notes.               (line  46)
-* magit-notes-popup:                     Notes.               (line   8)
-* magit-notes-prune:                     Notes.               (line  29)
-* magit-notes-remove:                    Notes.               (line  21)
-* magit-patch-apply:                     Applying Patches.    (line  47)
-* magit-patch-apply-popup:               Applying Patches.    (line  42)
-* magit-patch-popup:                     Creating and Sending Patches.
-                                                              (line   6)
-* magit-pop-revision-stack:              Editing Commit Messages.
-                                                              (line  63)
-* magit-process:                         Viewing Git Output.  (line  16)
-* magit-process-kill:                    Viewing Git Output.  (line  24)
-* magit-pull:                            Pulling.             (line  24)
-* magit-pull-from-pushremote:            Pulling.             (line  16)
-* magit-pull-from-upstream:              Pulling.             (line  20)
-* magit-pull-popup:                      Pulling.             (line  11)
-* magit-push:                            Pushing.             (line  39)
-* magit-push-current:                    Pushing.             (line  35)
-* magit-push-current-to-pushremote:      Pushing.             (line  16)
-* magit-push-current-to-upstream:        Pushing.             (line  26)
-* magit-push-implicitly args:            Pushing.             (line  73)
-* magit-push-matching:                   Pushing.             (line  53)
-* magit-push-popup:                      Pushing.             (line  11)
-* magit-push-refspecs:                   Pushing.             (line  44)
-* magit-push-tag:                        Pushing.             (line  65)
-* magit-push-tags:                       Pushing.             (line  59)
-* magit-push-to-remote remote args:      Pushing.             (line  84)
-* magit-rebase:                          Rebasing.            (line  33)
-* magit-rebase-abort:                    Rebasing.            (line 107)
-* magit-rebase-autosquash:               Rebasing.            (line  73)
-* magit-rebase-continue:                 Rebasing.            (line  92)
-* magit-rebase-edit:                     Rebasing.            (line 103)
-* magit-rebase-edit-commit:              Rebasing.            (line  77)
-* magit-rebase-interactive:              Rebasing.            (line  69)
-* magit-rebase-onto-pushremote:          Rebasing.            (line  24)
-* magit-rebase-onto-upstream:            Rebasing.            (line  29)
-* magit-rebase-popup:                    Rebasing.            (line   9)
-* magit-rebase-remove-commit:            Rebasing.            (line  85)
-* magit-rebase-reword-commit:            Rebasing.            (line  81)
-* magit-rebase-skip:                     Rebasing.            (line  99)
-* magit-rebase-subset:                   Rebasing.            (line  39)
-* magit-reflog-current:                  Reflog.              (line  11)
-* magit-reflog-head:                     Reflog.              (line  19)
-* magit-reflog-other:                    Reflog.              (line  15)
-* magit-refresh:                         Automatic Refreshing of Magit Buffers.
-                                                              (line  22)
-* magit-refresh-all:                     Automatic Refreshing of Magit Buffers.
-                                                              (line  31)
-* magit-remote-add:                      The Remote Popup.    (line  35)
-* magit-remote-config-popup:             The Remote Popup.    (line  26)
-* magit-remote-config-popup <1>:         The Remote Config Popup.
-                                                              (line   6)
-* magit-remote-popup:                    The Remote Popup.    (line  13)
-* magit-remote-prune:                    The Remote Popup.    (line  54)
-* magit-remote-prune-refspecs:           The Remote Popup.    (line  59)
-* magit-remote-remove:                   The Remote Popup.    (line  50)
-* magit-remote-rename:                   The Remote Popup.    (line  40)
-* magit-remote-set-url:                  The Remote Popup.    (line  45)
-* magit-request-pull:                    Creating and Sending Patches.
-                                                              (line  17)
-* magit-reset:                           Resetting.           (line   8)
-* magit-reset-hard:                      Resetting.           (line  25)
-* magit-reset-head:                      Resetting.           (line  14)
-* magit-reset-index:                     Staging and Unstaging.
-                                                              (line  87)
-* magit-reset-index <1>:                 Resetting.           (line  30)
-* magit-reset-soft:                      Resetting.           (line  19)
-* magit-reset-worktree:                  Resetting.           (line  37)
-* magit-reset-worktree <1>:              Wip Modes.           (line 101)
-* magit-reverse:                         Applying.            (line  44)
-* magit-reverse-in-index:                Staging and Unstaging.
-                                                              (line  62)
-* magit-revert:                          Reverting.           (line  14)
-* magit-revert-no-commit:                Reverting.           (line  20)
-* magit-revert-popup:                    Reverting.           (line   6)
-* magit-run-git-gui:                     Running Git Manually.
-                                                              (line  65)
-* magit-run-gitk:                        Running Git Manually.
-                                                              (line  53)
-* magit-run-gitk-all:                    Running Git Manually.
-                                                              (line  57)
-* magit-run-gitk-branches:               Running Git Manually.
-                                                              (line  61)
-* magit-run-popup:                       Running Git Manually.
-                                                              (line  12)
-* magit-section-backward:                Section Movement.    (line  10)
-* magit-section-backward-siblings:       Section Movement.    (line  20)
-* magit-section-cycle:                   Section Visibility.  (line  13)
-* magit-section-cycle-diffs:             Section Visibility.  (line  17)
-* magit-section-cycle-global:            Section Visibility.  (line  22)
-* magit-section-forward:                 Section Movement.    (line  16)
-* magit-section-forward-siblings:        Section Movement.    (line  26)
-* magit-section-hide:                    Section Visibility.  (line  49)
-* magit-section-hide-children:           Section Visibility.  (line  64)
-* magit-section-show:                    Section Visibility.  (line  45)
-* magit-section-show-children:           Section Visibility.  (line  58)
-* magit-section-show-headings:           Section Visibility.  (line  53)
-* magit-section-show-level-1:            Section Visibility.  (line  26)
-* magit-section-show-level-1-all:        Section Visibility.  (line  33)
-* magit-section-show-level-2:            Section Visibility.  (line  27)
-* magit-section-show-level-2-all:        Section Visibility.  (line  34)
-* magit-section-show-level-3:            Section Visibility.  (line  28)
-* magit-section-show-level-3-all:        Section Visibility.  (line  35)
-* magit-section-show-level-4:            Section Visibility.  (line  29)
-* magit-section-show-level-4-all:        Section Visibility.  (line  36)
-* magit-section-toggle:                  Section Visibility.  (line   9)
-* magit-section-toggle-children:         Section Visibility.  (line  68)
-* magit-section-up:                      Section Movement.    (line  31)
-* magit-sequence-abort:                  Cherry Picking.      (line  97)
-* magit-sequence-abort <1>:              Reverting.           (line  38)
-* magit-sequence-continue:               Cherry Picking.      (line  89)
-* magit-sequence-continue <1>:           Reverting.           (line  30)
-* magit-sequence-skip:                   Cherry Picking.      (line  93)
-* magit-sequence-skip <1>:               Reverting.           (line  34)
-* magit-shell-command:                   Running Git Manually.
-                                                              (line  39)
-* magit-shell-command-topdir:            Running Git Manually.
-                                                              (line  34)
-* magit-show-commit:                     Diffing.             (line  67)
-* magit-show-commit <1>:                 Blaming.             (line  59)
-* magit-show-refs:                       References Buffer.   (line  24)
-* magit-show-refs-current:               References Buffer.   (line  19)
-* magit-show-refs-head:                  References Buffer.   (line  14)
-* magit-show-refs-popup:                 References Buffer.   (line   6)
-* magit-snapshot:                        Stashing.            (line  39)
-* magit-snapshot-index:                  Stashing.            (line  46)
-* magit-snapshot-worktree:               Stashing.            (line  51)
-* magit-stage:                           Staging and Unstaging.
-                                                              (line  28)
-* magit-stage-file:                      Staging from File-Visiting Buffers.
-                                                              (line  10)
-* magit-stage-file <1>:                  Minor Mode for Buffers Visiting Files.
-                                                              (line  24)
-* magit-stage-modified:                  Staging and Unstaging.
-                                                              (line  36)
-* magit-stash:                           Stashing.            (line  13)
-* magit-stash-apply:                     Stashing.            (line  58)
-* magit-stash-branch:                    Stashing.            (line  80)
-* magit-stash-branch-here:               Stashing.            (line  85)
-* magit-stash-clear:                     Stashing.            (line  95)
-* magit-stash-drop:                      Stashing.            (line  71)
-* magit-stash-format-patch:              Stashing.            (line  91)
-* magit-stash-index:                     Stashing.            (line  20)
-* magit-stash-keep-index:                Stashing.            (line  32)
-* magit-stash-list:                      Stashing.            (line  99)
-* magit-stash-pop:                       Stashing.            (line  64)
-* magit-stash-popup:                     Stashing.            (line   8)
-* magit-stash-show:                      Diffing.             (line  72)
-* magit-stash-show <1>:                  Stashing.            (line  76)
-* magit-stash-worktree:                  Stashing.            (line  25)
-* magit-status:                          Status Buffer.       (line  22)
-* magit-submodule-add:                   Submodule Popup.     (line  19)
-* magit-submodule-fetch:                 Fetching.            (line  42)
-* magit-submodule-populate:              Submodule Popup.     (line  33)
-* magit-submodule-popup:                 Submodule Popup.     (line   6)
-* magit-submodule-register:              Submodule Popup.     (line  26)
-* magit-submodule-synchronize:           Submodule Popup.     (line  43)
-* magit-submodule-unpopulate:            Submodule Popup.     (line  49)
-* magit-submodule-update:                Submodule Popup.     (line  38)
-* magit-subtree-add:                     Subtree.             (line  20)
-* magit-subtree-add-commit:              Subtree.             (line  24)
-* magit-subtree-merge:                   Subtree.             (line  28)
-* magit-subtree-pull:                    Subtree.             (line  32)
-* magit-subtree-push:                    Subtree.             (line  36)
-* magit-subtree-split:                   Subtree.             (line  41)
-* magit-tag:                             Tagging.             (line  13)
-* magit-tag-delete:                      Tagging.             (line  18)
-* magit-tag-popup:                       Tagging.             (line   8)
-* magit-tag-prune:                       Tagging.             (line  24)
-* magit-tag-release:                     Tagging.             (line  28)
-* magit-toggle-buffer-lock:              Modes and Buffers.   (line  17)
-* magit-toggle-margin:                   Refreshing Logs.     (line  36)
-* magit-toggle-margin <1>:               Log Margin.          (line  56)
-* magit-toggle-margin-details:           Log Margin.          (line  64)
-* magit-tree-popup:                      Subtree.             (line   8)
-* magit-unstage:                         Staging and Unstaging.
-                                                              (line  43)
-* magit-unstage-all:                     Staging and Unstaging.
-                                                              (line  52)
-* magit-unstage-file:                    Staging from File-Visiting Buffers.
-                                                              (line  18)
-* magit-unstage-file <1>:                Minor Mode for Buffers Visiting Files.
-                                                              (line  28)
-* magit-version:                         Git Executable.      (line  17)
-* magit-version <1>:                     Debugging Tools.     (line  10)
-* magit-visit-ref:                       References Buffer.   (line 166)
-* magit-wip-commit:                      Wip Modes.           (line 174)
-* magit-wip-log:                         Wip Modes.           (line  85)
-* magit-wip-log-current:                 Wip Modes.           (line  93)
-* magit-worktree-branch:                 Worktree.            (line  17)
-* magit-worktree-checkout:               Worktree.            (line  13)
-* magit-worktree-checkout-pull-request:  Worktree.            (line  21)
-* magit-worktree-delete:                 Worktree.            (line  28)
-* magit-worktree-popup:                  Worktree.            (line   8)
-* magit-worktree-status:                 Worktree.            (line  33)
-* scroll-down:                           Diff Buffer.         (line 103)
-* scroll-up:                             Diff Buffer.         (line  99)
-* with-editor-cancel:                    Editing Commit Messages.
-                                                              (line  24)
-* with-editor-cancel <1>:                Editing Rebase Sequences.
-                                                              (line  11)
-* with-editor-debug:                     Debugging Tools.     (line  38)
-* with-editor-finish:                    Editing Commit Messages.
-                                                              (line  19)
-* with-editor-finish <1>:                Editing Rebase Sequences.
-                                                              (line   6)
-
-
-File: magit.info,  Node: Function Index,  Next: Variable Index,  Prev: Command Index,  Up: Top
-
-Appendix E Function Index
-*************************
-
-
-* Menu:
-
-* auto-revert-mode:                      Automatic Reverting of File-Visiting Buffers.
-                                                              (line  62)
-* git-commit-check-style-conventions:    Editing Commit Messages.
-                                                              (line 247)
-* git-commit-propertize-diff:            Editing Commit Messages.
-                                                              (line 206)
-* git-commit-save-message:               Editing Commit Messages.
-                                                              (line 187)
-* git-commit-setup-changelog-support:    Editing Commit Messages.
-                                                              (line 191)
-* git-commit-turn-on-auto-fill:          Editing Commit Messages.
-                                                              (line 196)
-* git-commit-turn-on-flyspell:           Editing Commit Messages.
-                                                              (line 201)
-* ido-enter-magit-status:                Status Buffer.       (line  47)
-* magit-add-section-hook:                Section Hooks.       (line  20)
-* magit-after-save-refresh-status:       Automatic Refreshing of Magit Buffers.
-                                                              (line  56)
-* magit-blame:                           Blaming.             (line  17)
-* magit-blame-echo:                      Blaming.             (line  32)
-* magit-blame-removal:                   Blaming.             (line  38)
-* magit-blame-reverse:                   Blaming.             (line  46)
-* magit-branch-config-popup:             The Branch Config Popup.
-                                                              (line   6)
-* magit-branch-or-checkout:              The Branch Popup.    (line 350)
-* magit-branch-orphan:                   The Branch Popup.    (line 345)
-* magit-branch-shelve:                   Auxillary Branch Commands.
-                                                              (line   8)
-* magit-branch-unshelve:                 Auxillary Branch Commands.
-                                                              (line  19)
-* magit-builtin-completing-read:         Support for Completion Frameworks.
-                                                              (line  42)
-* magit-call-git:                        Calling Git for Effect.
-                                                              (line  28)
-* magit-call-process:                    Calling Git for Effect.
-                                                              (line  32)
-* magit-cancel-section:                  Creating Sections.   (line  71)
-* magit-completing-read:                 Support for Completion Frameworks.
-                                                              (line  60)
-* magit-current-section:                 Section Selection.   (line   6)
-* magit-define-section-jumper:           Creating Sections.   (line  77)
-* magit-diff-scope:                      Matching Sections.   (line 111)
-* magit-diff-type:                       Matching Sections.   (line  88)
-* magit-diff-visit-file-other-window:    Diff Buffer.         (line  65)
-* magit-display-buffer:                  Switching Buffers.   (line   6)
-* magit-display-buffer-fullcolumn-most-v1: Switching Buffers. (line  72)
-* magit-display-buffer-fullframe-status-topleft-v1: Switching Buffers.
-                                                              (line  62)
-* magit-display-buffer-fullframe-status-v1: Switching Buffers.
-                                                              (line  56)
-* magit-display-buffer-same-window-except-diff-v1: Switching Buffers.
-                                                              (line  50)
-* magit-display-buffer-traditional:      Switching Buffers.   (line  42)
-* magit-file-checkout:                   Minor Mode for Buffers Visiting Files.
-                                                              (line 131)
-* magit-file-delete:                     Minor Mode for Buffers Visiting Files.
-                                                              (line 123)
-* magit-file-rename:                     Minor Mode for Buffers Visiting Files.
-                                                              (line 119)
-* magit-file-untrack:                    Minor Mode for Buffers Visiting Files.
-                                                              (line 127)
-* magit-generate-buffer-name-default-function: Naming Buffers.
-                                                              (line  17)
-* magit-get-section:                     Matching Sections.   (line  16)
-* magit-git:                             Calling Git for Effect.
-                                                              (line  65)
-* magit-git-exit-code:                   Getting a Value from Git.
-                                                              (line  10)
-* magit-git-failure:                     Getting a Value from Git.
-                                                              (line  19)
-* magit-git-false:                       Getting a Value from Git.
-                                                              (line  29)
-* magit-git-insert:                      Getting a Value from Git.
-                                                              (line  34)
-* magit-git-items:                       Getting a Value from Git.
-                                                              (line  49)
-* magit-git-lines:                       Getting a Value from Git.
-                                                              (line  44)
-* magit-git-str:                         Getting a Value from Git.
-                                                              (line  72)
-* magit-git-string:                      Getting a Value from Git.
-                                                              (line  38)
-* magit-git-success:                     Getting a Value from Git.
-                                                              (line  14)
-* magit-git-true:                        Getting a Value from Git.
-                                                              (line  24)
-* magit-git-wash:                        Calling Git for Effect.
-                                                              (line  70)
-* magit-hunk-set-window-start:           Section Movement.    (line  43)
-* magit-ido-completing-read:             Support for Completion Frameworks.
-                                                              (line  48)
-* magit-insert-am-sequence:              Status Sections.     (line  28)
-* magit-insert-bisect-log:               Status Sections.     (line  46)
-* magit-insert-bisect-output:            Status Sections.     (line  38)
-* magit-insert-bisect-rest:              Status Sections.     (line  42)
-* magit-insert-diff-filter-header:       Status Header Sections.
-                                                              (line  38)
-* magit-insert-error-header:             Status Header Sections.
-                                                              (line  28)
-* magit-insert-head-branch-header:       Status Header Sections.
-                                                              (line  42)
-* magit-insert-heading:                  Creating Sections.   (line  42)
-* magit-insert-ignored-files:            Status Sections.     (line 100)
-* magit-insert-local-branches:           References Sections. (line  17)
-* magit-insert-merge-log:                Status Sections.     (line  18)
-* magit-insert-modules:                  Status Module Sections.
-                                                              (line  12)
-* magit-insert-modules-overview:         Status Module Sections.
-                                                              (line  33)
-* magit-insert-modules-unpulled-from-pushremote: Status Module Sections.
-                                                              (line  50)
-* magit-insert-modules-unpulled-from-upstream: Status Module Sections.
-                                                              (line  44)
-* magit-insert-modules-unpushed-to-pushremote: Status Module Sections.
-                                                              (line  62)
-* magit-insert-modules-unpushed-to-upstream: Status Module Sections.
-                                                              (line  56)
-* magit-insert-push-branch-header:       Status Header Sections.
-                                                              (line  51)
-* magit-insert-rebase-sequence:          Status Sections.     (line  23)
-* magit-insert-recent-commits:           Status Sections.     (line 115)
-* magit-insert-remote-branches:          References Sections. (line  21)
-* magit-insert-remote-header:            Status Header Sections.
-                                                              (line  67)
-* magit-insert-repo-header:              Status Header Sections.
-                                                              (line  63)
-* magit-insert-section:                  Creating Sections.   (line   6)
-* magit-insert-sequencer-sequence:       Status Sections.     (line  33)
-* magit-insert-staged-changes:           Status Sections.     (line  63)
-* magit-insert-stashes:                  Status Sections.     (line  67)
-* magit-insert-status-headers:           Status Header Sections.
-                                                              (line  12)
-* magit-insert-submodules:               Listing Submodules.  (line  35)
-* magit-insert-tags:                     References Sections. (line  25)
-* magit-insert-tags-header:              Status Header Sections.
-                                                              (line  56)
-* magit-insert-tracked-files:            Status Sections.     (line  96)
-* magit-insert-unpulled-cherries:        Status Sections.     (line 126)
-* magit-insert-unpulled-from-pushremote: Status Sections.     (line  79)
-* magit-insert-unpulled-from-upstream:   Status Sections.     (line  74)
-* magit-insert-unpulled-or-recent-commits: Status Sections.   (line 108)
-* magit-insert-unpushed-cherries:        Status Sections.     (line 133)
-* magit-insert-unpushed-to-pushremote:   Status Sections.     (line  89)
-* magit-insert-unpushed-to-upstream:     Status Sections.     (line  84)
-* magit-insert-unstaged-changes:         Status Sections.     (line  59)
-* magit-insert-untracked-files:          Status Sections.     (line  50)
-* magit-insert-upstream-branch-header:   Status Header Sections.
-                                                              (line  46)
-* magit-insert-user-header:              Status Header Sections.
-                                                              (line  75)
-* magit-list-repositories:               Repository List.     (line   6)
-* magit-list-submodules:                 Listing Submodules.  (line  13)
-* magit-log-maybe-show-more-commits:     Section Movement.    (line  57)
-* magit-log-maybe-update-blob-buffer:    Section Movement.    (line  71)
-* magit-log-maybe-update-revision-buffer: Section Movement.   (line  64)
-* magit-maybe-set-dedicated:             Switching Buffers.   (line  97)
-* magit-mode-display-buffer:             Refreshing Buffers.  (line  33)
-* magit-mode-quit-window:                Quitting Windows.    (line  31)
-* magit-mode-setup:                      Refreshing Buffers.  (line  17)
-* magit-push-implicitly:                 Pushing.             (line  73)
-* magit-push-to-remote:                  Pushing.             (line  84)
-* magit-region-sections:                 Section Selection.   (line  10)
-* magit-region-values:                   Section Selection.   (line  29)
-* magit-remote-config-popup:             The Remote Config Popup.
-                                                              (line   6)
-* magit-repolist-column-ident:           Repository List.     (line  30)
-* magit-repolist-column-path:            Repository List.     (line  35)
-* magit-repolist-column-unpulled-from-pushremote: Repository List.
-                                                              (line  49)
-* magit-repolist-column-unpulled-from-upstream: Repository List.
-                                                              (line  44)
-* magit-repolist-column-unpushed-to-pushremote: Repository List.
-                                                              (line  59)
-* magit-repolist-column-unpushed-to-upstream: Repository List.
-                                                              (line  54)
-* magit-repolist-column-version:         Repository List.     (line  39)
-* magit-restore-window-configuration:    Quitting Windows.    (line  20)
-* magit-revert-buffers:                  Editing Commit Messages.
-                                                              (line 178)
-* magit-run-git:                         Calling Git for Effect.
-                                                              (line  36)
-* magit-run-git-async:                   Calling Git for Effect.
-                                                              (line  80)
-* magit-run-git-with-editor:             Calling Git for Effect.
-                                                              (line  93)
-* magit-run-git-with-input:              Calling Git for Effect.
-                                                              (line  40)
-* magit-run-git-with-logfile:            Calling Git for Effect.
-                                                              (line  56)
-* magit-save-window-configuration:       Switching Buffers.   (line  86)
-* magit-section-case:                    Matching Sections.   (line  64)
-* magit-section-hide:                    Section Visibility.  (line  49)
-* magit-section-hide-children:           Section Visibility.  (line  64)
-* magit-section-ident:                   Matching Sections.   (line  11)
-* magit-section-match:                   Matching Sections.   (line  21)
-* magit-section-set-window-start:        Section Movement.    (line  50)
-* magit-section-show:                    Section Visibility.  (line  45)
-* magit-section-show-children:           Section Visibility.  (line  58)
-* magit-section-show-headings:           Section Visibility.  (line  53)
-* magit-section-toggle-children:         Section Visibility.  (line  68)
-* magit-section-when:                    Matching Sections.   (line  52)
-* magit-start-git:                       Calling Git for Effect.
-                                                              (line 105)
-* magit-start-process:                   Calling Git for Effect.
-                                                              (line 124)
-* magit-status-maybe-update-blob-buffer: Section Movement.    (line  83)
-* magit-status-maybe-update-revision-buffer: Section Movement.
-                                                              (line  77)
-* magit-tag-release:                     Tagging.             (line  28)
-* magit-wip-commit-initial-backup:       Wip Modes.           (line 145)
-* magit-wip-log:                         Wip Modes.           (line  85)
-* magit-wip-log-current:                 Wip Modes.           (line  93)
-* with-editor-usage-message:             Editing Commit Messages.
-                                                              (line 215)
-
-
-File: magit.info,  Node: Variable Index,  Prev: Function Index,  Up: Top
-
-Appendix F Variable Index
-*************************
-
-
-* Menu:
-
-* auto-revert-buffer-list-filter:        Automatic Reverting of File-Visiting Buffers.
-                                                              (line  81)
-* auto-revert-interval:                  Automatic Reverting of File-Visiting Buffers.
-                                                              (line  76)
-* auto-revert-stop-on-user-input:        Automatic Reverting of File-Visiting Buffers.
-                                                              (line  71)
-* auto-revert-use-notify:                Automatic Reverting of File-Visiting Buffers.
-                                                              (line  49)
-* auto-revert-verbose:                   Automatic Reverting of File-Visiting Buffers.
-                                                              (line 103)
-* branch.autoSetupMerge:                 The Branch Config Popup.
-                                                              (line  94)
-* branch.autoSetupRebase:                The Branch Config Popup.
-                                                              (line 111)
-* branch.NAME.description:               The Branch Config Popup.
-                                                              (line  61)
-* branch.NAME.merge:                     The Branch Config Popup.
-                                                              (line  23)
-* branch.NAME.pushRemote:                The Branch Config Popup.
-                                                              (line  47)
-* branch.NAME.rebase:                    The Branch Config Popup.
-                                                              (line  35)
-* branch.NAME.remote:                    The Branch Config Popup.
-                                                              (line  29)
-* core.notesRef:                         Notes.               (line  59)
-* git-commit-fill-column:                Editing Commit Messages.
-                                                              (line 228)
-* git-commit-finish-query-functions:     Editing Commit Messages.
-                                                              (line 233)
-* git-commit-known-pseudo-headers:       Editing Commit Messages.
-                                                              (line 124)
-* git-commit-major-mode:                 Editing Commit Messages.
-                                                              (line 163)
-* git-commit-setup-hook:                 Editing Commit Messages.
-                                                              (line 174)
-* git-commit-summary-max-length:         Editing Commit Messages.
-                                                              (line 222)
-* git-rebase-auto-advance:               Editing Rebase Sequences.
-                                                              (line  94)
-* git-rebase-confirm-cancel:             Editing Rebase Sequences.
-                                                              (line 102)
-* git-rebase-show-instructions:          Editing Rebase Sequences.
-                                                              (line  98)
-* global-auto-revert-mode:               Automatic Reverting of File-Visiting Buffers.
-                                                              (line  22)
-* magit-auto-revert-immediately:         Automatic Reverting of File-Visiting Buffers.
-                                                              (line  32)
-* magit-auto-revert-mode:                Automatic Reverting of File-Visiting Buffers.
-                                                              (line  17)
-* magit-auto-revert-tracked-only:        Automatic Reverting of File-Visiting Buffers.
-                                                              (line  55)
-* magit-bisect-show-graph:               Bisecting.           (line  55)
-* magit-blame-disable-modes:             Blaming.             (line 150)
-* magit-blame-echo-style:                Blaming.             (line 133)
-* magit-blame-goto-chunk-hook:           Blaming.             (line 156)
-* magit-blame-read-only:                 Blaming.             (line 145)
-* magit-blame-styles:                    Blaming.             (line 128)
-* magit-blame-time-format:               Blaming.             (line 140)
-* magit-branch-adjust-remote-upstream-alist: The Branch Popup.
-                                                              (line 303)
-* magit-branch-popup-show-variables:     The Branch Popup.    (line  21)
-* magit-branch-prefer-remote-upstream:   The Branch Popup.    (line 258)
-* magit-branch-read-upstream-first:      The Branch Popup.    (line 252)
-* magit-buffer-name-format:              Naming Buffers.      (line  27)
-* magit-bury-buffer-function:            Quitting Windows.    (line  11)
-* magit-cherry-margin:                   Cherries.            (line  22)
-* magit-clone-set-remote.pushDefault:    Repository Setup.    (line  23)
-* magit-commit-ask-to-stage:             Initiating a Commit. (line  74)
-* magit-commit-extend-override-date:     Initiating a Commit. (line  79)
-* magit-commit-reword-override-date:     Initiating a Commit. (line  83)
-* magit-commit-squash-confirm:           Initiating a Commit. (line  87)
-* magit-completing-read-function:        Support for Completion Frameworks.
-                                                              (line  27)
-* magit-diff-adjust-tab-width:           Diff Options.        (line  16)
-* magit-diff-buffer-file-locked:         Minor Mode for Buffers Visiting Files.
-                                                              (line  52)
-* magit-diff-hide-trailing-cr-characters: Diff Options.       (line  67)
-* magit-diff-highlight-hunk-region-functions: Diff Options.   (line  71)
-* magit-diff-highlight-indentation:      Diff Options.        (line  52)
-* magit-diff-highlight-trailing:         Diff Options.        (line  47)
-* magit-diff-paint-whitespace:           Diff Options.        (line  38)
-* magit-diff-refine-hunk:                Diff Options.        (line   6)
-* magit-diff-unmarked-lines-keep-foreground: Diff Options.    (line  97)
-* magit-diff-visit-previous-blob:        Diff Buffer.         (line  37)
-* magit-display-buffer-function:         Switching Buffers.   (line  23)
-* magit-display-buffer-noselect:         Switching Buffers.   (line  14)
-* magit-dwim-selection:                  Completion and Confirmation.
-                                                              (line  42)
-* magit-ediff-dwim-show-on-hunks:        Ediffing.            (line  73)
-* magit-ediff-quit-hook:                 Ediffing.            (line  88)
-* magit-ediff-show-stash-with-index:     Ediffing.            (line  81)
-* magit-file-mode:                       Minor Mode for Buffers Visiting Files.
-                                                              (line  11)
-* magit-generate-buffer-name-function:   Naming Buffers.      (line   6)
-* magit-git-debug:                       Viewing Git Output.  (line  28)
-* magit-git-debug <1>:                   Getting a Value from Git.
-                                                              (line  64)
-* magit-git-executable:                  Git Executable.      (line  39)
-* magit-git-global-arguments:            Global Git Arguments.
-                                                              (line   6)
-* magit-keep-region-overlay:             The Selection.       (line  52)
-* magit-list-refs-sortby:                Additional Completion Options.
-                                                              (line   6)
-* magit-log-auto-more:                   Log Buffer.          (line  67)
-* magit-log-buffer-file-locked:          Minor Mode for Buffers Visiting Files.
-                                                              (line  75)
-* magit-log-margin:                      Log Margin.          (line  12)
-* magit-log-section-args:                Status Options.      (line  36)
-* magit-log-section-commit-count:        Status Sections.     (line 120)
-* magit-log-select-margin:               Select from Log.     (line  30)
-* magit-log-show-refname-after-summary:  Log Buffer.          (line  73)
-* magit-module-sections-hook:            Status Module Sections.
-                                                              (line  20)
-* magit-module-sections-nested:          Status Module Sections.
-                                                              (line  24)
-* magit-no-confirm:                      Action Confirmation. (line  18)
-* magit-pop-revision-stack-format:       Editing Commit Messages.
-                                                              (line  92)
-* magit-post-display-buffer-hook:        Switching Buffers.   (line  92)
-* magit-pre-display-buffer-hook:         Switching Buffers.   (line  81)
-* magit-prefer-remote-upstream:          The Branch Config Popup.
-                                                              (line 139)
-* magit-process-raise-error:             Calling Git for Effect.
-                                                              (line 151)
-* magit-push-current-set-remote-if-missing: Pushing.          (line  96)
-* magit-reflog-margin:                   Reflog.              (line  23)
-* magit-refresh-args:                    Refreshing Buffers.  (line  55)
-* magit-refresh-buffer-hook:             Automatic Refreshing of Magit Buffers.
-                                                              (line  40)
-* magit-refresh-function:                Refreshing Buffers.  (line  49)
-* magit-refresh-status-buffer:           Automatic Refreshing of Magit Buffers.
-                                                              (line  46)
-* magit-refs-filter-alist:               References Buffer.   (line 149)
-* magit-refs-focus-column-width:         References Buffer.   (line  74)
-* magit-refs-margin:                     References Buffer.   (line  89)
-* magit-refs-margin-for-tags:            References Buffer.   (line 115)
-* magit-refs-pad-commit-counts:          References Buffer.   (line  41)
-* magit-refs-primary-column-width:       References Buffer.   (line  61)
-* magit-refs-sections-hook:              References Sections. (line  13)
-* magit-refs-show-commit-count:          References Buffer.   (line  29)
-* magit-refs-show-remote-prefix:         References Buffer.   (line  54)
-* magit-remote-add-set-remote.pushDefault: The Remote Popup.  (line  77)
-* magit-remote-popup-show-variables:     The Remote Popup.    (line  18)
-* magit-repolist-columns:                Repository List.     (line  14)
-* magit-repository-directories:          Status Buffer.       (line  30)
-* magit-repository-directories-depth:    Status Buffer.       (line  40)
-* magit-revision-insert-related-refs:    Revision Buffer.     (line   6)
-* magit-revision-show-gravatar:          Revision Buffer.     (line  10)
-* magit-revision-use-hash-sections:      Revision Buffer.     (line  26)
-* magit-root-section:                    Matching Sections.   (line  80)
-* magit-save-repository-buffers:         Automatic Saving of File-Visiting Buffers.
-                                                              (line  13)
-* magit-section-cache-visibility:        Section Visibility.  (line  95)
-* magit-section-initial-visibility-alist: Section Visibility. (line  78)
-* magit-section-movement-hook:           Section Movement.    (line  38)
-* magit-section-set-visibility-hook:     Section Visibility.  (line 106)
-* magit-section-show-child-count:        Section Options.     (line   9)
-* magit-shell-command-verbose-prompt:    Running Git Manually.
-                                                              (line  46)
-* magit-stashes-margin:                  Stashing.            (line 103)
-* magit-status-headers-hook:             Status Header Sections.
-                                                              (line  18)
-* magit-status-margin:                   Status Options.      (line  10)
-* magit-status-refresh-hook:             Status Options.      (line   6)
-* magit-status-sections-hook:            Status Sections.     (line  10)
-* magit-submodule-list-columns:          Listing Submodules.  (line  21)
-* magit-this-process:                    Calling Git for Effect.
-                                                              (line 146)
-* magit-uniquify-buffer-names:           Naming Buffers.      (line  74)
-* magit-unstage-committed:               Staging and Unstaging.
-                                                              (line  56)
-* magit-update-other-window-delay:       Section Movement.    (line  89)
-* magit-use-sticky-arguments:            Popup Buffers and Prefix Commands.
-                                                              (line  36)
-* magit-visit-ref-behavior:              References Buffer.   (line 177)
-* magit-wip-after-apply-mode:            Wip Modes.           (line 126)
-* magit-wip-after-apply-mode-lighter:    Wip Modes.           (line 186)
-* magit-wip-after-save-local-mode-lighter: Wip Modes.         (line 182)
-* magit-wip-after-save-mode:             Wip Modes.           (line 120)
-* magit-wip-before-change-mode:          Wip Modes.           (line 140)
-* magit-wip-before-change-mode-lighter:  Wip Modes.           (line 190)
-* magit-wip-merge-branch:                Wip Modes.           (line  63)
-* magit-wip-namespace:                   Wip Modes.           (line 194)
-* notes.displayRef:                      Notes.               (line  64)
-* pull.rebase:                           The Branch Config Popup.
-                                                              (line  70)
-* remote.NAME.fetch:                     The Remote Config Popup.
-                                                              (line  25)
-* remote.NAME.push:                      The Remote Config Popup.
-                                                              (line  36)
-* remote.NAME.pushurl:                   The Remote Config Popup.
-                                                              (line  30)
-* remote.NAME.tagOpts:                   The Remote Config Popup.
-                                                              (line  41)
-* remote.NAME.url:                       The Remote Config Popup.
-                                                              (line  20)
-* remote.pushDefault:                    The Branch Config Popup.
-                                                              (line  84)
-