From: Michael Albinus Date: Sun, 14 Nov 2021 13:41:58 +0000 (+0100) Subject: Improve Tramp error handling X-Git-Tag: emacs-29.0.90~2852^2~288 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8aba549263e2660b4ac4f1026b23fbc5caef8168;p=emacs.git Improve Tramp error handling * doc/misc/tramp.texi (Frequently Asked Questions): Add another `remote-file-error'. * lisp/net/tramp.el (tramp-find-foreign-file-name-handler): Improve error handling. --- diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 819670a5088..0825e85e4d3 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -5222,6 +5222,28 @@ time being you can suppress this error by the following code in your @end lisp +@item +I get an error @samp{Remote file error: Not a valid Tramp file name +function `tramp-FOO-file-name-p'} + +@value{tramp} has changed the signature of an internal function. +External packages implementing an own @value{tramp} backend must +follow this change. Please report this problem to the author of that +package. + +For the running session, @value{tramp} disables the external package, +and you can continue to work. If you don't want to see this error +while activating @value{tramp}, you can suppress it by the same code +as above in your @file{~/.emacs}: + +@lisp +@group +(setq debug-ignored-errors + (cons 'remote-file-error debug-ignored-errors)) +@end group +@end lisp + + @item How to disable other packages from calling @value{tramp}? diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 876bbb2c545..5fcf7f9b650 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -2552,13 +2552,20 @@ Must be handled by the callers." (when (tramp-tramp-file-p filename) (let ((handler tramp-foreign-file-name-handler-alist) (vec (tramp-dissect-file-name filename)) - elt res) + elt func res) (while handler (setq elt (car handler) handler (cdr handler)) ;; Previously, this function was called with FILENAME, but now ;; it's called with the VEC. - (when (with-demoted-errors "Error: %S" (funcall (car elt) vec)) + (when (condition-case nil + (funcall (setq func (car elt)) vec) + (error + (setcar elt #'ignore) + (unless (member 'remote-file-error debug-ignored-errors) + (tramp-error + vec 'remote-file-error + "Not a valid Tramp file name function `%s'" func)))) (setq handler nil res (cdr elt)))) res)))