I'd like to use my own diff when working in a clearcase snapshot view. As far as I can see, there is no way to specify a diff tool when running "cleartool diff", so I was thinking I could run something like "mydiff <predecessor file> <modified file in my view>", but I don't know enough about clearcase to be able to find the "predecessor file" to diff against. Any way to do this??
Forgot to mention (until now, after reading the first two responses dealing with windows) that this is on unix and I am not allowed to muck with the clearcase configuration.
-
I installed "WinMerge" (a free diff tool) and it installed itself as the clearcase diff tool. I'm not sure how it did that.
-
You can specify an external diff tool by modifying the file map, in "c:\program files\rational\ClearCase\lib\mgrs"
The WinMerge suggested by Paul actually modifies that file.
Each map line has 3 parts: the CC filetype, the CC action, and the application.
Find the section in the map file for text_file_delta file types. There you will find lines for CC actions compare, xcompare, merge, and xmerge which look like this:
text_file_delta compare ....\bin\cleardiff.exe text_file_delta xcompare ....\bin\cleardiffmrg.exe text_file_delta merge ....\bin\cleardiff.exe text_file_delta xmerge ....\bin\cleardiffmrg.exe
You can replace them by the executable of your diff tool choice.
If you want to go full command-line on this (which I like ;-) ), a little ccperl can help:
#!/bin/perl my ($file, $switches) = @ARGV; $switches ||= '-ubBw'; my ($element, $version, $pred) = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`); unless ($pred) { die "ctdiff: $file has no predecessor\n"; } exec "mydiff $switches $element\@\@$pred $file";Warning: extended pathname (
@@\...) is only accessible in dynamic view (M:\..., not snapshot view (c:\...).The script has nothing to do with the
mapfile presented above:- that file defines 'Type Merge Managers'.
- This script allows you to run any merge manager on any file you want, without reading any map file to look for the right diff exe to use for a given file.
Here, you provide to the script both informations: the file (as a parameter) and the diff exe to run (within the script implementation: replace
mydiffby whatever diff exe you want).
Here is a version of this script which works for both snapshot and dynamic view.
For snapshot view, I use the chacmool's suggestion:
cleartool get.Again, you can replace the
diffcommand included in this script by the tool of your choosing.#!/bin/perl my ($file, $switches) = @ARGV; $switches ||= '-u'; my ($element, $version, $pred) = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`); unless ($pred) { die "ctdiff: $file has no predecessor\n"; } # figure out if view is dynamic or snapshot my $str1 = `cleartool lsview -long -cview`; if($? == 0) { dodie("pred.pl must be executed within a clearcase view"); } my @ary1 = grep(/Global path:/, split(/\n/, $str1)); if($str1 =~ /View attributes: snapshot/sm) { $is_snapshot = 1; } my $predfile = "$element\@\@$pred"; $predfile =~ s/\'//g;#' #printf("$predfile\n"); if ($is_snapshot) { my $predtemp = "c:\\temp\\pred.txt"; unlink($predtemp); my $cmd = "cleartool get -to $predtemp $predfile"; printf("$cmd\n"); my $str2 = `$cmd`; $predfile = $predtemp; } sub dodie { my $message = $_[0]; print($message . "\n"); exit 1; } exec "diff $switches $predfile $file";chacmool : I tried this script, mydiff reports "No such file or directory" for the element@@pred stuff. Will this only work in conjunction with the map file edit above?VonC : That will work only in dynamic view, where extended pathnames (@@\...) are accessibleVonC : Note: the script has nothing to do with the map file, which defines Type Merge Managers. -
You could try using this trick:
Create an empty file
% touch emptyRetrieve for version A
% cleartool diff -ser empty File@@/main/28 > ARetrieve for version B
% cleartool diff -ser empty File@@/main/29 > BDiff & profit!
% your-diff-here A B
Put it in a script and make the options a bit more flexible and there you have it.
If you want you could easily snip the cleartool diff crud off with a little
awkorcutorperlor your poison of choice.Hooray for ClearCase!
-
Another option is to use Git+ClearCase (or see this or this) and just diff with Git.
This is remarkably easy to set up and, in my experience, it actually hurts your brain less to use two VCS systems at once than to try to beat CC into being a 21st century tool.
Just think of Git as a bridge between CC and diff :-)
chacmool : I think this is a good idea also. I am more familiar with Mercurial and am going to try using that + cc in the next project. -
I got another way working based on the suggestions here. I discovered the cleartool "get" command, so I execute this to get the previous version to a temp file:
cleartool get -to fname.temp fname@@predecessor
Then run my diff, and delete that file.
Thanks for all the suggestions.
VonC : Good suggestion (+1), but you have to determine the 'predecessor' manually. I have updated my script to do that for you, even in a snapshot view, by using your 'cleartool get' command. -
i would like to know one thing regarding this.... i am working in the insatallation Of clearcsae for CA unicenter tool. one of the requirement from the development team is comparing files in one server with that of another server in the CA servers.what are the changes made in one file...like that.... winmerge works fine for this issue... is there any way to integrate clearcase with winmerge....
Thanks -Dev
-
I use "kdiff". It's open source and integrate with ClearCase automatically. You can read more in my blog: http://almmmm.wordpress.com/kdiff
BR, Tamir Gefen
CM and ALM
Certified IBM Rational ClearCase UCM professional
GoMidjets http://GoMidjets.com
-
WinMerge as mentioned automatically detects an install of ClearCase and modifies the map file in the Clearcase install path.
I have experienced issues were ClearCase will open its own diff tool instead because the WinMerge installation didn't change all neccessary line items. So it's a good idea to read the documentation for ClearCase so you can fix it manually if need be.
-
Here's a link to the IBM docs on changing the ClearCase XML diff tool:
Changing the XML Diff/Merge Type Manager
http://www-01.ibm.com/support/docview.wss?rs=984&uid=swg21256807
0 comments:
Post a Comment