emacs-diffs
[Top][All Lists]
Advanced

[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)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]