diff options
| author | Philipp Stephani | 2017-03-03 18:36:08 +0100 |
|---|---|---|
| committer | Philipp Stephani | 2017-04-04 11:37:10 +0200 |
| commit | f4b50dad8d5eade04f495c693c0bca46060b25cb (patch) | |
| tree | 0738ac90a39540d2d2affc066ce625471e3c0298 | |
| parent | 2c68192c6b029bb839193c81cf2a16dad26305c6 (diff) | |
| download | emacs-f4b50dad8d5eade04f495c693c0bca46060b25cb.tar.gz emacs-f4b50dad8d5eade04f495c693c0bca46060b25cb.zip | |
Make ediff handle remote and quoted file names
Quoted file names need to be unquoted before passed to
subprocesses (Bug#25950).
* lisp/vc/ediff-diff.el (ediff-exec-process): Handle remote and quoted
file names.
* test/lisp/vc/ediff-diff-tests.el
(ediff-diff-tests--ediff-exec-process--quoted-file): Add unit test.
| -rw-r--r-- | lisp/vc/ediff-diff.el | 6 | ||||
| -rw-r--r-- | test/lisp/vc/ediff-diff-tests.el | 44 |
2 files changed, 49 insertions, 1 deletions
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el index 37f22340d71..cfa08ef3604 100644 --- a/lisp/vc/ediff-diff.el +++ b/lisp/vc/ediff-diff.el | |||
| @@ -1149,7 +1149,11 @@ delimiter regions")) | |||
| 1149 | ediff-coding-system-for-write | 1149 | ediff-coding-system-for-write |
| 1150 | ediff-coding-system-for-read)) | 1150 | ediff-coding-system-for-read)) |
| 1151 | args) | 1151 | args) |
| 1152 | (setq args (append (split-string options) files)) | 1152 | (setq args (append (split-string options) |
| 1153 | (mapcar (lambda (file) | ||
| 1154 | (file-name-unquote | ||
| 1155 | (or (file-local-copy file) file))) | ||
| 1156 | files))) | ||
| 1153 | (setq args (delete "" (delq nil args))) ; delete nil and "" from arguments | 1157 | (setq args (delete "" (delq nil args))) ; delete nil and "" from arguments |
| 1154 | ;; the --binary option, if present, should be used only for buffer jobs | 1158 | ;; the --binary option, if present, should be used only for buffer jobs |
| 1155 | ;; or for refining the differences | 1159 | ;; or for refining the differences |
diff --git a/test/lisp/vc/ediff-diff-tests.el b/test/lisp/vc/ediff-diff-tests.el new file mode 100644 index 00000000000..aacc8bfed2b --- /dev/null +++ b/test/lisp/vc/ediff-diff-tests.el | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | ;;; ediff-diff-tests.el --- Unit tests for ediff-diff.el -*- lexical-binding: t; -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2017 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Author: Philipp Stephani <phst@google.com> | ||
| 6 | |||
| 7 | ;; This file is part of GNU Emacs. | ||
| 8 | |||
| 9 | ;; GNU Emacs is free software: you can redistribute it and/or modify | ||
| 10 | ;; it under the terms of the GNU General Public License as published by | ||
| 11 | ;; the Free Software Foundation, either version 3 of the License, or | ||
| 12 | ;; (at your option) any later version. | ||
| 13 | |||
| 14 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 15 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | ;; GNU General Public License for more details. | ||
| 18 | |||
| 19 | ;; You should have received a copy of the GNU General Public License | ||
| 20 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | ||
| 21 | |||
| 22 | ;;; Commentary: | ||
| 23 | |||
| 24 | ;; Unit tests for lisp/vc/ediff-diff.el. | ||
| 25 | |||
| 26 | ;;; Code: | ||
| 27 | |||
| 28 | (require 'ediff-diff) | ||
| 29 | |||
| 30 | (require 'cl-lib) | ||
| 31 | (require 'ert) | ||
| 32 | |||
| 33 | (ert-deftest ediff-diff-tests--ediff-exec-process--quoted-file () | ||
| 34 | "Check that Bug#25950 is fixed." | ||
| 35 | (cl-letf* ((call-process-args ()) | ||
| 36 | ((symbol-function #'call-process) | ||
| 37 | (lambda (&rest args) (push args call-process-args) 0))) | ||
| 38 | (with-temp-buffer | ||
| 39 | (ediff-exec-process "diff" (current-buffer) :synchronous "" | ||
| 40 | "/:/a" "/:/b") | ||
| 41 | (should (equal call-process-args | ||
| 42 | `(("diff" nil ,(current-buffer) nil "/a" "/b"))))))) | ||
| 43 | |||
| 44 | ;;; ediff-diff-tests.el ends here | ||