merge: expand environment variables and ~/ in tool.executable
authorGreg Ward <greg@gerg.ca>
Wed, 12 Oct 2011 21:45:58 -0400
changeset 15264 157d93c41c10
parent 15263 70d7293c41d6
child 15265 460135339d74
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
tests/test-merge-tools.t
--- a/mercurial/filemerge.py	Sat Oct 15 00:39:06 2011 -0500
+++ b/mercurial/filemerge.py	Wed Oct 12 21:45:58 2011 -0400
@@ -34,7 +34,8 @@
             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):
--- a/tests/test-merge-tools.t	Sat Oct 15 00:39:06 2011 -0500
+++ b/tests/test-merge-tools.t	Wed Oct 12 21:45:58 2011 -0400
@@ -244,6 +244,30 @@
   # hg stat
   M f
 
+environment variables in true.executable are handled:
+
+  $ cat > $HGTMP/merge.sh <<EOF
+  > #!/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: