From cc70501a3a77e2cb8649eee0f0c03689e8232a68 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 26 Apr 2019 12:31:50 +0200 Subject: [PATCH] Handle quoted file names in tramp-archive.el * lisp/net/tramp-archive.el (tramp-archive-file-name-p): Suppress quoted file names. (tramp-archive-file-name-handler): Handle quoted file names. * lisp/net/tramp-compat.el (tramp-compat-file-name-quoted-p): Add optional TOP argument. --- lisp/net/tramp-archive.el | 11 +++++++---- lisp/net/tramp-compat.el | 7 ++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index ba4c26cdf2f..b096edc4b36 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -318,10 +318,11 @@ pass to the OPERATION." operation args)) (archive (tramp-archive-file-name-archive filename))) - ;; The file archive could be a directory, see Bug#30293. - (if (and archive - (tramp-archive-run-real-handler - #'file-directory-p (list archive))) + ;; `filename' could be a quoted file name. Or the file + ;; archive could be a directory, see Bug#30293. + (if (or (null archive) + (tramp-archive-run-real-handler + #'file-directory-p (list archive))) (tramp-archive-run-real-handler operation args) ;; Now run the handler. (let ((tramp-methods (cons `(,tramp-archive-method) tramp-methods)) @@ -384,6 +385,8 @@ pass to the OPERATION." (defun tramp-archive-file-name-p (name) "Return t if NAME is a string with archive file name syntax." (and (stringp name) + ;; `tramp-archive-file-name-regexp' does not suppress quoted file names. + (not (tramp-compat-file-name-quoted-p name t)) ;; We cannot use `string-match-p', the matches are used. (string-match tramp-archive-file-name-regexp name) t)) diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index e3d03435691..ae743b2507c 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -198,10 +198,11 @@ It returns a file name which can be used directly as argument of (if (fboundp 'file-name-quoted-p) (defalias 'tramp-compat-file-name-quoted-p #'file-name-quoted-p) - (defsubst tramp-compat-file-name-quoted-p (name) + (defsubst tramp-compat-file-name-quoted-p (name &optional top) "Whether NAME is quoted with prefix \"/:\". -If NAME is a remote file name, check the local part of NAME." - (string-prefix-p "/:" (tramp-compat-file-local-name name)))) +If NAME is a remote file name and TOP is nil, check the local part of NAME." + (let ((file-name-handler-alist (unless top file-name-handler-alist))) + (string-prefix-p "/:" (tramp-compat-file-local-name name))))) (if (fboundp 'file-name-quote) (defalias 'tramp-compat-file-name-quote #'file-name-quote) -- 2.39.2