From aeec456986b687603ff82fdf89aa2fe1bd7ab7e5 Mon Sep 17 00:00:00 2001 From: Greg Ward Date: Wed, 12 Oct 2011 21:45:58 -0400 Subject: [PATCH] merge: expand environment variables and ~/ in tool.executable hgrc(5) already implies that this works, so we might as well support it. Another approach would be to implement this in util.findexe(): that would benefit other callers of findexe(), e.g. convert and anyone calling the user's editor. But findexe() is really implemented in both posix.py and windows.py, so this would make both of those modules depend on util.py: not good. So keep it narrow and only for merge tools. --- mercurial/filemerge.py | 3 ++- tests/test-merge-tools.t | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py index b13afe314a..bff2158e36 100644 --- a/mercurial/filemerge.py +++ b/mercurial/filemerge.py @@ -34,7 +34,8 @@ def _findtool(ui, tool): p = util.findexe(p + _toolstr(ui, tool, "regappend")) if p: return p - return util.findexe(_toolstr(ui, tool, "executable", tool)) + exe = _toolstr(ui, tool, "executable", tool) + return util.findexe(util.expandpath(exe)) def _picktool(repo, ui, path, binary, symlink): def check(tool, pat, symlink, binary): diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t index 5efa137147..56c36b7eb4 100644 --- a/tests/test-merge-tools.t +++ b/tests/test-merge-tools.t @@ -244,6 +244,30 @@ and true.executable set to cat with path works: # hg stat M f +environment variables in true.executable are handled: + + $ cat > $HGTMP/merge.sh < #!/bin/sh + > echo 'custom merge tool' + > EOF + $ chmod +x $HGTMP/merge.sh + $ domerge -r 2 --config merge-tools.true.executable='$HGTMP/merge.sh' + [merge-tools] + false.whatever= + true.priority=1 + true.executable=cat + # hg update -C 1 + # hg merge -r 2 --config merge-tools.true.executable=$HGTMP/merge.sh + merging f + custom merge tool + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + # cat f + revision 1 + space + # hg stat + M f + Tool selection and merge-patterns merge-patterns specifies new tool false: