views:

2035

answers:

2

I'm forced to use ClearCase (Windows version) at work, and I want to use emacs ediff as a diff and merge tool. The problem with the ClearCase map file is that it requires .exe files - I've tried to specify a batch file calling ediff and it didn't work.

I don't want to write a C/C++ program (it's been more than 10 years since I've coded anything in C for Win32) that will call ediff with the proper arguments. Is there a simpler way?

See also:

Any way to use a custom diff tool with cleartool/clearcase?

+4  A: 

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.

VonC
It was the first thing I've tried, but it seems that CC doesn't like batch files in map. I can switch from builtin diff and merge tools to WinMerge or KDiff with ease, because they're .exe files, but when I specify a batch file, CC doesn't call it ever. I'll try again though.
Eugene Morozov
Thanks! Very detailed answer :)
Eugene Morozov
I'll try that tomorrow, my working day is already over. :) I'll add a comment or edit the question.
Eugene Morozov
+1  A: 

you can use clearcase package as described here

Alex Ott
Hi! Didn't know that you're also lurking here. :)I'm already using CC package. But sometimes I need to compare files in CC explorer or compare two versions selected in a CC tree version view.Also Emacs CC mode doesn't handle merges AFAIK. Also it's useless when working in another IDE.
Eugene Morozov