Re: difftool sends malformed path to exernal tool on Windows
- From
David Aguilar <davvid@gmail.com>
- Date
- Mar 5, 2014, 08:25 UTC
- Message-ID
- <20140305082517.GA86532@gmail.com>
- In-Reply-To
- <00bc01cf3737$b1474280$13d5c780$@lsst.org>
On Mon, Mar 03, 2014 at 04:24:15PM -0700, Paul Lotz wrote:
Show 16 quoted lines
> David, > > OK, I did as you suggested, and the results were revealing. > > First, I replaced "echo" with "cat". Result: The contents of both files appeared in the Git Bash Window. > > Then I tried calling LVCompare from the Git Bash and Windows Command Prompt windows with variations on the paths. > > Here are the most relevant results: > First from the Windows Command Prompt: > 1) This command works: > C:\LSST_TS\SystemSW\M2AADT>"C:\Program Files (x86)\National Instruments\Shared\L > abVIEW Compare\LVCompare.exe" C:\Users\Paul\AppData\Local\Temp\Typedefs_TestStat > us_Before.ctl C:\LSST_TS\SystemSW\M2AADT\Typedefs\TestStatus.ctl > [General note: > I saved a copy of the temp file and replaced the hex string with the string 'Before' to make the file stick around. The paths are otherwise the same.]
This is aligns with: http://zone.ni.com/reference/en-XX/help/371361H-01/lvhowto/configlvcomp_thirdparty/
"lvcompare.exe <absolute path to VI 1> ..."
The key thing is the mention of absolute paths.
What is happening is that lvcompare.exe (or likely it's a Windows thing) changes its current directory to its installation directory under Progra~1.
That means the relative paths passed in by difftool won't be found.
The way to fix it is to redirect your difftool config to a script that makes all paths absolute. This script can then call the real lvcompare.exe.
You just need to tweak the lvcompare part in your .gitconfig to look like this:
[difftool "lvcompare"] cmd = ~/bin/lvcompare.sh \"$LOCAL\" \"$REMOTE\"
... and install an executable lvcompare.sh shell script in in your $HOME/bin. Something like this:
#!/bin/sh
abspath () {
(
cd "$(dirname "$1")" &&
printf "%s/%s" "$(pwd)" "$(basename "$1")"
)
}lvcompare="C:\\Program Files (x86)\National Instruments\\Shared\\LabVIEW Compare\\LVCompare.exe" local=$(abspath "$1") remote=$(abspath "$2") exec "$lvcompare" "$local" "$remote"
Show 8 quoted lines
> 2) C:\LSST_TS\SystemSW\M2AADT>"C:\Program Files (x86)\National Instruments\Shared\L > abVIEW Compare\LVCompare.exe" C:\Users\Paul\AppData\Local\Temp\Typedefs_TestStat > us_Before.ctl Typedefs\TestStatus.ctl > > Result: Error message with reference to C:\Program Files (x86)\National Instruments\Shared\L > abVIEW Compare\supportVIs\_prolvcmp.llb\Typedefs\TestStatus.ctl > > Observation: The second path has to be the full path, not the relative path we get back using "echo".
Yes, that's what it looks like.
-- David