Любой способ использовать пользовательский инструмент сравнения с cleartool / clearcase? - PullRequest
46 голосов
/ 17 декабря 2008

Я бы хотел использовать свой собственный diff при работе в режиме снимка в прозрачном режиме.

Насколько я вижу, нет никакого способа указать инструмент сравнения при запуске "cleartool diff", поэтому я думал, что могу запустить что-то вроде "mydiff <predecessor file> <modified file in my view>", но я не знаю достаточно о ClearCase, чтобы иметь возможность найти «файл предшественника» для сравнения.

Есть ли способ сделать это?

Забыл упомянуть (до сих пор, после прочтения первых двух ответов, касающихся окон), что это в Unix, и мне не разрешено портить конфигурацию ClearCase.

Ответы [ 11 ]

59 голосов
/ 17 декабря 2008

Как изменить стандартные инструменты сравнения

Вы можете указать внешний инструмент сравнения, изменив файл map , в "c: \ program files \ рациональный \ ClearCase \ lib \ mgrs"

WinMerge, предложенный Полом, на самом деле изменяет этот файл.

Каждая строка карты состоит из 3 частей: тип файла CC, действие CC и приложение.

Найдите раздел в файле карты для типов файлов text_file_delta. Там вы найдете строки для операций CC сравнения, xcompare, merge и xmerge, которые выглядят так:

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

Вы можете заменить их на исполняемый файл выбранного вами инструмента сравнения .


Или простой скрипт diff

Если вы хотите использовать полную командную строку для этого (что мне нравится ;-)), небольшой ccperl может помочь:

#!/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";

Предупреждение: расширенный путь (@@\...) доступен только в динамическом представлении (M:\..., а не в режиме моментального снимка (c:\...).

Скрипт не имеет ничего общего с файлом map, представленным выше:

  • этот файл определяет «Менеджеры слияния типов».
  • Этот скрипт позволяет вам запускать любой менеджер слияния для любого файла, который вы хотите, не читая файл карты, чтобы найти подходящий файл diff для использования с данным файлом.

Здесь вы предоставляете сценарию обе информации: файл (в качестве параметра) и исполняемый файл (в рамках реализации сценария: замените mydiff на любой другой желаемый файл).


Или улучшенный сценарий сравнения (работает также в статическом режиме и в режиме моментального снимка)

Вот версия этого скрипта, которая работает как для моментального снимка, так и для динамического просмотра.

Для просмотра снимков я использую предложение chacmool: cleartool get.

Опять же, вы можете заменить команду diff, включенную в этот скрипт, выбранным вами инструментом.

#!/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";
6 голосов
/ 18 декабря 2008

Другим вариантом является использование Git + ClearCase (или см. this или this ) и просто diff с Git.

Это невероятно легко настроить, и, по моему опыту, на самом деле мозгу меньше вредно использовать две системы VCS одновременно, чем пытаться превратить CC в инструмент 21-го века.

Просто думайте о Git как о мосте между CC и diff: -)

5 голосов
/ 19 сентября 2013

Кажется, кто-то уже думал об этом на snip2code!
Вот скрипт bc tcsh, который делает именно то, что вы хотите.

Custom-Diff-инструмент-для-Clearcase-объекта

Как видите, код ключа для получения предыдущей версии данного файла:

cleartool descr -pred -short $1

Где $1 - имя файла для сравнения.


#!/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} &
4 голосов
/ 30 сентября 2013

Kdiff3 имеет встроенную интеграцию. Откройте инструмент - перейдите в «Настройки» -> «Настроить» -> «Интеграция» и нажмите кнопку «Интегрировать с ClearCase». Этот инструмент имеет отличную поддержку трехстороннего сравнения, обрабатывает UTF-8, и благодаря этой автоматической интеграции вам не нужно беспокоиться о типах элементов и т. Д. В файле карты.

3 голосов
/ 10 сентября 2010

Вот ссылка на документацию IBM по изменению инструмента различий ClearCase XML:

Изменение XML-менеджера различий / типов слияния

http://www -01.ibm.com / поддержка / docview.wss? Rs = 984 & UID = swg21256807

3 голосов
/ 18 декабря 2008

У меня есть другой способ работы на основе предложений здесь. Я обнаружил команду gettool cleartool, поэтому я выполняю ее, чтобы получить предыдущую версию во временный файл:

cleartool get -to fname.temp fname @@ предшественник

Затем запустите мой diff и удалите этот файл.

Спасибо за все предложения.

1 голос
/ 18 декабря 2008

Вы можете попробовать использовать этот трюк :

  1. Создать пустой файл

    % touch empty

  2. Получить для версии A

    % cleartool diff -ser empty File@@/main/28 > A

  3. Получить для версии B

    % cleartool diff -ser empty File@@/main/29 > B

  4. Разница и прибыль!

    % your-diff-here A B

Поместите его в скрипт и сделайте опции более гибкими, и вот он у вас.

Если вы хотите, вы можете легко убрать разницу в прозрачном орудии с небольшим количеством awk или cut или perl или вашим ядом на выбор.

Ура для ClearCase!

0 голосов
/ 05 января 2015

Обычно я так поступаю.

Для унифицированной разности cleartool diff -pred <my file>

Для графического сравнения cleartool diff -pred -g <my file>

0 голосов
/ 15 ноября 2010

Для меня это прекрасно работает:

%vimdiff my_file.c my_file.c@@/main/LATEST
0 голосов
/ 23 февраля 2009

WinMerge, как уже упоминалось, автоматически обнаруживает установку ClearCase и изменяет файл карты в пути установки Clearcase.

У меня возникли проблемы, когда ClearCase вместо этого откроет собственный инструмент сравнения, поскольку установка WinMerge не изменила все необходимые позиции. Поэтому рекомендуется прочитать документацию по ClearCase, чтобы при необходимости можно было исправить ее вручную.

...