Mercurial > hg
changeset 17885:9a2cf955db84 stable
filemerge: use util.shellquote when calling merge (issue3581)
author | Keegan Carruthers-Smith <keegancsmith@fb.com> |
---|---|
date | Fri, 26 Oct 2012 12:02:58 -0700 |
parents | 0188ddfa844e |
children | d8905e2c1301 |
files | mercurial/filemerge.py tests/test-merge-tools.t |
diffstat | 2 files changed, 28 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/filemerge.py Tue Oct 30 16:46:52 2012 -0500 +++ b/mercurial/filemerge.py Fri Oct 26 12:02:58 2012 -0700 @@ -72,7 +72,7 @@ if force: toolpath = _findtool(ui, force) if toolpath: - return (force, '"' + toolpath + '"') + return (force, util.shellquote(toolpath)) else: # mimic HGMERGE if given tool not found return (force, force) @@ -87,7 +87,7 @@ mf = match.match(repo.root, '', [pat]) if mf(path) and check(tool, pat, symlink, False): toolpath = _findtool(ui, tool) - return (tool, '"' + toolpath + '"') + return (tool, util.shellquote(toolpath)) # then merge tools tools = {} @@ -106,7 +106,7 @@ for p, t in tools: if check(t, None, symlink, binary): toolpath = _findtool(ui, t) - return (t, '"' + toolpath + '"') + return (t, util.shellquote(toolpath)) # internal merge or prompt as last resort if symlink or binary: @@ -255,7 +255,7 @@ out, a = a, back # read input from backup, write to original replace = dict(local=a, base=b, other=c, output=out) args = util.interpolate(r'\$', replace, args, - lambda s: '"%s"' % util.localpath(s)) + lambda s: util.shellquote(util.localpath(s))) r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env, out=ui.fout) return True, r
--- a/tests/test-merge-tools.t Tue Oct 30 16:46:52 2012 -0500 +++ b/tests/test-merge-tools.t Fri Oct 26 12:02:58 2012 -0700 @@ -773,6 +773,30 @@ # hg stat M f +Issue3581: Merging a filename that needs to be quoted + + $ beforemerge + [merge-tools] + false.whatever= + true.priority=1 + true.executable=cat + # hg update -C 1 + $ echo "revision 4" > '"; exit 1; echo "' + $ hg commit -Am "revision 4" + adding "; exit 1; echo " + warning: filename contains '"', which is reserved on Windows: '"; exit 1; echo "' + $ hg update -C 1 > /dev/null + $ echo "revision 5" > '"; exit 1; echo "' + $ hg commit -Am "revision 5" + adding "; exit 1; echo " + warning: filename contains '"', which is reserved on Windows: '"; exit 1; echo "' + created new head + $ hg merge --config merge-tools.true.executable="true" -r 4 + merging "; exit 1; echo " + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg update -C 1 > /dev/null + Merge post-processing cat is a bad merge-tool and doesn't change: