Глава 7 Конфигурационное управление с применением ClearCase Процесс сборки Глава 7 1 Цели Прочитав эту главу, вы сможете: • Описывать возможности Clearmake и omake • Понимать различия между неразделяемыми и разделяемыми DO • Описывать как Clearmake и omake выполняют аудит сборки • Описывать как Clearmake и omake позволяют разделять результаты сборки между разработчиками • Сохранять файлы аудита при выполнении Checkin исполняемых файлов Глава 7 2 Clearmake и omake - Определение • Варианты утилиты make, используемые в ClearCase и имеющие дополнительные возможности : Build audit – полный «bill-of-materials» (конфигурационная запись или CR) Автоматическое определение зависимостей между элементами сборки Специальный алгоритм сборки – гарантирует правильность результатов при параллельной разработоке Разделение результатов сборки между разработчиками Совместимость с make-файлами, полученными при использовании других вариантов make Глава 7 3 Сравнение Clearmake и omake • Обе утилиты являются исполняемыми и не являются подкомандами Cleartool. • Clearmake - один из вариантов утилиты make в Unix. • omake совместим совместим со сборщиками для платформы ПК такими как NMAKE • Форматы make-файлов обеих утилит различны • Clearmake может читать файлы BOS (спецификация опций разработки), содержащие макро определения make •Обеим командам требуется Dynamic View для использования возможностей build-auditing Глава 7 4 Работа из командной строки • Стандартные опции make пишутся в нижнем регистре • Опции Clearmake и omake пишутся в верхнем регистре • Опции, не имеющие аргументов, могут быть сгруппированы в командной строке (например, -VОi). • Вы должны быть в том View, чьи правила выбирают требуемые версии файлов для сборки Глава 7 5 Derived Objects - определение • Derived Object (DO) - любой файл созданный внутри VOB при сборке • Любой DO состоит из: имени файла и директории VOB идентификатора DO (DO –ID): hello.exe@@24 – Feb.16:40.234 контейнера данных конфигурационной записи (CR) или файла аудита процесса сборки Компонента в пуле db VOB (только для разделяемых DO): create derived object “hello.exe@@24 – Feb.16:40.234” references :1 • Существует 2 типа DO: разделяемый – результат обычной сборки неразделяемый - результат экспресс-сборки Глава 7 6 Что происходит в процессе разработки? •MVFS автоматически отслеживает низкоуровневые системные вызовы на данные ClearCase открытие чтение запись •Отслеживаются вызовы следующих объектов: версионные объекты view-private файлы файлы, создаваемые внутри директорий VOB при сборке явно указанные зависимости вне VOB •Информация по аудиту хранится в Configuration Record (CR) Глава 7 7 Листинг Derived Objects ClearCase Explorer отображает информацию о DО в текущем View Глава 7 8 Содержание Configuration Records (CR) Z:\Main_work> catcr bgrs.exe Target bgrs.exe built by jones.dvt Host "oxygen" running NT 3.51 (i486) Reference Time 11-Dec-94.12:02:39, this audit started 11-Dec-94.12:04:52 View was oxygen:C:\USERS\jones\views\940615.vws Initial working directory was Y:\vob1\docaux\bgr ---------------------------MVFS objects: ---------------------------\vob1\docaux\bgr\libbgr\libbgr.lib@@10-Dec.16:45.1893 \vob1\docaux\bgr\bgrs@@11-Dec.12:05.1956 \vob1\docaux\bgr\buga@@11-Dec.12:04.1926 ... ---------------------------Build Script: ---------------------------link /out:bgrs.exe main.obj pick.obj bugs.obj bugr.obj bugi.obj bugf.obj bugc.obj bugl.obj buge.obj bugd.obj buga.obj bugh.obj bugw.obj bugfld.obj bugdt.obj bugu1.obj bugu2.obj bugsched.obj ..\libbgr\libbgr.lib Глава 7 9 Иерархия Configuration Records • Иерархия CR структуру типового makeфайла hello.exe: hello.obj until.obj link-out: hello.exe hello.obj until.obj hello.exe hello.obj until.obj hello.obj : cl-c hello.c unti.obj: hello.c cl-c until.c until.c Глава 7 10 Отображение Configuration Record • Команда Cleartool catcr отображает содержание CR для результата сборки • По умолчанию, отображается CR для результата сборки, но не для промежуточного результата (для их просмотра используйте recurse). catcr -flat bgrs.exe ---------------------------MVFS objects: ---------------------------1 \vob1\docaux\bgr\buga.c@@\main\1 <19-Dec-94.11:49:03> 1 \vob1\docaux\bgr\bugc.c@@\main\1 <19-Dec-94.11:49:09> 1 \vob1\docaux\bgr\bugd.c@@\main\1 <19-Dec-94.11:49:14> 20 \vob1\docaux\bgr\bugs.h@@\main\3 <17-Jun-94.23:55:22> 1 \vob1\docaux\bgr\bugsched.c@@\main\1 <19-Dec-94.11:50:07> Глава 7 11 Сравнение Configuration Records • Используйте команду cleartool diffcr для простого сравнения Configuration Records двух DO. • Определяются следующие различия: Версий MVFS объектов, используемых в качестве источников Объектов, полученных при сборке Версий не-MVFS объектов, появляющихся как зависимости make-файла в процессе сборки (для omake) Общее количество упоминаний объекта при сборке и первый результат, в котором объект упоминался Опции сборки Выполненный при сборке скрипт Глава 7 12 Пример сравнения CR diffcr –flat bgrs.exe bgrs.exe@@11-Dec.12:05.1956 < Reference Time 11-Dec-98.15:23:52, this audit started 11-Dec-98.15:23:59 > Reference Time 11-Dec-98.12:02:39, this audit started 11-Dec-98.12:04:52 < View was DRIVE:\users\jones\views\main.vws [uuid 66e68edc.471511cd.ac55.08:00:2b:33:ec:ab] > View was DRIVE:\users\jones\views\r1_fix.vws [uuid 8b468fd0.471511cd.aca5.08:00:2b:33:ec:ab] ------------------------------------------------------MVFS objects: ---------------------------< \vob1\docaux\bgr\bgrs.exe@@11-Dec.15:24.1987 > \vob1\docaux\bgr\bgrs.exe@@11-Dec.12:05.1956 ---------------------------< \vob1\docaux\bgr\bugs.obj@@11-Dec.15:23.1981 > \vob1\docaux\bgr\bugs.obj@@11-Dec.12:03.1902 ---------------------------< \vob1\docaux\bgr\bugsched.obj@@11-Dec.15:23.1984 > \vob1\docaux\bgr\bugsched.obj@@11-Dec.12:04.1953 Глава 7 13 Определение DO установок для View • Свойства DO во View отображаются в овне свойств View. Глава 7 14 Не разделяемые DO • Являются результатом экспресс-сборки • Определяются свойствами неразделяемых DO во View используемом для построения. • Обеспечивается лучшую производительность по сравнению со сборкой разделяемых DO Не записываются в папку db VOB. VOB не требует блокировкой VOB db в процессе записи. Все результаты сборки хранятся во View, в котором происходит сборка • DO недоступны для wink-in из другого View, но могут повторно использоваться в своем View • Может быть преобразованы в разделяемые • Повторная сборка перезапишет существующий DO. • Обычно используется при отладке до этапа интеграции Глава 7 15 Не разделяемые DO - хранение src View 1 Storage .cmake.state Data Container V I E W CR Глава 7 hello.obj 16 Конвертация неразделяемых DO в разделяемые • Неразделяемые DO могут быть преобразованы в разделяемые по средством перемещения и в VOB. • Возможны 2 метода: • Использование сleartool winkin • Использование view_scrubber –p • Если неразделяемый DO имеет субэлемент, они встраиваются (wink-in) автоматически • Однажды сконвертированный DO не может быть преобразован обратно • В процессе wink-in/promotion неразделяемый DOID, изменяется в соответствии системой именования VOB DO Глава 7 17 Пример конвертации DO в разделяемый winkin hello.exe Promoting unshared derived object "hello.exe" Winked in derived object "hello.exe» winkin –recurse main.exe@@04-Sep.16:03.34 Promoting unshared derived object “\mg_test\main.exe” Winked in derived object “\mg_test\main.exe Promoting unshared derived object “\mg_test\main.obj” Winked in derived object “\mg_test\main.obj” Promoting unshared derived object “\mg_test\sibling.exe” Winked in derived object “\mg_test\sibling.exe” Promoting unshared derived object “\mg_test\test.obj” Winked in derived object “\mg_test\test.obj” Глава 7 18 Разделяемые DO • Два типа разделяемых DO: неразделяемый – потенциально может быть встроен (winkin) в другое View. разденный - копируется в VOB и в дальнейшем автоматически встраивается в другие View. • DO- ID уникальны и отслеживаются VOB • Определяются свойствами разделяемого DO во View, используемом при сборке • Представление переменное. • Компромисс производительности: первоначальная сборка происходит дольше из-за записи в VOB и процесса wink-in • Используется для ночной (фоновой) сборки когда результат будет использоваться большим числом разработчиков Глава 7 19 Разделяемые DO - хранение src View 1 Storage .cmake.state Data Container V I E W CR hello.obj View Storage Database Catalog Entry VOB Database 14-Jan-99.09:54:56 morris.engineers@xingu create derived object "hello.obj@@14 Jan.09:54.617" references:1 (unshered) Глава 7 20 Перевод DO в разделенные - до того src View 1 Storage CR Data Container V I E W .cmake.state hello.obj View 2 Storage View Storage DO Pool Database Catalog Entry VOB Database 14-Jan-99.09:54:56 morris.engineers@xingu create derived object "hello.obj@@14 Jan.09:54.617" references:1 (unshered) Глава 7 21 Процесс wink-in src V I E W View 1 Storage CR Data Container .cmake.state hello.obj View 2 Storage move copy V I E W src hello.obj View Storage VOB Database CR Catalog Entry DO Pool Data Container Глава 7 22 Что такое Configuration Lookup ? • Конфигурационный Lookup определяет: пересобран ли DO при выполнении скрипта, или использован существующий DO из другого View, или повторно использован текущий DO • Сравнение CR DO, построенных в другом View, и CR DO из текущего View • Разделяемые DO возникают из 2-х источников: Кэш DO в VOB Другой View Глава 7 23 Неразделяемые DO • Характеристики неразделяемых DO: Вновь создаваемые DO доступны только во View, где созданы Контейнер данных и CR хранятся во View, а записи в каталоге db хранятся в VOB. Если Вы удаляете DO, контейнер данных, и запись в каталоге db также удаляются • Если Вы используете сleartool rmdo, то неразделяемые DO становятся View-Private файлами • Операции, ссылающиеся на CR или записи в каталоге db VOB становятся невозможными. (т.е. catcr, diffcr, lsdo и т.д.) Глава 7 24 Как разделяемые DO становятся разделенными • При пересборке (с clearmake / omake) VOB проверяется на наличие разделяемых DO , которые точно совпадают с критерием View • Если разделяемый DO найден в другом View, он переносится из хранилища того View в хранилище VOB, а затем активизируется (wink-in) в Ваше View • Если DO находится в кэше, он активизирован (wink-in), что позволяет ему появляться в Вашем View даже, если его данные файловой системы находятся в кэше DO VOB. Глава 7 25 Использование View Scrubber • View Scrubber очищает хранилище privateобъектов View путем удаления оттуда контейнеров данных DO • Запускается вручную командой view_vcrubber [-p] [-k] [-n] [do-pname…] • По умолчанию уничтожаются контейнеры DO, которые были перенесены в VOB Глава 7 26 Определение зависимостей при сборке релиза • Утилиты сборки clearmake / omake определяют источник зависимостей не объявленных в make-файле явно. Пример: Makefile: helo.exe: hello.obj util.obj link -cut:hello.exe hello.obj util.obj hello.obj: cl -c hello.c util.obj: cl -c util.c hello.c: #include “hello.h” int main() {... Глава 7 27 Check In DO • DO, помещаемые (check in) в версионное дерево называются версиями DO • Имеется возможность доступа к CR версий DO • Используйте опцию –from команды cleartool checking для: project bin VOB hello.exe src hello.exe hello.exe Глава 7 •копирования данных из другого раздела в версионное дерево и сохранении CR вместе с DO •опция –from используется только при копировании из другого раздела 28 Пример Checking DO • Когда вносится (check in) DO из другого раздела не копируйте, не перемещайте и не переименовывайте результат сборки, иначе CR не будет сохранена вместе с версией DO. Глава 7 29 Check In CR • Чтобы проверить только CR DO используется опция –cr команды cleartool checking • Пример: • Если Вы используете этот метод для check in DO, данные DO не сохраняются, но можно увидеть DO по командам dir и сleartool ls: Глава 7 30 Контрольные вопросы • Каковы возможности clearmake / omake? • Что такое разделяемые DO и неразделяемые DO? • Что такое аудит сборки? • Что делает команда cleartool winking? • Какие опции используются с командами cleartool checking, чтобы сохранить CR вместе с исполняемым файлом или заменить файл в состоянии checkedout другим при checkin? Глава 7 31