]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle quoted file names in tramp-archive.el
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 26 Apr 2019 10:31:50 +0000 (12:31 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 26 Apr 2019 10:31:50 +0000 (12:31 +0200)
* 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
lisp/net/tramp-compat.el

index ba4c26cdf2fdf3a773390907364e91d901f8bdfb..b096edc4b3608d247bbe2d68ff9b3a2a9e3de2d3 100644 (file)
@@ -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))
index e3d034356917d75a61be23e849fd0560ca901c2f..ae743b2507c77afc4b10756c6bded003a8d4a6ec 100644 (file)
@@ -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)