Function: vc-git-dir-status-goto-stage

vc-git-dir-status-goto-stage is a byte-compiled function defined in vc-git.el.gz.

Signature

(vc-git-dir-status-goto-stage GIT-STATE)

Source Code

;; Defined in /usr/src/emacs/lisp/vc/vc-git.el.gz
(defun vc-git-dir-status-goto-stage (git-state)
  ;; TODO: Look into reimplementing this using `git status --porcelain=v2'.
  (let ((files (vc-git-dir-status-state->files git-state))
        (allowed-exit 1))
    (erase-buffer)
    (pcase (vc-git-dir-status-state->stage git-state)
      ('update-index
       (if files
           (progn (vc-git-command (current-buffer) 'async files
                                  "add" "--refresh" "--")
                  ;; git-add exits 128 if some of FILES are untracked;
                  ;; we can ignore that (bug#79999).
                  (setq allowed-exit 128))
         (vc-git-command (current-buffer) 'async nil
                         "update-index" "--refresh")))
      ('ls-files-added
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-c" "-s" "--"))
      ('ls-files-up-to-date
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-c" "-s" "--"))
      ('ls-files-conflict
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-u" "--"))
      ('ls-files-missing
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-d" "--"))
      ('ls-files-unknown
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-o" "--exclude-standard" "--"))
      ('ls-files-ignored
       (vc-git-command (current-buffer) 'async files
                       "ls-files" "-z" "-o" "-i" "--directory"
                       "--no-empty-directory" "--exclude-standard" "--"))
      ;; --relative added in Git 1.5.5.
      ('diff-index
       (vc-git-command (current-buffer) 'async files
                       "diff-index" "--relative" "-z" "-M" "HEAD" "--")))
    (vc-run-delayed-success allowed-exit
      (vc-git-after-dir-status-stage git-state))))