diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 1be1f6db7f4..7b2bf33fad6 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -1032,7 +1032,9 @@ stream. Standard error output is discarded." (defun vc-bzr-dir-status-files (dir files update-function) "Return a list of conses (file . state) for DIR." - (apply #'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files) + (set-process-query-on-exit-flag + (apply #'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files) + nil) ;; FIXME: Consider `vc-run-delayed-success'. (vc-run-delayed (vc-bzr-after-dir-status update-function diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index eb971754c1c..293ebcca3e2 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -1083,9 +1083,11 @@ Query all files in DIR if files is nil." (let ((local (vc-cvs-stay-local-p dir))) (if (and (not files) local (not (eq local 'only-file))) (vc-cvs-dir-status-heuristic dir update-function)) - (vc-cvs-command (current-buffer) 'async - files - "-f" "-n" "-q" "update") + (set-process-query-on-exit-flag + (vc-cvs-command (current-buffer) 'async + files + "-f" "-n" "-q" "update") + nil) ;; FIXME: Consider `vc-run-delayed-success'. (vc-run-delayed (vc-cvs-after-dir-status update-function)))) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 6b9530c9570..4021c69ea4f 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -724,44 +724,39 @@ or an empty string if none." (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)))) + (cl-flet ((git-cmd (&rest args) + (set-process-query-on-exit-flag + (apply #'vc-git-command (current-buffer) 'async args) + nil))) + (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 (git-cmd files "add" "--refresh" "--") + ;; git-add exits 128 if some of FILES are untracked; + ;; we can ignore that (bug#79999). + (setq allowed-exit 128)) + (git-cmd nil "update-index" "--refresh"))) + ('ls-files-added + (git-cmd files "ls-files" "-z" "-c" "-s" "--")) + ('ls-files-up-to-date + (git-cmd files "ls-files" "-z" "-c" "-s" "--")) + ('ls-files-conflict + (git-cmd files "ls-files" "-z" "-u" "--")) + ('ls-files-missing + (git-cmd files "ls-files" "-z" "-d" "--")) + ('ls-files-unknown + (git-cmd files "ls-files" "-z" "-o" "--exclude-standard" "--")) + ('ls-files-ignored + (git-cmd files "ls-files" "-z" "-o" "-i" "--directory" + "--no-empty-directory" "--exclude-standard" "--")) + ;; --relative added in Git 1.5.5. + ('diff-index + (git-cmd files "diff-index" "--relative" "-z" "-M" "HEAD" "--"))) + (vc-run-delayed-success allowed-exit + (vc-git-after-dir-status-stage git-state))))) (defun vc-git-dir-status-files (_dir files update-function) "Return a list of (FILE STATE EXTRA) entries for DIR." diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index af143a4b1da..c375d14b7e3 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -1544,11 +1544,13 @@ REV is the revision to check out into WORKFILE." ;; XXX: We can't pass DIR directly to 'hg status' because that ;; returns all ignored files if FILES is non-nil (bug#22481). (let ((default-directory dir)) - (apply #'vc-hg-command '(t nil) 'async files - "status" (concat "-mardu" (if files "i")) "-C" - (if (version<= "4.2" (vc-hg--program-version)) - '("--config" "commands.status.relative=1") - '("re:" "-I" ".")))) + (set-process-query-on-exit-flag + (apply #'vc-hg-command '(t nil) 'async files + "status" (concat "-mardu" (if files "i")) "-C" + (if (version<= "4.2" (vc-hg--program-version)) + '("--config" "commands.status.relative=1") + '("re:" "-I" "."))) + nil)) (vc-run-delayed-success 0 (vc-hg-after-dir-status update-function))) diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index 12704361430..6e920f7e721 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -227,7 +227,9 @@ A value of `default' means to use the value of `vc-resolve-conflicts'." CALLBACK is called as (CALLBACK RESULT BUFFER), where RESULT is a list of conses (FILE . STATE) for directory DIR." ;; FIXME shouldn't this rather default to all the files in dir? - (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files) + (set-process-query-on-exit-flag + (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files) + nil) ;; FIXME: Consider `vc-run-delayed-success'. (vc-run-delayed (vc-svn-after-dir-status callback t)))