Есть какой-нибудь способ использовать пользовательский инструмент diff с cleartool / clearcase?

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

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

Есть какой-нибудь способ сделать это?

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

Это было полезно?

Решение 5

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

cleartool возвращает fname.temp fname@@предшественник

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

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

Другие советы

Как изменить инструменты diff по умолчанию

Вы можете указать внешний инструмент diff с помощью изменение файла Карта, в разделе "c:\program файлы ational\ClearCase\библиотека\mgrs"

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

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

Найдите раздел в файле карты для типов файлов text_file_delta.Там вы найдете строки для CC actions compare, 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 tool.


Или простой скрипт 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файл, представленный выше:

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

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


Или улучшенный скрипт diff (работает и в статических представлениях / моментальных снимках)

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

Для просмотра моментального снимка я использую предложение 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";

Другой вариант заключается в использовании ГИТ+ClearCase В (или увидеть это или это) и просто diff с Git.

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

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

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

Пользовательский инструмент-различия-для-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} &

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

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

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

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

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

  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

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

Если вы хотите, вы могли бы легко удалить cleartool diff crud с помощью небольшого awk или cut или perl или яд по вашему выбору.

Ура ClearCase!

Я установил "WinMerge" (бесплатный инструмент diff), и он сам установился как инструмент clearcase diff.Я не уверен, как он это сделал.

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

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

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

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

Обычно я поступаю следующим образом.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top