How to change default diff tools
You can specify an external diff tool by modifying the file map, in "c:program files
ationalClearCaselibmgrs"
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 ....incleardiff.exe
text_file_delta xcompare ....incleardiffmrg.exe
text_file_delta merge ....incleardiff.exe
text_file_delta xmerge ....incleardiffmrg.exe
You can replace them by the executable of your diff tool choice.
Or, a simple diff script
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
"; }
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 map
file 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 mydiff
by whatever diff exe you want).
Or, improved diff script (works in static/snapshot views too)
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 diff
command 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
"; }
# 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(/
/, $str1));
if($str1 =~ /View attributes: snapshot/sm) { $is_snapshot = 1; }
my $predfile = "$element@@$pred";
$predfile =~ s/'//g;#'
#printf("$predfile
");
if ($is_snapshot) {
my $predtemp = "c:\temp\pred.txt";
unlink($predtemp);
my $cmd = "cleartool get -to $predtemp $predfile"; printf("$cmd
");
my $str2 = `$cmd`;
$predfile = $predtemp;
}
sub dodie {
my $message = $_[0];
print($message . "
");
exit 1;
}
exec "diff $switches $predfile $file";