Refine multi-hop specs in Tramp
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 9 Nov 2016 14:34:40 +0000 (15:34 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Wed, 9 Nov 2016 14:34:40 +0000 (15:34 +0100)
* lisp/net/tramp.el (tramp-tramp-file-p): Suppress "/:" and "/c:".

* test/lisp/net/tramp-tests.el
(tramp-test01-file-name-syntax): Multi-hop specs don't need a
method.  "/h:" is allowed on non MS Windows.

lisp/net/tramp.el
test/lisp/net/tramp-tests.el

index 8a81311508fb16e0f518c90e1df7546abd458835..00ecb375c59e0b42c353b776c443bff8db42c36d 100644 (file)
@@ -1146,6 +1146,11 @@ entry does not exist, return nil."
   "Return t if NAME is a string with Tramp file name syntax."
   (save-match-data
     (and (stringp name)
+        ;; No "/:" and "/c:".  This is not covered by `tramp-file-name-regexp'.
+        (not (string-match
+              (if (memq system-type '(cygwin windows-nt))
+                  "^/[[:alpha:]]?:" "^/:")
+              name))
         (string-match tramp-file-name-regexp name))))
 
 (defun tramp-find-method (method user host)
index 5d9d3a039b6f42028cc16453aa27bcfbc44f24ed..4c3b83cdcd1a9a3266688e1d8825987e458ca655 100644 (file)
@@ -185,6 +185,8 @@ handled properly.  BODY shall not contain a timeout."
   (should (tramp-tramp-file-p "/method1:user1@host1|method2:user2@host2:"))
   (should (tramp-tramp-file-p
           "/method1:user1@host1|method2:user2@host2|method3:user3@host3:"))
+  (should (tramp-tramp-file-p "/host1|host2:"))
+  (should (tramp-tramp-file-p "/user1@host1|user2@host2:"))
 
   ;; No strings.
   (should-not (tramp-tramp-file-p nil))
@@ -193,12 +195,13 @@ handled properly.  BODY shall not contain a timeout."
   (should-not (tramp-tramp-file-p "/::"))
   (should-not (tramp-tramp-file-p "/:@:"))
   (should-not (tramp-tramp-file-p "/:[]:"))
-  ;; Multihops require a method.
-  (should-not (tramp-tramp-file-p "/host1|host2:"))
   ;; Methods or hostnames shall be at least two characters on MS Windows.
-  (when (memq system-type '(cygwin windows-nt))
-      (should-not (tramp-tramp-file-p "/c:/path/to/file"))
-      (should-not (tramp-tramp-file-p "/c::/path/to/file"))))
+  (let ((system-type 'windows-nt))
+    (should-not (tramp-tramp-file-p "/c:/path/to/file"))
+    (should-not (tramp-tramp-file-p "/c::/path/to/file")))
+  (let ((system-type 'gnu/linux))
+    (should (tramp-tramp-file-p "/h:/path/to/file"))
+    (should (tramp-tramp-file-p "/m::/path/to/file"))))
 
 (ert-deftest tramp-test02-file-name-dissect ()
   "Check remote file name components."