aboutsummaryrefslogtreecommitdiff
path: root/.config/emacs/lisp/magit/lisp/magit-status.el
diff options
context:
space:
mode:
Diffstat (limited to '.config/emacs/lisp/magit/lisp/magit-status.el')
-rw-r--r--.config/emacs/lisp/magit/lisp/magit-status.el834
1 files changed, 0 insertions, 834 deletions
diff --git a/.config/emacs/lisp/magit/lisp/magit-status.el b/.config/emacs/lisp/magit/lisp/magit-status.el
deleted file mode 100644
index 6748c91..0000000
--- a/.config/emacs/lisp/magit/lisp/magit-status.el
+++ /dev/null
@@ -1,834 +0,0 @@
-;;; magit-status.el --- The grand overview -*- lexical-binding:t -*-
-
-;; Copyright (C) 2008-2026 The Magit Project Contributors
-
-;; Author: Jonas Bernoulli <emacs.magit@jonas.bernoulli.dev>
-;; Maintainer: Jonas Bernoulli <emacs.magit@jonas.bernoulli.dev>
-
-;; SPDX-License-Identifier: GPL-3.0-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 of the License, 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This library implements the status buffer.
-
-;;; Code:
-
-(require 'magit)
-
-(declare-function magit-dired-jump "magit-dired" (&optional other-window))
-
-;;; 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
- (list #'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 (list #'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
- (list #'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 buried, 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-goto-file-position nil
- "Whether to go to position corresponding to file position.
-
-If this is non-nil and the current buffer is visiting a file,
-then `magit-status' tries to go to the position in the status
-buffer that corresponds to the position in the file-visiting
-buffer. This jumps into either the diff of unstaged changes
-or the diff of staged changes.
-
-If the previously current buffer does not visit a file, or if
-the file has neither unstaged nor staged changes then this has
-no effect.
-
-The command `magit-status-here' tries to go to that position,
-regardless of the value of this option."
- :package-version '(magit . "3.0.0")
- :group 'magit-status
- :type 'boolean)
-
-(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-show-untracked-files t
- "Whether to list untracked files in the status buffer.
-
-- If nil, do not list any untracked files.
-- If t, list untracked files, but if a directory does not contain any
- tracked files, then only list that directory, not the contained
- untracked files.
-- If all, then list each individual untracked files. This is can be
- very slow and is discouraged.
-
-The corresponding values for the Git variable are \"no\", \"normal\"
-and \"all\".
-
-To disable listing untracked files in a specific repository only, add
-the following to \".dir-locals.el\":
-
- ((magit-status-mode
- (magit-status-show-untracked-files . \"no\")))
-
-Alternatively (and mostly for historic reasons), it is possible to use
-`git-config' to set the repository-local value:
-
- git config set --local status.showUntrackedFiles no
-
-This does *not* override the (if any) local value of this Lisp variable,
-but it does override its global value.
-
-See the last section in the git-status(1) manpage, to speed up the part
-of the work Git is responsible for. Turning that list into sections is
-also not free, so Magit only lists `magit-status-file-list-limit' files."
- :package-version '(magit . "4.3.0")
- :group 'magit-status
- :type '(choice (const :tag "Do not list untracked files" nil)
- (const :tag "List mixture of files and directories" t)
- (const :tag "List individual files (slow)" all))
- :safe (##memq % '(nil t all)))
-
-(defcustom magit-status-file-list-limit 100
- "How many files to list in file list sections in the status buffer.
-For performance reasons, it is recommended that you do not
-increase this limit."
- :package-version '(magit . "4.3.0")
- :group 'magit-status
- :type 'natnum)
-
-(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 author or 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. Option `magit-log-margin-show-committer-date'
- controls which date is being displayed.
-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))
-
-(defcustom magit-status-use-buffer-arguments 'selected
- "Whether `magit-status' reuses arguments when the buffer already exists.
-
-This option has no effect when merely refreshing the status
-buffer using `magit-refresh'.
-
-Valid values are:
-
-`always': Always use the set of arguments that is currently
- active in the status buffer, provided that buffer exists
- of course.
-`selected': Use the set of arguments from the status
- buffer, but only if it is displayed in a window of the
- current frame. This is the default.
-`current': Use the set of arguments from the status buffer,
- but only if it is the current buffer.
-`never': Never use the set of arguments from the status
- buffer."
- :package-version '(magit . "3.0.0")
- :group 'magit-buffers
- :group 'magit-commands
- :type '(choice
- (const :tag "Always use args from buffer" always)
- (const :tag "Use args from buffer if displayed in frame" selected)
- (const :tag "Use args from buffer if it is current" current)
- (const :tag "Never use args from buffer" never)))
-
-;;; 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-setup-buffer directory))
-
-;;;###autoload
-(defun magit-status (&optional directory cache)
- "Show the status of the current Git repository in a buffer.
-
-If the current directory isn't located within a Git repository,
-then prompt for an existing repository or an arbitrary directory,
-depending on option `magit-repository-directories', and show the
-status of the selected repository instead.
-
-* If that option specifies any existing repositories, then offer
- those for completion and show the status buffer for the
- selected one.
-
-* Otherwise read an arbitrary directory using regular file-name
- completion. If the selected directory is the top-level of an
- existing working tree, then show the status buffer for that.
-
-* Otherwise offer to initialize the selected directory as a new
- repository. After creating the repository show its status
- buffer.
-
-These fallback behaviors can also be forced using one or more
-prefix arguments:
-
-* With two prefix arguments (or more precisely a numeric prefix
- value of 16 or greater) read an arbitrary directory and act on
- it as described above. The same could be accomplished using
- the command `magit-init'.
-
-* With a single prefix argument read an existing repository, or
- if none can be found based on `magit-repository-directories',
- then fall back to the same behavior as with two prefix
- arguments."
- (interactive
- (let ((magit--refresh-cache (list (cons 0 0))))
- (list (and (or current-prefix-arg (not (magit-toplevel)))
- (progn (magit--assert-usable-git)
- (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-setup-buffer 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 invalidates cached values.
- (setq magit--refresh-cache nil)
- (magit-init directory))))
- (magit-status-setup-buffer default-directory))))
-
-(put 'magit-status 'interactive-only 'magit-status-setup-buffer)
-
-;;;###autoload
-(defalias 'magit #'magit-status
- "Begin using Magit.
-
-This alias for `magit-status' exists 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-here ()
- "Like `magit-status' but with non-nil `magit-status-goto-file-position'.
-Before doing so, save all file-visiting buffers belonging to the current
-repository without prompting."
- (interactive)
- (let ((magit-inhibit-refresh t))
- (magit-save-repository-buffers t))
- (let ((magit-status-goto-file-position t))
- (call-interactively #'magit-status)))
-
-(put 'magit-status-here 'interactive-only 'magit-status-setup-buffer)
-
-;;;###autoload
-(defun magit-status-quick ()
- "Show the status of the current Git repository, maybe without refreshing.
-
-If the status buffer of the current Git repository exists but
-isn't being displayed in the selected frame, then display it
-without refreshing it.
-
-If the status buffer is being displayed in the selected frame,
-then also refresh it.
-
-Prefix arguments have the same meaning as for `magit-status',
-and additionally cause the buffer to be refresh.
-
-To use this function instead of `magit-status', add this to your
-init file: (global-set-key (kbd \"C-x g\") \\='magit-status-quick)."
- (interactive)
- (if-let ((buffer
- (and (not current-prefix-arg)
- (not (magit-get-mode-buffer 'magit-status-mode nil 'selected))
- (magit-get-mode-buffer 'magit-status-mode))))
- (magit-display-buffer buffer)
- (call-interactively #'magit-status)))
-
-;;; Mode
-
-(defvar-keymap magit-status-mode-map
- :doc "Keymap for `magit-status-mode'."
- :parent magit-mode-map
- "j" #'magit-status-jump
- "<remap> <dired-jump>" #'magit-dired-jump)
-
-(transient-define-prefix magit-status-jump ()
- "In a Magit-Status buffer, jump to a section."
- [["Jump to"
- ("z " magit-jump-to-stashes)
- ("t " magit-jump-to-tracked)
- ("n " magit-jump-to-untracked)
- ("i " magit-jump-to-ignored)
- ("u " magit-jump-to-unstaged)
- ("s " magit-jump-to-staged)]
- [""
- ("fu" magit-jump-to-unpulled-from-upstream)
- ("fp" magit-jump-to-unpulled-from-pushremote)
- ("pu" magit-jump-to-unpushed-to-upstream)
- ("pp" magit-jump-to-unpushed-to-pushremote)
- ("a " magit-jump-to-assume-unchanged)
- ("w " magit-jump-to-skip-worktree)]
- ["Jump using"
- ("j" "Imenu" imenu)]])
-
-(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] to invoke major commands.
-
-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] to create a commit.
-
-\\{magit-status-mode-map}"
- :interactive nil
- :group 'magit-status
- (magit-hack-dir-local-variables)
- (setq magit--imenu-group-types '(not branch commit)))
-
-(put 'magit-status-mode 'magit-diff-default-arguments
- '("--no-ext-diff"))
-(put 'magit-status-mode 'magit-log-default-arguments
- '("-n256" "--decorate"))
-
-;;;###autoload
-(defun magit-status-setup-buffer (&optional directory)
- (let ((default-directory (or directory default-directory)))
- (when (file-remote-p default-directory)
- (magit-git-version-assert))
- (pcase-let
- ((`(,dargs ,dfiles) (magit-diff--get-value 'magit-status-mode 'status))
- (`(,largs ,lfiles) (magit-log--get-value 'magit-status-mode 'status)))
- (magit-setup-buffer #'magit-status-mode nil
- :initial-section #'magit-status-goto-initial-section
- :select-section (and$ (magit-status--get-file-position)
- (lambda () (apply #'magit-status--goto-file-position $)))
- (magit-buffer-diff-args dargs)
- (magit-buffer-diff-files dfiles)
- (magit-buffer-log-args largs)
- (magit-buffer-log-files lfiles)))))
-
-(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--get-file-position ()
- (and-let* ((_ magit-status-goto-file-position)
- (file (magit-file-relative-name)))
- (save-excursion
- (widen)
- (list file (line-number-at-pos) (current-column)))))
-
-(defun magit-status--goto-file-position (file line column)
- (pcase-let ((`(,upos ,uloc)
- (magit-diff--locate-file-position file line column 'unstaged))
- (`(,spos ,sloc)
- (magit-diff--locate-file-position file line column 'staged)))
- (cond ((eq uloc 'line) (goto-char upos))
- ((eq sloc 'line) (goto-char spos))
- ((eq uloc 'hunk) (goto-char upos))
- ((eq sloc 'hunk) (goto-char spos))
- (upos (goto-char upos))
- (spos (goto-char spos)))
- (when (or upos spos)
- (magit-section-reveal (magit-current-section)))))
-
-(defun magit-status-goto-initial-section ()
- "Jump to the section specified by `magit-status-initial-section'."
- (when-let ((section
- (seq-some (lambda (initial)
- (if (integerp initial)
- (nth (1- initial)
- (magit-section-siblings
- (magit-current-section) 'next))
- (magit-get-section initial)))
- 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)))))
-
-(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.
-See also info node `(magit)Section Movement'."
- (when (derived-mode-p 'magit-status-mode)
- (magit--maybe-update-revision-buffer)))
-
-(defun magit-status-maybe-update-stash-buffer (&optional _)
- "When moving in the status buffer, update the stash buffer.
-If there is no stash buffer in the same frame, then do nothing.
-See also info node `(magit)Section Movement'."
- (when (derived-mode-p 'magit-status-mode)
- (magit--maybe-update-stash-buffer)))
-
-(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.
-See also info node `(magit)Section Movement'."
- (when (derived-mode-p 'magit-status-mode)
- (magit--maybe-update-blob-buffer)))
-
-;;; 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-keymap magit-error-section-map
- :doc "Keymap for `error' sections."
- "<remap> <magit-visit-thing>" #'magit-process-buffer
- "<1>" (magit-menu-item "Visit process output" #'magit-process-buffer))
-
-(defun magit-insert-error-header ()
- "Insert 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."
- (when magit-this-error
- (magit-insert-section (error 'git)
- (insert (propertize (format "%-10s" "GitError! ")
- 'font-lock-face 'magit-section-heading))
- (insert (propertize magit-this-error 'font-lock-face 'error))
- (when-let ((_ magit-show-process-buffer-hint)
- (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-buffer-diff-files)
- (insert (propertize (format "%-10s" "Filter! ")
- 'font-lock-face 'magit-section-heading))
- (when ignore-modules
- (insert ignore-modules)
- (when magit-buffer-diff-files
- (insert " -- ")))
- (when magit-buffer-diff-files
- (insert (string-join magit-buffer-diff-files " ")))
- (insert ?\n))))
-
-;;;; Reference Headers
-
-(defun magit-insert-head-branch-header (&optional branch)
- "Insert a header line about the current branch.
-If `HEAD' is detached, then insert information about that commit
-instead. The optional BRANCH argument is for internal use only."
- (let ((output (magit-rev-format "%h %s" (or branch "HEAD"))))
- (string-match "^\\([^ ]+\\) \\(.*\\)" output)
- (magit-bind-match-strings (commit summary) output
- (when (equal summary "")
- (setq summary "(no commit message)"))
- (if-let ((branch (or branch (magit-get-current-branch))))
- (magit-insert-section (branch branch)
- (insert (format "%-10s" "Head: "))
- (when magit-status-show-hashes-in-headers
- (insert (propertize commit 'font-lock-face 'magit-hash) ?\s))
- (insert (propertize branch 'font-lock-face 'magit-branch-local))
- (insert ?\s)
- (insert (magit-log--wash-summary summary))
- (insert ?\n))
- (magit-insert-section (commit commit)
- (insert (format "%-10s" "Head: "))
- (insert (propertize commit 'font-lock-face 'magit-hash))
- (insert ?\s)
- (insert (magit-log--wash-summary summary))
- (insert ?\n))))))
-
-(defun magit-insert-upstream-branch-header (&optional branch upstream keyword)
- "Insert a header line about the upstream of the current branch.
-If no branch is checked out, then insert nothing. The optional
-arguments are for internal use only."
- (when-let ((branch (or branch (magit-get-current-branch))))
- (let ((remote (magit-get "branch" branch "remote"))
- (merge (magit-get "branch" branch "merge"))
- (rebase (magit-get "branch" branch "rebase")))
- (when (or remote merge)
- (unless upstream
- (setq upstream (magit-get-upstream-branch branch)))
- (magit-insert-section (branch upstream)
- (pcase rebase
- ("true")
- ("false" (setq rebase nil))
- (_ (setq rebase (magit-get-boolean "pull.rebase"))))
- (insert (format "%-10s" (or keyword (if rebase "Rebase: " "Merge: "))))
- (insert
- (cond
- (upstream
- (concat (and magit-status-show-hashes-in-headers
- (concat (propertize (magit-rev-format "%h" upstream)
- 'font-lock-face 'magit-hash)
- " "))
- upstream " "
- (magit-log--wash-summary
- (or (magit-rev-format "%s" upstream)
- "(no commit message)"))))
- ((magit--unnamed-upstream-p remote merge)
- (concat (propertize merge 'font-lock-face 'magit-branch-remote)
- " from "
- (propertize remote 'font-lock-face 'bold)))
- ((magit--valid-upstream-p remote merge)
- (if (equal remote ".")
- (concat
- (propertize merge 'font-lock-face 'magit-branch-local) " "
- (propertize "does not exist"
- 'font-lock-face 'magit-branch-warning))
- (format
- "%s %s %s"
- (propertize merge 'font-lock-face 'magit-branch-remote)
- (propertize "does not exist on"
- 'font-lock-face 'magit-branch-warning)
- (propertize remote 'font-lock-face 'magit-branch-remote))))
- ((propertize "invalid upstream configuration"
- 'font-lock-face 'magit-branch-warning))))
- (insert ?\n))))))
-
-(defun magit-insert-push-branch-header ()
- "Insert a header line about the branch the current branch is pushed to."
- (when-let* ((branch (magit-get-current-branch))
- (target (magit-get-push-branch branch)))
- (magit-insert-section (branch target)
- (insert (format "%-10s" "Push: "))
- (insert
- (cond-let
- ((magit-rev-verify target)
- (concat (and magit-status-show-hashes-in-headers
- (concat (propertize (magit-rev-format "%h" target)
- 'font-lock-face 'magit-hash)
- " "))
- target " "
- (magit-log--wash-summary
- (or (magit-rev-format "%s" target)
- "(no commit message)"))))
- [[remote (magit-get-push-remote branch)]]
- ((magit-remote-p remote)
- (concat target " "
- (propertize "does not exist"
- 'font-lock-face 'magit-branch-warning)))
- ((concat remote " "
- (propertize "remote does not exist"
- 'font-lock-face 'magit-branch-warning)))))
- (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 'font-lock-face 'magit-tag)
- (and (> count 0)
- (format " (%s)"
- (propertize
- (format "%s" count)
- 'font-lock-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 'font-lock-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 'font-lock-face 'magit-branch-remote) ?\s)
- (insert url ?\n))))
-
-;;;; File Sections
-
-(defvar-keymap magit-untracked-section-map
- :doc "Keymap for the `untracked' section."
- "<remap> <magit-delete-thing>" #'magit-discard
- "<remap> <magit-stage-files>" #'magit-stage
- "<2>" (magit-menu-item "Discard files" #'magit-discard)
- "<1>" (magit-menu-item "Stage files" #'magit-stage))
-
-(magit-define-section-jumper magit-jump-to-untracked
- "Untracked files" untracked nil magit-insert-untracked-files)
-
-(magit-define-section-jumper magit-jump-to-tracked
- "Tracked files" tracked nil magit-insert-tracked-files)
-
-(magit-define-section-jumper magit-jump-to-ignored
- "Ignored files" ignored nil magit-insert-ignored-files)
-
-(magit-define-section-jumper magit-jump-to-skip-worktree
- "Skip-worktree files" skip-worktree nil magit-insert-skip-worktree-files)
-
-(magit-define-section-jumper magit-jump-to-assume-unchanged
- "Assume-unchanged files" assume-unchanged nil
- magit-insert-assume-unchanged-files)
-
-(defun magit-insert-untracked-files ()
- "Maybe insert a list of untracked files.
-
-List files if `magit-status-show-untracked-files' is non-nil, but also
-take the local value of Git variable `status.showUntrackedFiles' into
-account. The local value of the Lisp variable takes precedence over the
-local value of the Git variable. The global value of the Git variable
-is always ignored."
- (magit-insert-files 'untracked #'magit-list-untracked-files))
-
-(defun magit-insert-tracked-files ()
- "Insert a list of tracked files.
-Honor the buffer's file filter, which can be set using \"D - -\"."
- (magit-insert-files 'tracked #'magit-list-files))
-
-(defun magit-insert-ignored-files ()
- "Insert a list of ignored files.
-Honor the buffer's file filter, which can be set using \"D - -\"."
- (magit-insert-files 'ignored (##magit-ignored-files "--directory" %)))
-
-(defun magit-insert-skip-worktree-files ()
- "Insert a list of skip-worktree files.
-Honor the buffer's file filter, which can be set using \"D - -\"."
- (magit-insert-files 'skip-worktree #'magit-skip-worktree-files))
-
-(defun magit-insert-assume-unchanged-files ()
- "Insert a list of files that are assumed to be unchanged.
-Honor the buffer's file filter, which can be set using \"D - -\"."
- (magit-insert-files 'assume-unchanged #'magit-assume-unchanged-files))
-
-(defun magit-insert-files (type fn)
- (when-let ((files (funcall fn
- (and magit-buffer-diff-files
- (cons "--" magit-buffer-diff-files)))))
- (magit-insert-section section ((eval type) nil t)
- (magit-insert-heading (length files)
- (let ((title (symbol-name type)))
- (format "%c%s files"
- (capitalize (aref title 0))
- (substring title 1))))
- (magit-insert-section-body
- (let ((magit-section-insert-in-reverse t)
- (limit magit-status-file-list-limit))
- (while (and files (> limit 0))
- (cl-decf limit)
- (let ((file (pop files)))
- (magit-insert-section (file file)
- (insert (funcall magit-format-file-function
- 'list file 'magit-filename))
- (insert ?\n))))
- (when files
- (magit-insert-section (info)
- (insert (propertize
- (format "%s files not listed\n" (length files))
- 'face 'warning)))))
- (insert ?\n)
- (oset section children (nreverse (oref section children)))))))
-
-;;; _
-(provide 'magit-status)
-;; Local Variables:
-;; read-symbol-shorthands: (
-;; ("and$" . "cond-let--and$")
-;; ("and>" . "cond-let--and>")
-;; ("and-let" . "cond-let--and-let")
-;; ("if-let" . "cond-let--if-let")
-;; ("when-let" . "cond-let--when-let")
-;; ("while-let" . "cond-let--while-let")
-;; ("match-string" . "match-string")
-;; ("match-str" . "match-string-no-properties"))
-;; End:
-;;; magit-status.el ends here