[PATCH STABLE] shellquote: fix missing quotes for empty string
Yuya Nishihara
yuya at tcha.org
Wed Feb 11 11:40:36 UTC 2015
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1423652227 -32400
# Wed Feb 11 19:57:07 2015 +0900
# Branch stable
# Node ID de0192120a2ae23adb5b9749c1ed868913aecdc6
# Parent 942a5a34b2d0611ab284380fbe45b9bb1897af98
shellquote: fix missing quotes for empty string
"hg kdiff3 -rREV" did not work because 1642eb429536 and 5edb387158a1 failed
to handle empty argument.
diff --git a/mercurial/posix.py b/mercurial/posix.py
--- a/mercurial/posix.py
+++ b/mercurial/posix.py
@@ -322,7 +322,7 @@ def shellquote(s):
global _needsshellquote
if _needsshellquote is None:
_needsshellquote = re.compile(r'[^a-zA-Z0-9._/-]').search
- if not _needsshellquote(s):
+ if s and not _needsshellquote(s):
# "s" shouldn't have to be quoted
return s
else:
diff --git a/mercurial/windows.py b/mercurial/windows.py
--- a/mercurial/windows.py
+++ b/mercurial/windows.py
@@ -159,7 +159,7 @@ def shellquote(s):
# they are used as a part of path name (and the latter doesn't
# work as "escape character", like one on posix) on Windows
_needsshellquote = re.compile(r'[^a-zA-Z0-9._:/\\-]').search
- if not _needsshellquote(s) and not _quotere.search(s):
+ if s and not _needsshellquote(s) and not _quotere.search(s):
# "s" shouldn't have to be quoted
return s
return '"%s"' % _quotere.sub(r'\1\1\\\2', s)
diff --git a/tests/test-extdiff.t b/tests/test-extdiff.t
--- a/tests/test-extdiff.t
+++ b/tests/test-extdiff.t
@@ -182,6 +182,22 @@ TODO
running "*/bin/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob)
#endif
+Empty argument must be quoted
+
+ $ cat <<EOF >> $HGRCPATH
+ > [extdiff]
+ > kdiff3 = echo
+ > [merge-tools]
+ > kdiff3.diffargs=--L1 \$plabel1 --L2 \$clabel \$parent \$child
+ > EOF
+#if windows
+ $ hg --debug kdiff3 -r0 | grep '^running'
+ running 'echo --L1 "@0" --L2 "" a.8a5febb7f867 a' in * (glob)
+#else
+ $ hg --debug kdiff3 -r0 | grep '^running'
+ running "echo --L1 '@0' --L2 '' a.8a5febb7f867 a" in * (glob)
+#endif
+
#if execbit
Test extdiff of multiple files in tmp dir:
More information about the Mercurial-devel
mailing list