mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Add remote processes to Tramp sshfs method
* doc/misc/tramp.texi (FUSE setup): Method sshfs supports also remote processes. * lisp/net/tramp-cache.el (tramp-get-file-property) (tramp-set-file-property): Move setting of `tramp-cache-unload-hook' out of function. * lisp/net/tramp.el (tramp-expand-args): New defun. (tramp-handle-make-process): * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band) (tramp-maybe-open-connection): * lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-send-command): Use it. * lisp/net/tramp-sshfs.el (tramp-methods) <sshfs>: Adapt `tramp-mount-args'. Add `tramp-login-args', `tramp-direct-async', `tramp-remote-shell', `tramp-remote-shell-login' and `tramp-remote-shell-args'. (tramp-connection-properties): Set "direct-async-process" fir sshfs. (tramp-sshfs-file-name-handler-alist): Add `exec-path', `make-process', `process-file', `set-file-modes', `shell-command', `start-file-process', `tramp-get-remote-gid', `tramp-get-remote-uid' and `tramp-set-file-uid-gid'. (tramp-sshfs-handle-exec-path, tramp-sshfs-handle-process-file) (tramp-sshfs-handle-set-file-modes): New defuns. * test/lisp/net/tramp-tests.el (tramp-test20-file-modes) (tramp-test28-process-file, tramp-test29-start-file-process) (tramp-test30-make-process, tramp-test32-shell-command) (tramp-test32-shell-command-dont-erase-buffer) (tramp-test34-explicit-shell-file-name, tramp-test35-exec-path) (tramp-test43-asynchronous-requests): Run also for tramp-sshfs. (tramp--test-shell-file-name): New defun. (tramp-test28-process-file) (tramp-test34-explicit-shell-file-name) (tramp-test43-asynchronous-requests): Use it. (tramp-test40-special-characters-with-stat) (tramp-test40-special-characters-with-perl) (tramp-test40-special-characters-with-ls) (tramp-test41-utf8-with-stat, tramp-test41-utf8-with-perl) (tramp-test41-utf8-with-ls): Remove superfluous skip.
This commit is contained in:
parent
62610da8c4
commit
65441a6fab
7 changed files with 226 additions and 199 deletions
|
|
@ -3537,7 +3537,7 @@ They might differ only in time attributes or directory size."
|
|||
This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless
|
||||
(or (tramp--test-sh-p) (tramp--test-sudoedit-p)
|
||||
(or (tramp--test-sh-p) (tramp--test-sshfs-p) (tramp--test-sudoedit-p)
|
||||
;; Not all tramp-gvfs.el methods support changing the file mode.
|
||||
(and
|
||||
(tramp--test-gvfs-p)
|
||||
|
|
@ -4368,11 +4368,15 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
|
|||
(and (featurep 'tramp-test-load) (unload-feature 'tramp-test-load))
|
||||
(delete-file tmp-name))))))
|
||||
|
||||
(defun tramp--test-shell-file-name ()
|
||||
"Return default remote shell.."
|
||||
(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
|
||||
|
||||
(ert-deftest tramp-test28-process-file ()
|
||||
"Check `process-file'."
|
||||
:tags '(:expensive-test)
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
|
||||
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
|
||||
|
|
@ -4389,25 +4393,27 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
|
|||
(should-not (zerop (process-file "binary-does-not-exist")))
|
||||
;; Return exit code.
|
||||
(should (= 42 (process-file
|
||||
(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh")
|
||||
(tramp--test-shell-file-name)
|
||||
nil nil nil "-c" "exit 42")))
|
||||
;; Return exit code in case the process is interrupted,
|
||||
;; and there's no indication for a signal describing string.
|
||||
(let (process-file-return-signal-string)
|
||||
(should
|
||||
(= (+ 128 2)
|
||||
(process-file
|
||||
(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh")
|
||||
nil nil nil "-c" "kill -2 $$"))))
|
||||
(unless (tramp--test-sshfs-p)
|
||||
(let (process-file-return-signal-string)
|
||||
(should
|
||||
(= (+ 128 2)
|
||||
(process-file
|
||||
(tramp--test-shell-file-name)
|
||||
nil nil nil "-c" "kill -2 $$")))))
|
||||
;; Return string in case the process is interrupted and
|
||||
;; there's an indication for a signal describing string.
|
||||
(let ((process-file-return-signal-string t))
|
||||
(should
|
||||
(string-match-p
|
||||
"Interrupt\\|Signal 2"
|
||||
(process-file
|
||||
(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh")
|
||||
nil nil nil "-c" "kill -2 $$"))))
|
||||
(unless (tramp--test-sshfs-p)
|
||||
(let ((process-file-return-signal-string t))
|
||||
(should
|
||||
(string-match-p
|
||||
"Interrupt\\|Signal 2"
|
||||
(process-file
|
||||
(tramp--test-shell-file-name)
|
||||
nil nil nil "-c" "kill -2 $$")))))
|
||||
|
||||
(with-temp-buffer
|
||||
(write-region "foo" nil tmp-name)
|
||||
|
|
@ -4451,7 +4457,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
|
|||
"Check `start-file-process'."
|
||||
:tags '(:expensive-test)
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
|
||||
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
|
||||
|
|
@ -4571,7 +4577,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
|
|||
"Check `make-process'."
|
||||
:tags '(:expensive-test)
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
;; `make-process' supports file name handlers since Emacs 27.
|
||||
(skip-unless (tramp--test-emacs27-p))
|
||||
|
|
@ -4799,7 +4805,7 @@ INPUT, if non-nil, is a string sent to the process."
|
|||
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
|
||||
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
|
||||
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
|
||||
(tramp--test-sh-p)))
|
||||
(tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
|
||||
(dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
|
||||
|
|
@ -4898,7 +4904,7 @@ INPUT, if non-nil, is a string sent to the process."
|
|||
:tags '(:expensive-test :unstable)
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless nil)
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
;; Prior Emacs 27, `shell-command-dont-erase-buffer' wasn't working properly.
|
||||
(skip-unless (tramp--test-emacs27-p))
|
||||
|
|
@ -5223,7 +5229,7 @@ Use direct async.")
|
|||
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
|
||||
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
|
||||
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
|
||||
(tramp--test-sh-p)))
|
||||
(tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
;; Since Emacs 26.1.
|
||||
(skip-unless (and (fboundp 'connection-local-set-profile-variables)
|
||||
|
|
@ -5245,8 +5251,7 @@ Use direct async.")
|
|||
(with-no-warnings
|
||||
(connection-local-set-profile-variables
|
||||
'remote-sh
|
||||
`((explicit-shell-file-name
|
||||
. ,(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
|
||||
`((explicit-shell-file-name . ,(tramp--test-shell-file-name))
|
||||
(explicit-sh-args . ("-c" "echo foo"))))
|
||||
(connection-local-set-profiles
|
||||
`(:application tramp
|
||||
|
|
@ -5280,7 +5285,7 @@ Use direct async.")
|
|||
(ert-deftest tramp-test35-exec-path ()
|
||||
"Check `exec-path' and `executable-find'."
|
||||
(skip-unless (tramp--test-enabled))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p)))
|
||||
(skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
;; Since Emacs 27.1.
|
||||
(skip-unless (fboundp 'exec-path))
|
||||
|
|
@ -6120,7 +6125,6 @@ Use the `stat' command."
|
|||
(skip-unless (tramp--test-sh-p))
|
||||
(skip-unless (not (tramp--test-rsync-p)))
|
||||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
;; We cannot use `tramp-test-vec', because this fails during compilation.
|
||||
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
|
||||
(skip-unless (tramp-get-remote-stat v)))
|
||||
|
|
@ -6140,7 +6144,6 @@ Use the `perl' command."
|
|||
(skip-unless (tramp--test-sh-p))
|
||||
(skip-unless (not (tramp--test-rsync-p)))
|
||||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
;; We cannot use `tramp-test-vec', because this fails during compilation.
|
||||
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
|
||||
(skip-unless (tramp-get-remote-perl v)))
|
||||
|
|
@ -6163,7 +6166,6 @@ Use the `ls' command."
|
|||
(skip-unless (tramp--test-sh-p))
|
||||
(skip-unless (not (tramp--test-rsync-p)))
|
||||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
|
||||
(let ((tramp-connection-properties
|
||||
(append
|
||||
|
|
@ -6249,7 +6251,6 @@ Use the `stat' command."
|
|||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (not (tramp--test-ksh-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
;; We cannot use `tramp-test-vec', because this fails during compilation.
|
||||
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
|
||||
(skip-unless (tramp-get-remote-stat v)))
|
||||
|
|
@ -6273,7 +6274,6 @@ Use the `perl' command."
|
|||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (not (tramp--test-ksh-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
;; We cannot use `tramp-test-vec', because this fails during compilation.
|
||||
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
|
||||
(skip-unless (tramp-get-remote-perl v)))
|
||||
|
|
@ -6300,7 +6300,6 @@ Use the `ls' command."
|
|||
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
|
||||
(skip-unless (not (tramp--test-ksh-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
|
||||
|
||||
(let ((tramp-connection-properties
|
||||
(append
|
||||
|
|
@ -6341,6 +6340,7 @@ Use the `ls' command."
|
|||
"Set \"process-name\" and \"process-buffer\" connection properties.
|
||||
The values are derived from PROC. Run BODY.
|
||||
This is needed in timer functions as well as process filters and sentinels."
|
||||
;; FIXME: For tramp-sshfs.el, `processp' does not work.
|
||||
(declare (indent 1) (debug (processp body)))
|
||||
`(let* ((v (tramp-get-connection-property ,proc "vector" nil))
|
||||
(pname (tramp-get-connection-property v "process-name" nil))
|
||||
|
|
@ -6380,7 +6380,7 @@ process sentinels. They shall not disturb each other."
|
|||
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
|
||||
;; remote processes in Emacs. That doesn't work for tramp-adb.el.
|
||||
(skip-unless (or (and (tramp--test-adb-p) (tramp--test-emacs27-p))
|
||||
(tramp--test-sh-p)))
|
||||
(tramp--test-sh-p) (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-crypt-p)))
|
||||
(skip-unless (not (tramp--test-docker-p)))
|
||||
(skip-unless (not (tramp--test-windows-nt-p)))
|
||||
|
|
@ -6390,7 +6390,7 @@ process sentinels. They shall not disturb each other."
|
|||
(define-key special-event-map [sigusr1] #'tramp--test-timeout-handler)
|
||||
(let* (;; For the watchdog.
|
||||
(default-directory (expand-file-name temporary-file-directory))
|
||||
(shell-file-name (if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
|
||||
(shell-file-name (tramp--test-shell-file-name))
|
||||
;; It doesn't work on w32 systems.
|
||||
(watchdog
|
||||
(start-process-shell-command
|
||||
|
|
@ -6765,8 +6765,8 @@ If INTERACTIVE is non-nil, the tests are run interactively."
|
|||
;; * Work on skipped tests. Make a comment, when it is impossible.
|
||||
;; * Revisit expensive tests, once problems in `tramp-error' are solved.
|
||||
;; * Fix `tramp-test06-directory-file-name' for `ftp'.
|
||||
;; * Implement `tramp-test31-interrupt-process' for `adb' and for
|
||||
;; direct async processes.
|
||||
;; * Implement `tramp-test31-interrupt-process' for `adb', `sshfs' and
|
||||
;; for direct async processes.
|
||||
|
||||
(provide 'tramp-tests)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue