Fix Bug#29163

* lisp/net/tramp.el (tramp-autoload-file-name-regexp):
Do not use "\\'" in regexp.  (Bug#29163)
(top) Do not run (tramp-register-autoload-file-name-handlers)
when loading tramp.el.

* test/lisp/net/tramp-tests.el (tramp--test-mock-p): New defun.
(tramp-test32-environment-variables-and-port-numbers)
(tramp-test41-asynchronous-requests): Use it.
(tramp-test42-auto-load): New test.
(tramp-test43-recursive-load, tramp-test44-remote-load-path)
(tramp-test45-delay-load, tramp-test46-unload): Rename.
This commit is contained in:
Michael Albinus 2017-11-27 13:31:53 +01:00
parent ac64fdb248
commit 06d05fec84
2 changed files with 35 additions and 14 deletions

View file

@ -1055,7 +1055,7 @@ Also see `tramp-file-name-structure'.")
"\\(-\\|[^/|:]\\{2,\\}\\)" "\\(-\\|[^/|:]\\{2,\\}\\)"
;; At least one character for method. ;; At least one character for method.
"[^/|:]+") "[^/|:]+")
":\\'") ":")
"Regular expression matching file names handled by Tramp autoload. "Regular expression matching file names handled by Tramp autoload.
It must match the initial `tramp-syntax' settings. It should not It must match the initial `tramp-syntax' settings. It should not
match file names at root of the underlying local file system, match file names at root of the underlying local file system,
@ -2323,8 +2323,7 @@ Falls back to normal file name handler if no Tramp file name handler exists."
'tramp-autoload-file-name-handler)) 'tramp-autoload-file-name-handler))
(put 'tramp-autoload-file-name-handler 'safe-magic t))) (put 'tramp-autoload-file-name-handler 'safe-magic t)))
;;;###autoload ;;;###autoload (tramp-register-autoload-file-name-handlers)
(tramp-register-autoload-file-name-handlers)
(defun tramp-use-absolute-autoload-file-names () (defun tramp-use-absolute-autoload-file-names ()
"Change Tramp autoload objects to use absolute file names. "Change Tramp autoload objects to use absolute file names.

View file

@ -3627,11 +3627,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-enabled))
;; We test it only for the mock-up connection; otherwise there might ;; We test it only for the mock-up connection; otherwise there might
;; be problems with the used ports. ;; be problems with the used ports.
(skip-unless (skip-unless (and (eq tramp-syntax 'default)
(and (tramp--test-mock-p)))
(eq tramp-syntax 'default)
(string-equal
"mock" (file-remote-p tramp-test-temporary-file-directory 'method))))
;; We force a reconnect, in order to have a clean environment. ;; We force a reconnect, in order to have a clean environment.
(dolist (dir `(,tramp-test-temporary-file-directory (dolist (dir `(,tramp-test-temporary-file-directory
@ -4041,6 +4038,12 @@ Several special characters do not work properly there."
(file-truename tramp-test-temporary-file-directory) nil (file-truename tramp-test-temporary-file-directory) nil
(string-match "^HP-UX" (tramp-get-connection-property v "uname" "")))) (string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
(defun tramp--test-mock-p ()
"Check, whether the mock method is used.
This does not support external Emacs calls."
(string-equal
"mock" (file-remote-p tramp-test-temporary-file-directory 'method)))
(defun tramp--test-rsync-p () (defun tramp--test-rsync-p ()
"Check, whether the rsync method is used. "Check, whether the rsync method is used.
This does not support special file names." This does not support special file names."
@ -4495,8 +4498,7 @@ process sentinels. They shall not disturb each other."
;; We must distinguish due to performance reasons. ;; We must distinguish due to performance reasons.
(timer-operation (timer-operation
(cond (cond
((string-equal "mock" (file-remote-p tmp-name 'method)) ((tramp--test-mock-p) 'vc-registered)
'vc-registered)
(t 'file-attributes))) (t 'file-attributes)))
timer buffers kill-buffer-query-functions) timer buffers kill-buffer-query-functions)
@ -4604,7 +4606,27 @@ process sentinels. They shall not disturb each other."
(ignore-errors (cancel-timer timer)) (ignore-errors (cancel-timer timer))
(ignore-errors (delete-directory tmp-name 'recursive)))))) (ignore-errors (delete-directory tmp-name 'recursive))))))
(ert-deftest tramp-test42-recursive-load () (ert-deftest tramp-test42-auto-load ()
"Check that Tramp autoloads properly."
(skip-unless (tramp--test-enabled))
(skip-unless (not (tramp--test-mock-p)))
(let ((default-directory (expand-file-name temporary-file-directory)))
(let ((code
(format
"(message \"Tramp loaded: %%s\" (consp (file-attributes \"%s\")))"
tramp-test-temporary-file-directory)))
(should
(string-match
"Tramp loaded: t[\n\r]+"
(shell-command-to-string
(format
"%s -batch -Q -L %s --eval %s"
(expand-file-name invocation-name invocation-directory)
(mapconcat 'shell-quote-argument load-path " -L ")
(shell-quote-argument code))))))))
(ert-deftest tramp-test43-recursive-load ()
"Check that Tramp does not fail due to recursive load." "Check that Tramp does not fail due to recursive load."
(skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-enabled))
@ -4627,7 +4649,7 @@ process sentinels. They shall not disturb each other."
(mapconcat 'shell-quote-argument load-path " -L ") (mapconcat 'shell-quote-argument load-path " -L ")
(shell-quote-argument code)))))))) (shell-quote-argument code))))))))
(ert-deftest tramp-test43-remote-load-path () (ert-deftest tramp-test44-remote-load-path ()
"Check that Tramp autoloads its packages with remote `load-path'." "Check that Tramp autoloads its packages with remote `load-path'."
;; `tramp-cleanup-all-connections' is autoloaded from tramp-cmds.el. ;; `tramp-cleanup-all-connections' is autoloaded from tramp-cmds.el.
;; It shall still work, when a remote file name is in the ;; It shall still work, when a remote file name is in the
@ -4650,7 +4672,7 @@ process sentinels. They shall not disturb each other."
(mapconcat 'shell-quote-argument load-path " -L ") (mapconcat 'shell-quote-argument load-path " -L ")
(shell-quote-argument code))))))) (shell-quote-argument code)))))))
(ert-deftest tramp-test44-delay-load () (ert-deftest tramp-test45-delay-load ()
"Check that Tramp is loaded lazily, only when needed." "Check that Tramp is loaded lazily, only when needed."
;; Tramp is neither loaded at Emacs startup, nor when completing a ;; Tramp is neither loaded at Emacs startup, nor when completing a
;; non-Tramp file name like "/foo". Completing a Tramp-alike file ;; non-Tramp file name like "/foo". Completing a Tramp-alike file
@ -4677,7 +4699,7 @@ process sentinels. They shall not disturb each other."
(mapconcat 'shell-quote-argument load-path " -L ") (mapconcat 'shell-quote-argument load-path " -L ")
(shell-quote-argument (format code tm))))))))) (shell-quote-argument (format code tm)))))))))
(ert-deftest tramp-test45-unload () (ert-deftest tramp-test46-unload ()
"Check that Tramp and its subpackages unload completely. "Check that Tramp and its subpackages unload completely.
Since it unloads Tramp, it shall be the last test to run." Since it unloads Tramp, it shall be the last test to run."
:tags '(:expensive-test) :tags '(:expensive-test)