Subject: bug#6136: Emerge doesn't handle file names with spaces on MS Windows

From: Joakim Hårsman <[email-masked]>
Date: Fri, 7 May 2010 21:19:36 +0200

If any of the file names supplied to Emerge (e.g to
emerge-files-with-ancestor) has spaces in in its path and Emacs is
running on MS Windows, the merge fails.

The problem is the way Emerge passes the file names to diff, it tries
to escape spaces (and other metchars) with backslashes, but that
doesn't work on MS Windows since the backslash is a path separator
there.

If I change the definition of emerge-protect-metachars to the
following it works:

(defun emerge-protect-metachars (s)
  (if (member system-type '(windows-nt ms-dos))
      (emerge-protect-metachars-win s)
    (emerge-protect-metachars-nix s)))

(defun emerge-protect-metachars-nix (s)
  (let ((limit 0))
    (while (string-match emerge-metachars s limit)
      (setq s (concat (substring s 0 (match-beginning 0))
		      "\\"
		      (substring s (match-beginning 0))))
      (setq limit (1+ (match-end 0)))))
  s)

(defun emerge-protect-metachars-win (s)
  (concat "\"" s "\""))

Here's some output which might be useful:
GNU Emacs 23.1.1 (i386-mingw-nt5.1.2600) of 2009-07-30 on SOFT-MJASON