Qualche modo di usare uno strumento diff personalizzato con cleartool / clearcase?

Mi piacerebbe usare la mia diff quando si lavora in una vista di snapshot di Clearcase.

Per quanto posso vedere, non c’è modo di specificare uno strumento diff quando si esegue ” cleartool diff “, quindi pensavo di poter eseguire qualcosa come ” mydiff “, ma non lo faccio ne so abbastanza su ClearCase per essere in grado di trovare il “file predecessore” da diff contro.

Un modo per farlo?

Ho dimenticato di menzionare (fino ad ora, dopo aver letto le prime due risposte che si occupano di Windows) che questo è su Unix, e non mi è permesso muck con la configurazione ClearCase.

    Come cambiare gli strumenti diff predefiniti

    È ansible specificare uno strumento diff esterno modificando la mappa del file , in “c: \ program files \ rational \ ClearCase \ lib \ mgrs”

    WinMerge suggerito da Paul modifica effettivamente quel file.

    Ogni linea della mappa ha 3 parti: il tipo di file CC, l’azione CC e l’applicazione.

    Trova la sezione nel file di mappa per i tipi di file text_file_delta. Lì troverai le linee per confrontare le azioni CC, xcompare, unire e xmerge che assomigliano a questo:

     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 

    Puoi sostituirli con l’ eseguibile della tua scelta di strumenti diff .


    O, un semplice script diff

    Se vuoi fare una riga di comando completa su questo (che mi piace ;-)), un piccolo ccperl può aiutare:

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

    Attenzione: il nome percorso esteso ( @@\... ) è accessibile solo nella vista dynamic ( M:\... , non nella vista istantanea ( c:\... ).

    Lo script non ha nulla a che fare con il file di map presentato sopra:

    • quel file definisce ‘Type Merge Managers’.
    • Questo script consente di eseguire qualsiasi gestore di unione su qualsiasi file desiderato, senza leggere alcun file di mappa per cercare la differenza corretta da utilizzare per un determinato file.

    Qui, fornisci allo script entrambe le informazioni: il file (come parametro) e le differenze da eseguire (all’interno dell’implementazione dello script: sostituisci mydiff con qualsiasi differenza tu voglia).


    Oppure, migliorato script diff (funziona anche in viste statiche / istantanee)

    Ecco una versione di questo script che funziona sia per lo snapshot che per la visualizzazione dynamic.

    Per la visualizzazione istantanea, utilizzo il suggerimento di cleartool get : cleartool get .

    Di nuovo, puoi sostituire il comando diff incluso in questo script con lo strumento che hai scelto.

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

    Un’altra opzione è usare Git + ClearCase (o vedere questo o questo ) e solo diff con Git.

    Questo è straordinariamente facile da configurare e, secondo la mia esperienza, in realtà fa male al cervello meno di usare due sistemi VCS contemporaneamente piuttosto che cercare di battere CC come strumento del 21 ° secolo.

    Pensa a Git come a un ponte tra CC e diff 🙂

    Sembra che qualcuno ci abbia già pensato su snip2code!
    Ecco uno script di bash tcsh che fa esattamente quello che vuoi.

    Custom-diff-strumento-per-ClearCase-object

    Come puoi vedere il seguente è il codice chiave per ottenere la versione precedente di un dato file:

    cleartool descr -pred -short $1

    Dove $1 è il nome del file da confrontare.


     #!/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 = [email protected]@`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 ha integrato l’integrazione. Apri lo strumento – vai su Impostazioni -> Configura -> Integrazione e fai clic sul pulsante “Integrare con ClearCase”. Questo strumento ha un ottimo supporto diff 3 vie, gestisce UTF-8 e con questa integrazione automatizzata non devi preoccuparti dei tipi di elementi ecc. Nel file mappa.

    Ho un altro modo di lavorare sulla base dei suggerimenti qui. Ho scoperto il comando cleartool “get”, quindi eseguo questo per ottenere la versione precedente in un file temporaneo:

    cleartool get -to fname.temp fname @@ predecessore

    Quindi esegui il mio diff, ed elimina quel file.

    Grazie per tutti i suggerimenti.

    Ecco un collegamento ai documenti IBM sulla modifica dello strumento di differenziazione ClearCase XML:

    Modifica del gestore di tipo XML Diff / Merge

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

    Potresti provare a usare questo trucco :

    1. Crea un file vuoto

      % touch empty

    2. Recupera per la versione A

      % cleartool diff -ser empty [email protected]@/main/28 > A

    3. Recupera per la versione B

      % cleartool diff -ser empty [email protected]@/main/29 > B

    4. Differenza e profitto!

      % your-diff-here AB

    Inseriscilo in una sceneggiatura e rendi le opzioni un po ‘più flessibili e ce l’hai.

    Se vuoi puoi facilmente tagliare il cleartool diff crud off con un po ‘di awk o cut o perl o il tuo veleno preferito.

    Evviva per ClearCase!

    Ho installato “WinMerge” (uno strumento diff gratuito) e si è installato come strumento di clearcase. Non sono sicuro di come sia stato.

    WinMerge come accennato rileva automaticamente un’installazione di ClearCase e modifica il file di mappa nel percorso di installazione di Clearcase.

    Ho riscontrato problemi nel caso in cui ClearCase aprisse il proprio strumento di diff perché l’installazione di WinMerge non ha modificato tutti gli elementi pubblicitari necessari. Quindi è una buona idea leggere la documentazione di ClearCase in modo da poterla risolvere manualmente se necessario.

    Per me funziona bene:

     %vimdiff my_file.c [email protected]@/main/LATEST 

    Di solito procedo così.

    Per un diff cleartool diff -pred unificato diff cleartool diff -pred

    Per un grafico diff cleartool diff -pred -g