As mentioned in this SO question, the map file allows you to call an external diff tool.
For Windows, you should try first to call emacs in ediff mode:
emacs --eval "(ediff-files \"file_1\" \"file_2\")"
or
xemacs -eval "(ediff-files \"file_1\" \"file_2\")"
(should invoke a new instance of XEmacs ediff)
If this works, you may write a .bat
file called by the map file, and building the appropriate "emacs ediff
" command line.
Something along the lines of:
@echo off
set local
if !%XEMACS_PATH%!==!! SET
XEMACS_PATH=C:\<XEmacs-Path>\i586-pc-win32
set FILE1=%~1
set FILE2=%~2
REM * Bad habit - working on administrative shares.. Why is $->$$ not needed?
REM SET FILE1=%FILE1:$=$$%
REM SET FILE2=%FILE2:$=$$%
REM * Escaping backslash..
SET FILE1=%FILE1:\=\\%
SET FILE2=%FILE2:\=\\%
"%XEMACS_PATH:"=%\gnudoit.exe" "(ediff \"%FILE1%\" \"%FILE2%\")"
If map file is not at ease with calling a .bat file, simply generate an .exe
from your .bat
.
I have done some tests and it turns out:
"compare with previous version" actually calls:
cleartool diff -graphical -pred myFile
calling the .bat through a cmd.exe call does not work
c:\Program Files\Rational\ClearCase\lib\mgrs\map
text_file_delta xcompare "c:\WINDOWS\system32\cmd.exe /c c:\cc\test.bat"
cleartool: Error: Operation "xcompare" unavailable for manager "text_file_delta"
(Operation pathname was: "C:\Program Files\Rational\ClearCase\lib\mgrs\"c:\WINDOWS\system32\cmd.exe /c c:\cc\test.bat"")
transforming the .bat in .exe does work
arg2 (%2
) and arg4 (%4
) are what you are looking for, with arg5 (%5
) the name of the temporary file created for the content of the previous version (for snapshot view which can not access extended path name)
So the following bat (transformed in exe) works from the command-line only (not from the ClearCase Explorer: DrWatson):
"C:\Program Files\WinMerge\WinMergeU.exe" %4 %5
You should be able to adapt it to Xemacs, but Alex's suggestion (working with Clearcase from Emacs) might be another more practical solution.