web-dev-qa-db-ja.com

cleartool / clearcaseでカスタムdiffツールを使用する方法はありますか?

クリアケーススナップショットビューで作業するときは、独自の差分を使用したいと思います。

私が見る限り、「cleartool diff」の実行時にdiffツールを指定する方法がないため、「mydiff <predecessor file> <modified file in my view>」のようなものを実行できると考えていましたが、十分に知りませんClearCaseを使用して、比較する「先行ファイル」を見つけることができます。

これを行う方法はありますか?

(これまで、ウィンドウに関する最初の2つの応答を読んだ後)これがUnix上にあることを忘れていました。ClearCaseの設定をいじることは許可されていません。

46
chacmool

ここでの提案に基づいて、別の方法で作業しました。 cleartoolの「get」コマンドを発見したので、これを実行して以前のバージョンを一時ファイルに取得します。

cleartool get -to fname.temp fname @@ predecessor

次に、diffを実行して、そのファイルを削除します。

すべての提案をありがとう。

3
chacmool

デフォルトの差分ツールを変更する方法

外部差分ツールを指定するには、「 ファイルの変更map 」、「c:\ program files\rational\ClearCase\lib\mgrs」

Paulが提案したWinMergeは、実際にそのファイルを変更します。

各マップ行には、CCファイルタイプ、CCアクション、およびアプリケーションの3つの部分があります。

Text_file_deltaファイルタイプのマップファイル内のセクションを見つけます。そこで、CCアクションcompare、xcompare、merge、xmergeの行が次のように表示されます。

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

これらを diffツールで選択した実行可能ファイル で置き換えることができます。


または、単純なdiffスクリプト

これで完全なコマンドラインに移動したい場合(私はこれが好きです;-))、小さなccperlが役立ちます:

#!/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";

警告:拡張パス名(@@\...)は動的ビューでのみアクセス可能です(M:\...、スナップショットビューではありません(c:\...)。

スクリプトは、上記のmapfileとは関係ありません。

  • このファイルは「タイプマージマネージャー」を定義します。
  • このスクリプトを使用すると、マップファイルを読み取らずに、指定されたファイルに使用する適切なdiff exeを探すことなく、任意のファイルでマージマネージャーを実行できます。

ここでは、ファイル(パラメーターとして)と実行するdiff exe(スクリプトの実装内でmydiffを任意のdiff exeに置き換えます)の両方の情報をスクリプトに提供します。


または、改良されたdiffスクリプト(静的/スナップショットビューでも機能します)

スナップショットビューと動的ビューの両方で機能するこのスクリプトのバージョンを次に示します。

スナップショットビューでは、chacmoolの提案を使用します。cleartool get

繰り返しますが、このスクリプトに含まれるdiffコマンドは、選択したツールで置き換えることができます。

#!/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";
59
VonC

もう1つのオプションは、 Git + ClearCase (または this または this を参照)を使用し、Gitとの差分だけにすることです。

これは非常に簡単にセットアップでき、私の経験では、CCを21世紀のツールにしようとするよりも、2つのVCSシステムを一度に使用する方が実際に脳を痛めます。

GitをCCとdiffの間の橋渡しと考えてください:-)

6
Matt Curtis

誰かがすでにsnip2codeでそれについて考えているようです!
ここで、必要なことを正確に行うtcsh bashスクリプトを示します。

Custom-diff-tool-for-clearcase-object

ご覧のとおり、特定のファイルの以前のバージョンを取得するためのキーコードは次のとおりです。

cleartool descr -pred -short $1

どこ $1は比較するファイル名です。


#!/bin/tcsh -e
set _CLEARCASE_VIEW = `cleartool pwv -short -setview`
echo Set view: "$_CLEARCASE_VIEW"
set my_firstversion = ""
set my_secondversion = ""
set my_difftool = kdiff3

# check clearcase view
if ( "$_CLEARCASE_VIEW" == "** NONE **" ) then
  echo "Error: ClearCase view not set, aborted."
  exit -1
endif

if ( "$1" == "" ) then
  echo "Error: missing 1st file argument!"
  echo "Eg: `basename $0` file1.txt -> This will diff file1.txt with its previous version"
  echo "Eg: `basename $0` file1.txt file2.txt -> This will diff file1.txt and file2.txt"
  exit -1
endif  

set my_firstversion = "$1"
echo "my_firstversion=$my_firstversion"

if ( "$2" == "" ) then
  echo "No 2nd file passed, calculating previous version of $my_firstversion"
  set my_secondversion = $my_firstversion@@`cleartool descr -pred -short $my_firstversion`
else
  echo "Setting 2nd file to $2"
  set my_secondversion = "$2"
endif
echo "my_secondversion=$my_secondversion"

${my_difftool} ${my_firstversion} ${my_secondversion} &
5
Dominique Terrs

Kdiff には統合が組み込まれています。ツールを開きます-[設定]-> [構成]-> [統合]に移動し、[ClearCaseと統合]ボタンをクリックします。このツールは優れた3ウェイdiffサポートを持ち、UTF-8を処理します。この自動統合により、マップファイルの要素タイプなどを心配する必要がありません。

4
Bryji

ClearCase XML diffツールの変更に関するIBMドキュメントへのリンクは次のとおりです。

XML Diff/Merge Type Managerの変更

http://www-01.ibm.com/support/docview.wss?rs=984&uid=swg21256807

3

このトリック を使用してみてください:

  1. 空のファイルを作成する

    % touch empty

  2. バージョンAで取得

    % cleartool diff -ser empty File@@/main/28 > A

  3. バージョンBの取得

    % cleartool diff -ser empty File@@/main/29 > B

  4. 差異と利益!

    % your-diff-here A B

それをスクリプトに入れて、オプションをもう少し柔軟にすると、そこにそれがあります。

必要に応じて、awkまたはcutまたはPerlまたは選択した毒でcleartool diff crudを簡単に切り取ることができます。

ClearCaseの完全版!

1
Matt Curtis

私は通常このように進みます。

統合された差分の場合cleartool diff -pred <my file>

グラフィカルな差分の場合cleartool diff -pred -g <my file>

0
olivier

「WinMerge」(無料の差分ツール)をインストールし、それ自体をクリアケース差分ツールとしてインストールしました。どのようにそれが行われたかはわかりません。

0
Paul Tomblin

前述のWinMergeは、ClearCaseのインストールを自動的に検出し、Clearcaseインストールパスのマップファイルを変更します。

WinMergeのインストールでは必要なすべての行項目が変更されなかったため、ClearCaseが独自のdiffツールを開くという問題が発生しました。したがって、必要に応じて手動で修正できるように、ClearCaseのドキュメントを読むことをお勧めします。

0
Oliver

私にとってこれはうまく機能します:

%vimdiff my_file.c my_file.c@@/main/LATEST
0
Zeppe