Qualquer maneira de usar uma ferramenta de comparação personalizado com cleartool / clearcase?

StackOverflow https://stackoverflow.com/questions/375398

  •  22-08-2019
  •  | 
  •  

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.

Foi útil?

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 mapfile 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 :

  1. Criar um arquivo vazio

    % touch empty

  2. Recuperar para a versão A

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

  3. Recuperar para a versão B

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

  4. 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ões

eu 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>

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top