From f4b50dad8d5eade04f495c693c0bca46060b25cb Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Fri, 3 Mar 2017 18:36:08 +0100 Subject: [PATCH] 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. --- lisp/vc/ediff-diff.el | 6 +++++- test/lisp/vc/ediff-diff-tests.el | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 test/lisp/vc/ediff-diff-tests.el 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 + +;; 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 . + +;;; 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 -- 2.11.4.GIT