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.
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";
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 :-)
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
où 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} &
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.
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.
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
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 & 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!
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.
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.
Pour moi, cela fonctionne très bien:
%vimdiff my_file.c my_file.c@@/main/LATEST
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>