Une façon d'utiliser un outil de diff personnalisé avec cleartool / clearcase?

j'aimerais utiliser ma propre diff quand je travaille dans un snapshot de clearcase.

pour autant que je puisse voir, il n'y a aucun moyen de spécifier un outil diff lors de l'exécution de " cleartool diff ", donc je pensais que je pouvais exécuter quelque chose comme " mydiff <predecessor file> <modified file in my view> ", mais je ne sais pas assez sur ClearCase pour pouvoir trouver le" fichier prédécesseur " à différencier.

un moyen de faire ça?

a oublié de mentionner (jusqu'à présent, après avoir lu le premier deux réponses traitant de windows) que C'est sur Unix, et je ne suis pas autorisé à muck avec la configuration ClearCase.

46
demandé sur VonC 2008-12-17 20:49:09

11 réponses

Comment faire pour modifier la valeur par défaut diff outils

vous pouvez spécifier un outil de diff externe par modifier le fichier map , dans "c:\program fichiers\rational\Clecase\lib\mgrs "

le WinMerge suggéré par Paul modifie en fait ce fichier.

chaque ligne de carte a 3 parties: le type de fichier CC, L'action CC, et l'application.

trouver la section dans le fichier de correspondance pour les types de fichiers text_file_delta. Vous y trouverez des lignes pour les actions CC comparer, xcompare, merge, et xmerge qui ressemblent à ceci:

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

vous pouvez les remplacer par le exécutable de votre choix d'outil diff .


Ou, une simple script diff

si vous voulez passer la ligne de commande complète sur ce (que j'aime ; -)), un peu ccperl peut aider:

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

Avertissement: extended chemin ( @@\... ) est accessible uniquement en vue dynamique ( M:\... , pas de l'instantané de la vue ( c:\... ).

le script n'a rien à voir avec le fichier map présenté ci-dessus:

  • ce fichier définit 'Type Merge Managers'.
  • ce script vous permet d'exécuter n'importe quel gestionnaire de fusion sur n'importe quel dossier que vous voulez, sans lire n'importe quel dossier de carte pour chercher le droit diff exe à utiliser pour un fichier donné.

ici, vous fournissez au script à la fois les informations: le fichier (en paramètre) et la différence à exécuter (dans l'implémentation du script: remplacer mydiff par la différence que vous voulez).


Ou, l'amélioration de la diff de script (travaux en statique/instantané de points de vue trop)

Voici une version de ce script qui fonctionne à la fois pour le snapshot et la vue dynamique.

pour la vue instantanée, j'utilise la suggestion de chacmool: cleartool get .

encore une fois, vous pouvez remplacer la commande diff incluse dans ce script par l'outil de votre choix.

#!/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
répondu VonC 2012-08-23 14:25:58

une autre option est d'utiliser Git+ClearCase (ou voir this or this ) et juste diff avec Git.

c'est remarquablement facile à mettre en place et, d'après mon expérience, ça fait moins mal à votre cerveau d'utiliser deux systèmes VCS à la fois que d'essayer de battre CC en étant un outil du 21ème siècle.

il suffit de penser de Git comme un pont entre CC et diff :-)

6
répondu Matt Curtis 2008-12-17 22:32:33

il semble que quelqu'un y ait déjà pensé sur snip2code!

Voici un script de bash tcsh qui fait exactement ce que vous voulez.

Custom-diff-outil-pour-clearcase-objet

comme vous pouvez le voir, ce qui suit est le code clé pour obtenir la version précédente d'un fichier donné:

cleartool descr -pred -short

est le nom de fichier à comparer.


#!/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 ( "" == "" ) then
  echo "Error: missing 1st file argument!"
  echo "Eg: `basename " 151900920"` file1.txt -> This will diff file1.txt with its previous version"
  echo "Eg: `basename " 151900920"` file1.txt file2.txt -> This will diff file1.txt and file2.txt"
  exit -1
endif  

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

if ( "" == "" ) 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 "
  set my_secondversion = ""
endif
echo "my_secondversion=$my_secondversion"

${my_difftool} ${my_firstversion} ${my_secondversion} &
5
répondu Dominique Terrs 2013-09-19 08:55:19

Kdiff3 a construit en intégration. Ouvrez l'outil-allez à Paramètres -- > configurer -- > intégration et cliquez sur le bouton' Intégrer avec ClearCase'. Cet outil a un excellent support 3 voies diff, gère UTF-8 et avec cette intégration automatisée vous n'avez pas à vous soucier des types d'éléments, etc. dans le fichier de carte.

4
répondu Bryji 2013-09-30 11:25:25

j'ai obtenu une autre façon de travailler basé sur les suggestions ici. J'ai découvert la commande cleartool "get", donc j'exécute ceci pour obtenir la version précédente dans un fichier temp:

cleartool-de fname.temp fname@@prédécesseur

puis lancer ma diff, et supprimer ce fichier.

Merci pour toutes les suggestions.

3
répondu chacmool 2008-12-18 16:02:58

voici un lien vers les documents IBM sur le changement de L'outil ClearCase XML diff:

changer le gestionnaire de type de Diff/Fusion XML

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

3
répondu Scott D. Strader 2010-09-10 14:53:43

vous pouvez essayer d'utiliser cette astuce :

  1. créer un fichier vide

    % touch empty

  2. Récupérer pour la version a

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

  3. Récupérer pour la version B

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

  4. Diff & le profit!

    % your-diff-here A B

mettez-le dans un script et faites les options un peu plus flexible et là vous l'avez.

si vous voulez, vous pouvez facilement enlever le crumeau de cleartool avec un peu de awk ou cut ou perl ou votre poison de choix.

Hourra pour ClearCase!

1
répondu Matt Curtis 2017-05-23 10:29:27

j'ai installé" WinMerge " (un outil de diff gratuit) et il s'est installé comme l'outil de diff clearcase. Je ne suis pas sûr de savoir comment il a fait.

0
répondu Paul Tomblin 2008-12-17 17:56:49

WinMerge comme mentionné détecte automatiquement une installation de ClearCase et modifie le fichier map dans le chemin d'installation de Clearcase.

j'ai connu des problèmes où ClearCase va ouvrir son propre outil de diff à la place parce que L'installation de WinMerge n'a pas changé tous les éléments de ligne nécessaires. C'est donc une bonne idée de lire la documentation de ClearCase pour pouvoir la corriger manuellement si nécessaire.

0
répondu Oliver 2009-02-23 17:35:20

Pour moi, cela fonctionne très bien:

%vimdiff my_file.c my_file.c@@/main/LATEST
0
répondu Zeppe 2010-11-15 09:35:14

d'habitude, je fais comme ça.

pour une diff unifiée cleartool diff -pred <my file>

pour une différence graphique cleartool diff -pred -g <my file>

0
répondu olivier 2015-01-05 17:58:12