De toute façon d'utiliser un outil de diff personnalisé avec cleartool / ClearCase?

StackOverflow https://stackoverflow.com/questions/375398

  •  22-08-2019
  •  | 
  •  

Question

Je voudrais utiliser mon propre diff lorsque vous travaillez dans une vue instantanée de ClearCase.

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

Toute façon de le faire?

Vous avez oublié de mentionner (jusqu'à présent, après avoir lu les deux premières réponses qui traitent avec des fenêtres) que ce soit sur Unix, et je ne suis pas autorisé à muck avec la configuration ClearCase.

Était-ce utile?

La solution 5

Je suis une autre façon de travailler sur la base des suggestions ici. J'ai découvert la cleartool commande « get », donc j'exécute ce pour obtenir la version précédente à un fichier temporaire:

get cleartool -pour fname.temp FNAME @@ prédécesseur

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

Merci pour toutes les suggestions.

Autres conseils

Comment changer d'outil par défaut diff

Vous pouvez spécifier un outil de diff externe par modifiant le fichier carte , dans "c: \ program files \ rationnelle \ ClearCase \ lib \ MGRS"

Le Winmerge proposé par Paul modifie en fait ce fichier.

Chaque ligne de carte comporte 3 parties: le CC filetype, 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 des actions CC COMPARE xcompare, fusion, 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 de votre choix d'outil de diff .


Ou, un simple script diff

Si vous voulez aller en 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";

Attention: chemin d'accès étendu (@@\...) est accessible uniquement en vue dynamique (M:\..., pas instantané vue (c:\...)

.

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

  • qui définit fichier «type de fusion gestionnaires.
  • Ce script vous permet d'exécuter un gestionnaire de fusion sur un fichier que vous voulez, sans lire tout fichier carte pour rechercher le droit diff exe à utiliser pour un fichier donné.

Ici, vous fournissez au script les deux informations: le fichier (en tant que paramètre) et la diff exe pour exécuter (dans la mise en œuvre du script: remplacer mydiff par tous les diff exe que vous voulez)

.

Ou, l'amélioration de script diff (travaux dans les vues statiques / instantané trop)

Voici une version de ce script qui fonctionne à la fois instantané et vue dynamique.

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

.

Encore une fois, vous pouvez remplacer la commande 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";

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

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

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

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

sur mesure diff-outil- pour-clearcase-objet

Comme vous pouvez le voir ci-dessous est 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} &

kdiff3 a construit dans l'intégration. Ouvrez l'outil - allez dans Paramètres -> Configurer -> Intégration et cliquez sur le « Intégration avec ClearCase » bouton. Cet outil a une excellente 3 façon support diff, poignées UTF-8 et avec cette intégration automatisée vous n'avez pas à vous soucier de types d'éléments, etc. dans le fichier de la carte.

Voici un lien vers la documentation IBM sur le changement de l'outil XML ClearCase diff:

Modification du XML Diff / Merge Type Manager

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

Vous pouvez essayer d'utiliser cette astuce :

  1. Créez 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 et profit!

    % your-diff-here A B

Mettez-le dans un script et rendre les options un peu plus souple et là vous l'avez.

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

Hourra pour ClearCase!

J'ai installé « WinMerge » (un outil de comparaison gratuit) et il s'installé comme outil de diff ClearCase. Je ne sais pas comment il a fait cela.

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

J'ai des problèmes rencontrés ont été ClearCase ouvrira son propre outil de diff au lieu parce que l'installation Winmerge n'a pas changé toutes les lignes neccessary. Il est donc une bonne idée de lire la documentation ClearCase afin que vous puissiez corriger manuellement le cas échéant.

fonctionne bien pour moi:

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

Je procède habituellement comme ça.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top