unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#6136: Emerge doesn't handle file names with spaces on MS Windows
@ 2010-05-07 19:19 Joakim Hårsman
  2010-05-08 15:08 ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: Joakim Hårsman @ 2010-05-07 19:19 UTC (permalink / raw)
  To: 6136

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







^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#6136: Emerge doesn't handle file names with spaces on MS Windows
  2010-05-07 19:19 bug#6136: Emerge doesn't handle file names with spaces on MS Windows Joakim Hårsman
@ 2010-05-08 15:08 ` Eli Zaretskii
  2016-08-06 14:06   ` npostavs
  0 siblings, 1 reply; 4+ messages in thread
From: Eli Zaretskii @ 2010-05-08 15:08 UTC (permalink / raw)
  To: Joakim Hårsman; +Cc: 6136

> Date: Fri, 7 May 2010 21:19:36 +0200
> From: Joakim Hårsman <joakim.harsman@gmail.com>
> Cc: 
> 
> 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 "\""))

I think emerge-protect-metachars should simply use
shell-quote-argument, on all platforms.  Then it won't need to
distinguish between the different flavors, and it won't need to know
which characters need protection, something that is shell-dependent
and thus tricky even on Unix.

Could you try a patch along those line, and see if it works?







^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#6136: Emerge doesn't handle file names with spaces on MS Windows
  2010-05-08 15:08 ` Eli Zaretskii
@ 2016-08-06 14:06   ` npostavs
  2016-08-06 14:46     ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: npostavs @ 2016-08-06 14:06 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Joakim Hårsman, 6136

[-- Attachment #1: Type: text/plain, Size: 614 bytes --]

fixed 6136 23.3.90
quit

Was reported a second time
(http://article.gmane.org/gmane.emacs.help/80250) and then fixed by
576bce32 (2011-03-19 "Fix emerge.el on MS-Windows and MS-DOS...")

Eli Zaretskii <eliz@gnu.org> writes:

> I think emerge-protect-metachars should simply use
> shell-quote-argument, on all platforms.  Then it won't need to
> distinguish between the different flavors, and it won't need to know
> which characters need protection, something that is shell-dependent
> and thus tricky even on Unix.

But the non-Windows case still uses emerge-metachars.  Should we make it
same on all platforms:


[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 2952 bytes --]

From 7f960d1e91eb69ac14c55de2dc4a78adbf1274f1 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Sat, 6 Aug 2016 09:51:15 -0400
Subject: [PATCH v1] Make emerge always use shell-quote-argument

* lisp/vc/emerge.el (emerge-metachars): Obsolete.
(emerge-protect-metachars): Delete.
(emerge-make-diff-list, emerge-make-diff3-list): Replace all calls to
`emerge-protect-metachars' with `shell-quote-argument' so that shell
quoting is done the same on all system types (Bug #6136).  Also shell
quote `emerge-diff-program' and `emerge-diff3-program'.
---
 lisp/vc/emerge.el | 37 ++++++++++++-------------------------
 1 file changed, 12 insertions(+), 25 deletions(-)

diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el
index de25cba..058b15c 100644
--- a/lisp/vc/emerge.el
+++ b/lisp/vc/emerge.el
@@ -621,9 +621,10 @@ emerge-make-diff-list
    (erase-buffer)
    (shell-command
     (format "%s %s %s %s"
-	    emerge-diff-program emerge-diff-options
-	    (emerge-protect-metachars file-A)
-	    (emerge-protect-metachars file-B))
+	    (shell-quote-argument emerge-diff-program)
+            emerge-diff-options
+	    (shell-quote-argument file-A)
+	    (shell-quote-argument file-B))
     t))
   (emerge-prepare-error-list emerge-diff-ok-lines-regexp)
   (emerge-convert-diffs-to-markers
@@ -792,10 +793,11 @@ emerge-make-diff3-list
    (erase-buffer)
    (shell-command
     (format "%s %s %s %s %s"
-	    emerge-diff3-program emerge-diff-options
-	    (emerge-protect-metachars file-A)
-	    (emerge-protect-metachars file-ancestor)
-	    (emerge-protect-metachars file-B))
+	    (shell-quote-argument emerge-diff3-program)
+            emerge-diff-options
+	    (shell-quote-argument file-A)
+	    (shell-quote-argument file-ancestor)
+	    (shell-quote-argument file-B))
     t))
   (emerge-prepare-error-list emerge-diff3-ok-lines-regexp)
   (emerge-convert-diffs-to-markers
@@ -3171,26 +3173,11 @@ emerge-unslashify-name
 
 ;; Metacharacters that have to be protected from the shell when executing
 ;; a diff/diff3 command.
-(defcustom emerge-metachars
-  (if (memq system-type '(ms-dos windows-nt))
-      "[ \t\"<>|?*^&=]"
-    "[ \t\n!\"#$&'()*;<=>?[\\^`{|~]")
-  "Characters that must be quoted when used in a shell command line.
-More precisely, a [...] regexp to match any one such character."
+(defcustom emerge-metachars nil
+  "Obsolete, emerge now uses `shell-quote-argument'."
   :type 'regexp
   :group 'emerge)
-
-;; Quote metacharacters (using \) when executing a diff/diff3 command.
-(defun emerge-protect-metachars (s)
-  (if (memq system-type '(ms-dos windows-nt))
-      (shell-quote-argument 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))
+(make-obsolete-variable 'emerge-metachars nil "25.2")
 
 (provide 'emerge)
 
-- 
2.8.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* bug#6136: Emerge doesn't handle file names with spaces on MS Windows
  2016-08-06 14:06   ` npostavs
@ 2016-08-06 14:46     ` Eli Zaretskii
  0 siblings, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2016-08-06 14:46 UTC (permalink / raw)
  To: npostavs; +Cc: joakim.harsman, 6136

> From: npostavs@users.sourceforge.net
> Cc: Joakim Hårsman <joakim.harsman@gmail.com>,
>   6136@debbugs.gnu.org
> Date: Sat, 06 Aug 2016 10:06:37 -0400
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I think emerge-protect-metachars should simply use
> > shell-quote-argument, on all platforms.  Then it won't need to
> > distinguish between the different flavors, and it won't need to know
> > which characters need protection, something that is shell-dependent
> > and thus tricky even on Unix.
> 
> But the non-Windows case still uses emerge-metachars.  Should we make it
> same on all platforms:

Yes, I think so.

Thanks.





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-08-06 14:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-07 19:19 bug#6136: Emerge doesn't handle file names with spaces on MS Windows Joakim Hårsman
2010-05-08 15:08 ` Eli Zaretskii
2016-08-06 14:06   ` npostavs
2016-08-06 14:46     ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).