Qualquer maneira de usar uma ferramenta de comparação personalizado com cleartool / clearcase?
Pergunta
Eu gostaria de usar o meu próprio diff quando se trabalha em uma exibição clearcase instantâneo.
Tanto quanto eu posso ver, não há nenhuma maneira para especificar uma ferramenta de comparação durante a execução "cleartool diff
", então eu estava pensando que eu poderia executar algo como "mydiff <predecessor file> <modified file in my view>
", mas eu não sei o suficiente sobre ClearCase para ser capaz para encontrar o "arquivo predecessor" para diff contra.
Qualquer maneira de fazer isso?
esqueci de mencionar (até agora, depois de ler as duas primeiras respostas que lidam com janelas) que este está em Unix, e eu não estou autorizado a mexer com a configuração ClearCase.
Solução 5
Eu tenho uma outra maneira trabalhar com base nas sugestões aqui. Eu descobri o cleartool "get" comando, então eu executar isso para obter a versão anterior para um arquivo temporário:
cleartool get -para fname.temp fname @@ predecessor
Em seguida, execute o meu diff, e apagar o arquivo.
Obrigado por todas as sugestões.
Outras dicas
Como mudar ferramentas de comparação por defeito
Você pode especificar uma ferramenta de comparação externo por modificar o arquivo Mapa , em "c: \ Program Files \ racional \ ClearCase \ lib \ mgrs"
O WinMerge sugerido por Paul realmente modifica o arquivo.
Cada linha mapa tem 3 partes: o filetype CC, a ação CC, e da aplicação.
Encontre a seção no arquivo de mapa para text_file_delta tipos de arquivo. Lá você vai encontrar linhas para ações CC comparar, xcompare, merge, e xmerge que olhar como esta:
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
Você pode substituí-los pela executável de sua escolha ferramenta de comparação .
Ou, um script diff simples
Se você quiser ir de linha de comando completo sobre este (o que eu como ;-)), um pouco ccperl pode ajudar:
#!/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";
Atenção:. Caminho estendido (@@\...
) só é acessível na visão dinâmica (M:\...
, não snapshot view (c:\...
)
O script não tem nada a ver com o map
file apresentada acima:
- 'Managers tipo MERGE' que define arquivos.
- Este script permite que você execute qualquer gestor merge em qualquer arquivo que você deseja, sem ler qualquer arquivo de mapa para olhar para o exe diff direito de uso por um determinado arquivo.
Aqui, você fornece para o script ambas as informações: o arquivo (como um parâmetro) eo exe diff a prazo (no âmbito da implementação script: substituir mydiff
por qualquer diff exe você quiser)
Ou, melhor roteiro diff (obras em vista estáticos / snapshot também)
Aqui está uma versão deste script que funciona tanto para instantâneo e dinâmica vista.
Para visão instantânea, eu uso do chacmool sugestão: cleartool get
Mais uma vez, você pode substituir o comando diff
incluído neste roteiro pela ferramenta de sua escolha.
#!/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";
Outra opção é usar Git + ClearCase (ou veja este ou este ) e diff apenas com Git.
Este é extremamente fácil de configurar e, na minha experiência, ele realmente dói seu cérebro menos usar dois sistemas VCS ao mesmo tempo do que tentar batida CC em ser uma ferramenta século 21.
Basta pensar em Git como uma ponte entre CC e diff: -)
Parece que alguém já pensou nisso em snip2code!
Aqui um script tcsh que faz exatamente o que você quer.
Custom-diff-ferramenta- para-clearcase-objeto
Como você pode ver a seguir é o código chave para obter a versão anterior de um determinado arquivo:
cleartool descr -pred -short $1
Onde $1
é o nome do arquivo para comparar.
#!/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} &
Kdiff3 foi construído em integração. Abra a ferramenta - vá para Configurações -> Configurar -> Integração e clique no botão 'Integração com ClearCase' botão. Esta ferramenta tem um excelente suporte diff 3 vias, alças UTF-8 e com esta integração automatizada você não precisa se preocupar com tipos de elemento etc. no arquivo de mapa.
Aqui está um link para a documentação da IBM sobre como alterar a ferramenta de comparação XML ClearCase:
Alterar o XML Diff / Mesclar Type Manager
http://www-01.ibm.com /support/docview.wss?rs=984&uid=swg21256807
Você pode tentar usar este truque :
-
Criar um arquivo vazio
% touch empty
-
Recuperar para a versão A
% cleartool diff -ser empty File@@/main/28 > A
-
Recuperar para a versão B
% cleartool diff -ser empty File@@/main/29 > B
-
Diff e lucro!
% your-diff-here A B
Coloque-o em um script e fazer as opções um pouco mais flexível e aí está.
Se você quiser você pode facilmente cortar o cleartool diff crud fora com um pouco awk
ou cut
ou perl
ou seu veneno de escolha.
Hooray para ClearCase!
Eu instalei "WinMerge" (a ferramenta de comparação livre) e instalou-se como a ferramenta clearcase diff. Eu não sei como ele fez isso.
WinMerge como mencionado detecta automaticamente uma instalação do ClearCase e modifica o arquivo de mapa na Clearcase caminho de instalação.
questõeseu experimentei foram ClearCase irá abrir a sua própria ferramenta de comparação em vez porque a instalação WinMerge não alterar todos os itens de linha necessário. Portanto, é uma boa idéia para ler a documentação para ClearCase para que você possa corrigi-lo manualmente, se necessário.
Para mim, isso funciona muito bem:
%vimdiff my_file.c my_file.c@@/main/LATEST
Eu costumo proceder assim.
Para uma comparação unificada
cleartool diff -pred <my file>
Para uma comparação gráfica
cleartool diff -pred -g <my file>