]> git.eshelyaron.com Git - emacs.git/commitdiff
Do not truncate /foo//bar to /bar/ in parse-colon-path
authorTino Calancha <tino.calancha@gmail.com>
Wed, 12 Aug 2020 12:53:29 +0000 (14:53 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 12 Aug 2020 14:30:17 +0000 (16:30 +0200)
* lisp/files.el (parse-colon-path): Use substitute-env-vars and
expand-file-name instead of substitute-in-file-name (Bug#21454).

lisp/files.el
test/lisp/files-tests.el

index 1909669346154def54c698047ae11c07e3f01300..9270f334afa17486786cd33daf8d7a36387cea70 100644 (file)
@@ -752,10 +752,16 @@ resulting list of directory names.  For an empty path element (i.e.,
 a leading or trailing separator, or two adjacent separators), return
 nil (meaning `default-directory') as the associated list element."
   (when (stringp search-path)
-    (mapcar (lambda (f)
-             (if (equal "" f) nil
-               (substitute-in-file-name (file-name-as-directory f))))
-           (split-string search-path path-separator))))
+    (let ((spath (substitute-env-vars search-path)))
+      (mapcar (lambda (f)
+                (if (equal "" f) nil
+                  (let ((dir (expand-file-name (file-name-as-directory f))))
+                    ;; Previous implementation used `substitute-in-file-name'
+                    ;; which collapse multiple "/" in front.  Do the same for
+                    ;; backward compatibility.
+                    (if (string-match "\\`/+" dir)
+                        (substring dir (1- (match-end 0))) dir))))
+              (split-string spath path-separator)))))
 
 (defun cd-absolute (dir)
   "Change current directory to given absolute file name DIR."
index 4b902fd82ae42510bad2249bbee0c0609ed6ccf2..5b2f5fd6f0f1dd958aff603f855a9f3c4a8b7515 100644 (file)
@@ -190,7 +190,6 @@ form.")
 
 (ert-deftest files-tests-bug-21454 ()
   "Test for https://debbugs.gnu.org/21454 ."
-  :expected-result :failed
   (let ((input-result
          '(("/foo/bar//baz/:/bar/foo/baz//" nil ("/foo/bar/baz/" "/bar/foo/baz/"))
            ("/foo/bar/:/bar/qux/:/qux/foo" nil ("/foo/bar/" "/bar/qux/" "/qux/foo/"))
@@ -1362,5 +1361,9 @@ See <https://debbugs.gnu.org/36401>."
       (normal-mode)
       (should (not (eq major-mode 'text-mode))))))
 
+(ert-deftest files-colon-path ()
+  (should (equal (parse-colon-path "/foo//bar/baz")
+                 '("/foo/bar/baz/"))))
+
 (provide 'files-tests)
 ;;; files-tests.el ends here