aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorNoam Postavsky2018-01-25 00:37:50 -0500
committerNoam Postavsky2018-02-01 20:14:57 -0500
commit65da409e411a0cdfa1932d21ce8a7f87ceae9e25 (patch)
tree68a00f5d7729d840351861b0d454c74c1867bc65 /lisp
parent100e33979b139c007c45f0fd339a76e5a7ef494a (diff)
downloademacs-65da409e411a0cdfa1932d21ce8a7f87ceae9e25.tar.gz
emacs-65da409e411a0cdfa1932d21ce8a7f87ceae9e25.zip
Test and fix "/:" quoted file name handlers (Bug#30243)
Some w32 specific problems were discovered, but only worked around, as these are not serious, and not the focus of this bug fix: - The w32 implementation of `insert-directory doesn't handle a nil SWITCHES argument. - `dired-compress-file' does not operate correctly if the unquoted filename contains a ":" (e.g., C:/foo/bar). * lisp/files.el (file-name-non-special): Strip the "/:" from `default-directory' for `temporary-file-directory' operation; both arguments to `file-name-completion', `file-name-all-completion', and `file-equal-p' operations; `buffer-file-name' for `make-auto-save-file-name' and 'set-visited-file-modtime' operations. Don't touch any operands of `file-notify-rm-watch' and `file-notify-valid-p' as they receive descriptors; not file names (this is not sufficient to fix these operations for "/:" quoted file names though, these are fixed in a later commit). * test/lisp/files-tests.el (files-tests--with-temp-file): Give it a `debug' property. (files-tests--with-temp-non-special): New helper macro. (files-tests--file-name-non-special--subprocess): Simplify. (files-tests-file-name-non-special-quote-unquote) (files-file-name-non-special-notify-handlers) (files-file-name-non-special-handlers) (files-tests-file-name-non-special-access-file) (files-tests-file-name-non-special-add-name-to-file) (files-tests-file-name-non-special-byte-compiler-base-file-name) (files-tests-file-name-non-special-copy-directory) (files-tests-file-name-non-special-copy-file) (files-tests-file-name-non-special-delete-directory) (files-tests-file-name-non-special-delete-file) (files-tests-file-name-non-special-diff-latest-backup-file) (files-tests-file-name-non-special-directory-file-name) (files-tests-file-name-non-special-directory-files) (files-tests-file-name-non-special-directory-files-and-attributes) (files-tests-file-name-non-special-dired-uncache) (files-tests-file-name-non-special-dired-compress-handler) (files-tests-file-name-non-special-expand-file-name) (files-tests-file-name-non-special-file-accessible-directory-p) (files-tests-file-name-non-special-file-acl) (files-tests-file-name-non-special-file-attributes) (files-tests-file-name-non-special-file-directory-p) (files-tests-file-name-non-special-file-equal-p) (files-tests-file-name-non-special-file-executable-p) (files-tests-file-name-non-special-file-exists-p) (files-tests-file-name-non-special-file-in-directory-p) (files-tests-file-name-non-special-file-local-copy) (files-tests-file-name-non-special-file-modes) (files-tests-file-name-non-special-file-name-all-completions) (files-tests-file-name-non-special-file-name-as-directory) (files-tests-file-name-non-special-file-name-case-insensitive-p) (files-tests-file-name-non-special-file-name-completion) (files-tests-file-name-non-special-file-name-directory) (files-tests-file-name-non-special-file-name-nondirectory) (files-tests-file-name-non-special-file-name-sans-versions) (files-tests-file-name-non-special-file-newer-than-file-p) (files-tests-file-name-non-special-file-ownership-preserved-p) (files-tests-file-name-non-special-file-readable-p) (files-tests-file-name-non-special-file-regular-p) (files-tests-file-name-non-special-file-remote-p) (files-tests-file-name-non-special-file-selinux-context) (files-tests-file-name-non-special-file-symlink-p) (files-tests-file-name-non-special-file-truename) (files-tests-file-name-non-special-file-writable-p) (files-tests-file-name-non-special-find-backup-file-name) (files-tests-file-name-non-special-get-file-buffer) (files-tests-file-name-non-special-insert-directory) (files-tests-file-name-non-special-insert-file-contents) (files-tests-file-name-non-special-load) (files-tests-file-name-non-special-make-auto-save-file-name) (files-tests-file-name-non-special-make-directory) (files-tests-file-name-non-special-make-directory-internal) (files-tests-file-name-non-special-make-nearby-temp-file) (files-tests-file-name-non-special-make-symbolic-link) (files-tests-file-name-non-special-rename-file) (files-tests-file-name-non-special-set-file-acl) (files-tests-file-name-non-special-set-file-modes) (files-tests-file-name-non-special-set-file-selinux-context) (files-tests-file-name-non-special-set-file-times) (files-tests-file-name-non-special-set-visited-file-modtime) (files-tests-file-name-non-special-shell-command) (files-tests-file-name-non-special-start-file-process) (files-tests-file-name-non-special-substitute-in-file-name) (files-tests-file-name-non-special-temporary-file-directory) (files-tests-file-name-non-special-unhandled-file-name-directory) (files-tests-file-name-non-special-vc-registered) (files-tests-file-name-non-special-write-region): New tests.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/files.el22
1 files changed, 18 insertions, 4 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 75d3b7b1e72..e884a3acc18 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -6998,7 +6998,7 @@ only these files will be asked to be saved."
6998 ;; Bug#25949. 6998 ;; Bug#25949.
6999 (if (memq operation 6999 (if (memq operation
7000 '(insert-directory process-file start-file-process 7000 '(insert-directory process-file start-file-process
7001 shell-command)) 7001 shell-command temporary-file-directory))
7002 (directory-file-name 7002 (directory-file-name
7003 (expand-file-name 7003 (expand-file-name
7004 (unhandled-file-name-directory default-directory))) 7004 (unhandled-file-name-directory default-directory)))
@@ -7022,15 +7022,23 @@ only these files will be asked to be saved."
7022 ;; temporarily to unquoted filename. 7022 ;; temporarily to unquoted filename.
7023 (verify-visited-file-modtime unquote-then-quote) 7023 (verify-visited-file-modtime unquote-then-quote)
7024 ;; List the arguments which are filenames. 7024 ;; List the arguments which are filenames.
7025 (file-name-completion 1) 7025 (file-name-completion 0 1)
7026 (file-name-all-completions 1) 7026 (file-name-all-completions 0 1)
7027 (file-equal-p 0 1)
7028 (file-newer-than-file-p 0 1)
7027 (write-region 2 5) 7029 (write-region 2 5)
7028 (rename-file 0 1) 7030 (rename-file 0 1)
7029 (copy-file 0 1) 7031 (copy-file 0 1)
7030 (copy-directory 0 1) 7032 (copy-directory 0 1)
7031 (file-in-directory-p 0 1) 7033 (file-in-directory-p 0 1)
7032 (make-symbolic-link 0 1) 7034 (make-symbolic-link 0 1)
7033 (add-name-to-file 0 1)))) 7035 (add-name-to-file 0 1)
7036 (make-auto-save-file-name buffer-file-name)
7037 (set-visited-file-modtime buffer-file-name)
7038 ;; These file-notify-* operations take a
7039 ;; descriptor.
7040 (file-notify-rm-watch . nil)
7041 (file-notify-valid-p . nil))))
7034 ;; For all other operations, treat the first argument only 7042 ;; For all other operations, treat the first argument only
7035 ;; as the file name. 7043 ;; as the file name.
7036 '(nil 0)))) 7044 '(nil 0))))
@@ -7053,6 +7061,12 @@ only these files will be asked to be saved."
7053 (pcase method 7061 (pcase method
7054 (`identity (car arguments)) 7062 (`identity (car arguments))
7055 (`add (file-name-quote (apply operation arguments))) 7063 (`add (file-name-quote (apply operation arguments)))
7064 (`buffer-file-name
7065 (let ((buffer-file-name
7066 (if (string-match "\\`/:" buffer-file-name)
7067 (substring buffer-file-name (match-end 0))
7068 buffer-file-name)))
7069 (apply operation arguments)))
7056 (`insert-file-contents 7070 (`insert-file-contents
7057 (let ((visit (nth 1 arguments))) 7071 (let ((visit (nth 1 arguments)))
7058 (unwind-protect 7072 (unwind-protect