windows: quote the specified string only when it has to be quoted
Before this patch, "windows.shellquote" (as used as "util.shellquote")
always quotes specified strings with double quotation marks, for
external process invocation.
But some problematic applications can't work correctly, when command
line arguments are quoted: see
issue4463 for detail.
On the other hand, quoting itself is needed to specify arguments
containing whitespaces and/or some special characters exactly.
This patch makes "windows.shellquote" examine the specified string and
quote it only when it may have to be quoted for safety.
$ hg init
$ mkdir alpha
$ touch alpha/one
$ mkdir beta
$ touch beta/two
$ hg add alpha/one beta/two
$ hg ci -m "start"
$ echo 1 > alpha/one
$ echo 2 > beta/two
everything
$ hg diff --nodates
diff -r 7d5ef1aea329 alpha/one
--- a/alpha/one
+++ b/alpha/one
@@ -0,0 +1,1 @@
+1
diff -r 7d5ef1aea329 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2
beta only
$ hg diff --nodates beta
diff -r 7d5ef1aea329 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2
inside beta
$ cd beta
$ hg diff --nodates .
diff -r 7d5ef1aea329 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2
$ cd ..