1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Make Tramp's async processes more robust

* lisp/simple.el (shell-command-sentinel): Check process property
`remote-command' first.

* lisp/net/tramp.el (tramp-handle-make-process):
* lisp/net/tramp-androidsu.el (tramp-androidsu-handle-make-process):
Set sentinel `ignore'.  (Bug#71049)

* test/lisp/net/tramp-tests.el
(tramp--test-deftest-direct-async-process): Don't suppress
internal sentinel.
(tramp-test32-shell-commanddirect-async): Don't tag it :unstable.
This commit is contained in:
Michael Albinus 2024-05-25 17:23:30 +02:00
parent 129c6778e6
commit 91509d5d2a
4 changed files with 14 additions and 10 deletions

View file

@ -385,6 +385,8 @@ FUNCTION."
;; Generate a command to start the process using `su' with
;; suitable options for specifying the mount namespace and
;; suchlike.
;; Suppress `internal-default-process-sentinel', which is
;; set when :sentinel is nil. (Bug#71049)
(setq
p (let ((android-use-exec-loader nil))
(make-process
@ -407,7 +409,7 @@ FUNCTION."
:coding coding
:noquery noquery
:connection-type connection-type
:sentinel sentinel
:sentinel (or sentinel #'ignore)
:stderr stderr)))
;; Set filter. Prior Emacs 29.1, it doesn't work reliably
;; to provide it as `make-process' argument when filter is

View file

@ -5011,9 +5011,9 @@ should be set conmnection-local.")
(string-join command) (tramp-get-remote-pipe-buf v)))
(signal 'error (cons "Command too long:" command)))
;; Replace `login-args' place holders. Split ControlMaster
;; options.
(setq
;; Replace `login-args' place holders. Split ControlMaster
;; options.
login-args
(append
(flatten-tree (tramp-get-method-parameter v 'tramp-async-args))
@ -5025,11 +5025,13 @@ should be set conmnection-local.")
?h (or host "") ?u (or user "") ?p (or port "")
?c (format-spec (or options "") (format-spec-make ?t tmpfile))
?d (or device "") ?a (or pta "") ?l ""))))
;; Suppress `internal-default-process-sentinel', which is
;; set when :sentinel is nil. (Bug#71049)
p (make-process
:name name :buffer buffer
:command (append `(,login-program) login-args command)
:coding coding :noquery noquery :connection-type connection-type
:sentinel sentinel :stderr stderr))
:sentinel (or sentinel #'ignore) :stderr stderr))
;; Set filter. Prior Emacs 29.1, it doesn't work reliably
;; to provide it as `make-process' argument when filter is
;; t. See Bug#51177.

View file

@ -4863,11 +4863,14 @@ and are used only if a pop-up buffer is displayed."
;; We have a sentinel to prevent insertion of a termination message
;; in the buffer itself, and to set the point in the buffer when
;; `shell-command-dont-erase-buffer' is non-nil.
;; For remote shells, `process-command' does not serve the proper shell
;; command. We use process property `remote-command' instead. (Bug#71049)
(defun shell-command-sentinel (process signal)
(when (memq (process-status process) '(exit signal))
(shell-command-set-point-after-cmd (process-buffer process))
(message "%s: %s."
(car (cdr (cdr (process-command process))))
(car (cdr (cdr (or (process-get process 'remote-command)
(process-command process)))))
(substring signal 0 -1))))
(defun shell-command-on-region (start end command

View file

@ -5390,10 +5390,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
;; We do expect an established connection already,
;; `file-truename' does it by side-effect. Suppress
;; `tramp--test-enabled', in order to keep the connection.
;; Suppress "Process ... finished" messages.
(cl-letf (((symbol-function #'tramp--test-enabled) #'tramp-compat-always)
((symbol-function #'internal-default-process-sentinel)
#'ignore))
(cl-letf (((symbol-function #'tramp--test-enabled) #'tramp-compat-always))
(file-truename ert-remote-temporary-file-directory)
(funcall (ert-test-body ert-test))))))
@ -5936,7 +5933,7 @@ INPUT, if non-nil, is a string sent to the process."
(when (natnump cols)
(should (= cols async-shell-command-width))))))
(tramp--test-deftest-direct-async-process tramp-test32-shell-command 'unstable)
(tramp--test-deftest-direct-async-process tramp-test32-shell-command)
;; This test is inspired by Bug#39067.
(ert-deftest tramp-test32-shell-command-dont-erase-buffer ()