web-dev-qa-db-fra.com

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

J'aimerais utiliser ma propre différence lorsque je travaille dans une vue d'instantané Clearcase.

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

Une façon de faire ça?

J'ai oublié de mentionner (jusqu'à présent, après avoir lu les deux premières réponses traitant de Windows) que c'est sur Unix, et je ne suis pas autorisé à me foutre de la configuration ClearCase.

46
chacmool

J'ai obtenu une autre manière de travailler basée sur les suggestions ici. J'ai découvert la commande cleartool "get", donc je l'exécute pour obtenir la version précédente dans un fichier temporaire:

cleartool get -to fname.temp fname @@ prédécesseur

Ensuite, exécutez mon diff et supprimez ce fichier.

Merci pour toutes les suggestions.

3
chacmool

Comment changer les outils de diff par défaut

Vous pouvez spécifier un outil de diff externe en modifiant le fichier map , dans "c:\program files\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.

Recherchez la section dans le fichier de carte 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 de diff .


Ou, un simple script diff

Si vous voulez aller en ligne de commande complète (ce que j'aime ;-)), 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";

Avertissement: chemin d'accès étendu (@@\...) n'est accessible qu'en vue dynamique (M:\..., pas une vue instantanée (c:\...).

Le script n'a rien à voir avec le fichier 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 souhaitez, sans lire aucun fichier de mappage pour rechercher le bon exe de diff à utiliser pour un fichier donné.

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


Ou, script diff amélioré (fonctionne également dans les vues statiques/instantanées)

Voici une version de ce script qui fonctionne à la fois pour l'instantané 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
VonC

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

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

Imaginez Git comme un pont entre CC et diff :-)

6
Matt Curtis

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

Outil-diff-personnalisé-pour-objet-clearcase

Comme vous pouvez le voir, voici le code 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} &
5
Dominique Terrs

Kdiff a intégré l'intégration. Ouvrez l'outil - allez dans Paramètres -> Configurer -> Intégration et cliquez sur le bouton "Intégrer avec ClearCase". Cet outil a une excellente prise en charge des différences à 3 voies, 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
Bryji

Voici un lien vers les documents IBM sur la modification de l'outil de diff XML ClearCase:

Modification du gestionnaire de types de diff/fusion XML

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

3
Scott D. Strader

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 & profit!

    % your-diff-here A B

Mettez-le dans un script et rendez les options un peu plus flexibles et le tour est joué.

Si vous le souhaitez, vous pouvez facilement couper le crud de cleartool diff avec un peu de awk ou cut ou Perl ou votre poison de choix.

Hourra pour ClearCase!

1
Matt Curtis

Je procède habituellement comme ça.

Pour un diff unifié cleartool diff -pred <my file>

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

0
olivier

J'ai installé "WinMerge" (un outil de diff gratuit) et il s'est installé comme l'outil de diff clearcase. Je ne sais pas comment ça a fait ça.

0
Paul Tomblin

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

J'ai rencontré des problèmes lorsque ClearCase ouvrira son propre outil de différenciation à la place, car l'installation de WinMerge n'a pas modifié tous les éléments de campagne nécessaires. C'est donc une bonne idée de lire la documentation de ClearCase afin de pouvoir la corriger manuellement si nécessaire.

0
Oliver

Pour moi, cela fonctionne bien:

%vimdiff my_file.c my_file.c@@/main/LATEST
0
Zeppe