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.
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.
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 .
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:
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).
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";
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 :-)
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
Où $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} &
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.
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
Vous pouvez essayer d'utiliser cette astuce :
Créer un fichier vide
% touch empty
Récupérer pour la version A
% cleartool diff -ser empty File@@/main/28 > A
Récupérer pour la version B
% cleartool diff -ser empty File@@/main/29 > B
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!
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>
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.
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.
Pour moi, cela fonctionne bien:
%vimdiff my_file.c my_file.c@@/main/LATEST