diff options
| author | Noam Postavsky | 2018-01-25 00:37:50 -0500 |
|---|---|---|
| committer | Noam Postavsky | 2018-02-01 20:14:57 -0500 |
| commit | 65da409e411a0cdfa1932d21ce8a7f87ceae9e25 (patch) | |
| tree | 68a00f5d7729d840351861b0d454c74c1867bc65 /lisp | |
| parent | 100e33979b139c007c45f0fd339a76e5a7ef494a (diff) | |
| download | emacs-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.el | 22 |
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 |