* 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.
(cherry picked from commit
91509d5d2a2dc818830cff63f13d6efcb229dc0c)
;; 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
: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
(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))
?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.
;; 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
;; 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))))))
(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 ()