diff options
author | Philipp Stephani <phst@google.com> | 2017-03-03 18:36:08 +0100 |
---|---|---|
committer | Philipp Stephani <phst@google.com> | 2017-04-04 11:37:10 +0200 |
commit | f4b50dad8d5eade04f495c693c0bca46060b25cb (patch) | |
tree | 0738ac90a39540d2d2affc066ce625471e3c0298 | |
parent | 2c68192c6b029bb839193c81cf2a16dad26305c6 (diff) | |
download | emacs-f4b50dad8d5eade04f495c693c0bca46060b25cb.tar.gz |
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")) ediff-coding-system-for-write ediff-coding-system-for-read)) args) - (setq args (append (split-string options) files)) + (setq args (append (split-string options) + (mapcar (lambda (file) + (file-name-unquote + (or (file-local-copy file) file))) + files))) (setq args (delete "" (delq nil args))) ; delete nil and "" from arguments ;; the --binary option, if present, should be used only for buffer jobs ;; 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 @@ +;;; ediff-diff-tests.el --- Unit tests for ediff-diff.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2017 Free Software Foundation, Inc. + +;; Author: Philipp Stephani <phst@google.com> + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Unit tests for lisp/vc/ediff-diff.el. + +;;; Code: + +(require 'ediff-diff) + +(require 'cl-lib) +(require 'ert) + +(ert-deftest ediff-diff-tests--ediff-exec-process--quoted-file () + "Check that Bug#25950 is fixed." + (cl-letf* ((call-process-args ()) + ((symbol-function #'call-process) + (lambda (&rest args) (push args call-process-args) 0))) + (with-temp-buffer + (ediff-exec-process "diff" (current-buffer) :synchronous "" + "/:/a" "/:/b") + (should (equal call-process-args + `(("diff" nil ,(current-buffer) nil "/a" "/b"))))))) + +;;; ediff-diff-tests.el ends here |