51 votes

Est-il possible d'utiliser un outil diff personnalisé avec cleartool/clearcase ?

J'aimerais utiliser mon propre diff lorsque je travaille dans une vue instantanée de clearcase.

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

Y a-t-il un moyen de le faire ?

J'ai oublié de mentionner (jusqu'à maintenant, après avoir lu les deux premières réponses traitant de Windows) qu'il s'agit d'un système Unix, et que je ne suis pas autorisé à modifier la configuration de ClearCase.

0 votes

J'ai juste ajouté un avertissement sur le script qui ne fonctionne correctement qu'en dynamique vue, en réponse à votre commentaire

61voto

VonC Points 414372

Comment changer les outils de diff par défaut

Vous pouvez spécifier un outil de comparaison externe en modifier le fichier carte , dans "c : \program fichiers \rational\ClearCase\lib\mgrs "

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

Chaque ligne de carte comporte 3 parties : le type de fichier CC, l'action CC et l'application.

Trouvez la section dans le fichier de carte pour les types de fichiers text_file_delta. Vous y trouverez des lignes pour les actions CC compare, 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 l'outil de comparaison de votre choix .


Ou, un simple diff script.

Si vous souhaitez utiliser une ligne de commande complète (ce que j'aime bien ;-) ), un petit ccperl peut vous 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";

Attention : nom de chemin étendu ( @@\... ) n'est accessible qu'en vue dynamique ( M:\... et non la vue instantanée ( c:\... ).

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

  • ce fichier définit les "gestionnaires de fusion de types".
  • Ce script vous permet d'exécuter n'importe quel gestionnaire de fusion sur n'importe quel fichier que vous voulez, sans lire aucun fichier map pour chercher le bon diff exe à utiliser pour un fichier donné.

Ici, vous fournissez au script les deux informations : le fichier (en tant que paramètre) et le diff exe à exécuter (dans l'implémentation du script : replace mydiff par le diff exe que vous voulez).


Ou, diff amélioré script (fonctionne aussi dans les vues statiques/snapshot)

Voici une version de ce script qui fonctionne pour la vue instantanée et dynamique.

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

Là encore, vous pouvez remplacer le diff inclus 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";

0 votes

J'ai essayé ce script, mydiff rapporte "No such file or directory" pour le truc element@@pred. Cela ne fonctionnera-t-il qu'en conjonction avec l'édition du fichier de carte ci-dessus ?

0 votes

Cela ne fonctionnera que dans la vue dynamique, où les noms de chemin étendus (@@@ \... ) sont accessibles

0 votes

Remarque : le script n'a rien à voir avec le fichier map, qui définit les gestionnaires de fusion de types.

6voto

Matt Curtis Points 12454

Une autre option consiste à utiliser Git+ClearCase (ou voir ce ou ce ) et juste diff avec Git.

C'est remarquablement facile à mettre en place et, d'après mon expérience, cela fait moins mal au cerveau d'utiliser deux systèmes VCS à la fois que d'essayer de faire de CC un outil du 21e siècle.

Considérez Git comme un pont entre CC et diff :-)

1 votes

Je pense que c'est également une bonne idée. Je suis plus familier avec Mercurial et je vais essayer d'utiliser cela + cc dans le prochain projet.

0 votes

Les liens sont tous cassés. Pouvez-vous en fournir un autre ou, encore mieux, rédiger une auto-réponse à une nouvelle question ?

1 votes

Désolé Peter, j'ai écrit cette réponse il y a 11 ans et je n'utilise plus ClearCase. J'ai mis à jour la réponse avec les liens Wayback Machine. J'ai également une autre réponse qui serait assez facile à transformer en un script. Si vous êtes intéressé par la mise en relation de ClearCase et de Git, c'est assez facile à réaliser par vous-même, cf. une autre réponse de StackOverflow ici . Bonne chance !

5voto

Dominique Terrs Points 239

Il semble que quelqu'un y ait déjà pensé sur snip2code !
Voici un tcsh bash script qui fait exactement ce que vous voulez.

Outil personnalisé pour l'objet de clémence

Comme vous pouvez le constater, le code suivant est la clé pour obtenir la version précédente d'un fichier donné :

cleartool descr -pred -short $1

$1 est le nom du 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 ( "$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} &

0 votes

Il semble vraiment utile de procéder de cette manière, surtout pour la possibilité de prendre en compte tous les arbres de version et le calcul de la durée d'exécution de la version précédente !

5voto

Bryji Points 115

Kdiff3 a une intégration intégrée. Ouvrez l'outil - allez dans Paramètres --> Configurer --> Intégration et cliquez sur le bouton "Intégrer avec ClearCase". Cet outil offre une excellente prise en charge des différences à trois voies, il gère UTF-8 et, grâce à cette intégration automatique, vous n'avez pas à vous soucier des types d'éléments, etc. dans le fichier map.

3voto

Scott D. Strader Points 156

Voici un lien vers la documentation d'IBM sur la modification de l'outil de comparaison XML ClearCase :

Modification du gestionnaire de type de fusion/diffusion XML

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X