[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 10cd250 1/3: Fix error in Tramp loading, uncovered
From: |
Michael Albinus |
Subject: |
[Emacs-diffs] master 10cd250 1/3: Fix error in Tramp loading, uncovered by tramp-test43-* |
Date: |
Fri, 12 Oct 2018 07:42:43 -0400 (EDT) |
branch: master
commit 10cd2500afcad1c6d7ab01c8b8c336e69e9add96
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>
Fix error in Tramp loading, uncovered by tramp-test43-*
* lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-handler):
New defalias.
(tramp-register-archive-file-name-handler): Use it.
* lisp/net/tramp.el (tramp-file-name-for-operation): Change it for
`expand-file-name'.
(tramp-file-name-handler): Unset `file-name-handler-alist' when
autoloading a Tramp file name handler.
(tramp-autoload-file-name-handler): Always unload Tramp file name
handlers.
(tramp-register-file-name-handlers)
(tramp-unload-file-name-handlers): Simplify.
---
lisp/net/tramp-archive.el | 8 ++++++--
lisp/net/tramp.el | 37 ++++++++++++++++++-------------------
2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 5d7562f..bb87a83 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -332,13 +332,17 @@ pass to the OPERATION."
(tramp-archive-run-real-handler operation args)))))))
;;;###autoload
+(defalias
+ 'tramp-archive-autoload-file-name-handler 'tramp-autoload-file-name-handler)
+
+;;;###autoload
(progn (defun tramp-register-archive-file-name-handler ()
"Add archive file name handler to `file-name-handler-alist'."
(when tramp-archive-enabled
(add-to-list 'file-name-handler-alist
(cons (tramp-archive-autoload-file-name-regexp)
- 'tramp-autoload-file-name-handler))
- (put 'tramp-archive-file-name-handler 'safe-magic t))))
+ 'tramp-archive-autoload-file-name-handler))
+ (put 'tramp-archive-autoload-file-name-handler 'safe-magic t))))
;;;###autoload
(progn
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 08a2256..e629ce1 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -2138,7 +2138,7 @@ ARGS are the arguments OPERATION has been called with."
default-directory))
;; FILE DIRECTORY resp FILE1 FILE2.
((member operation
- '(add-name-to-file copy-directory copy-file expand-file-name
+ '(add-name-to-file copy-directory copy-file
file-equal-p file-in-directory-p
file-name-all-completions file-name-completion
;; Starting with Emacs 26.1, just the 2nd argument of
@@ -2152,6 +2152,13 @@ ARGS are the arguments OPERATION has been called with."
((tramp-tramp-file-p (nth 0 args)) (nth 0 args))
((tramp-tramp-file-p (nth 1 args)) (nth 1 args))
(t default-directory))))
+ ;; FILE DIRECTORY resp FILE1 FILE2.
+ ((eq operation 'expand-file-name)
+ (save-match-data
+ (cond
+ ((file-name-absolute-p (nth 0 args)) (nth 0 args))
+ ((tramp-tramp-file-p (nth 1 args)) (nth 1 args))
+ (t default-directory))))
;; START END FILE.
((eq operation 'write-region)
(if (file-name-absolute-p (nth 2 args))
@@ -2255,7 +2262,8 @@ Falls back to normal file name handler if no Tramp file
name handler exists."
;; Tramp packages locally.
(when (autoloadp sf)
(let ((default-directory
- (tramp-compat-temporary-file-directory)))
+ (tramp-compat-temporary-file-directory))
+ file-name-handler-alist)
(load (cadr sf) 'noerror 'nomessage)))
;; (tramp-message
;; v 4 "Running `%s'..." (cons operation args))
@@ -2349,10 +2357,10 @@ Falls back to normal file name handler if no Tramp file
name handler exists."
;;;###autoload
(progn (defun tramp-autoload-file-name-handler (operation &rest args)
"Load Tramp file name handler, and perform OPERATION."
+ (tramp-unload-file-name-handlers)
(if tramp-mode
(let ((default-directory temporary-file-directory))
- (load "tramp" 'noerror 'nomessage))
- (tramp-unload-file-name-handlers))
+ (load "tramp" 'noerror 'nomessage)))
(apply operation args)))
;; `tramp-autoload-file-name-handler' must be registered before
@@ -2396,15 +2404,8 @@ remote file names."
(defun tramp-register-file-name-handlers ()
"Add Tramp file name handlers to `file-name-handler-alist'."
;; Remove autoloaded handlers from file name handler alist. Useful,
- ;; if `tramp-syntax' has been changed. We cannot call
- ;; `tramp-unload-file-name-handlers', this would result in recursive
- ;; loading of Tramp.
- (dolist (fnh '(tramp-file-name-handler
- tramp-completion-file-name-handler
- tramp-archive-file-name-handler
- tramp-autoload-file-name-handler))
- (let ((a1 (rassq fnh file-name-handler-alist)))
- (setq file-name-handler-alist (delq a1 file-name-handler-alist))))
+ ;; if `tramp-syntax' has been changed.
+ (tramp-unload-file-name-handlers)
;; Add the handlers. We do not add anything to the `operations'
;; property of `tramp-file-name-handler' and
@@ -2479,12 +2480,10 @@ Add operations defined in `HANDLER-alist' to
`tramp-file-name-handler'."
;;;###autoload
(progn (defun tramp-unload-file-name-handlers ()
"Unload Tramp file name handlers from `file-name-handler-alist'."
- (dolist (fnh '(tramp-file-name-handler
- tramp-completion-file-name-handler
- tramp-archive-file-name-handler
- tramp-autoload-file-name-handler))
- (let ((a1 (rassq fnh file-name-handler-alist)))
- (setq file-name-handler-alist (delq a1 file-name-handler-alist))))))
+ (dolist (fnh file-name-handler-alist)
+ (when (and (symbolp (cdr fnh))
+ (string-prefix-p "tramp-" (symbol-name (cdr fnh))))
+ (setq file-name-handler-alist (delq fnh file-name-handler-alist))))))
(add-hook 'tramp-unload-hook 'tramp-unload-file-name-handlers)