13 декабря 2010

glVehicle + svn

Всем привет! В этом сообщении решил описать полный процесс установки glVehicle на Ваш компьютер ;) Чтобы не думать о том, какие демки есть, что там нового и т.д. Думаю, это будет полезно всем, кто вообще хочет познакомиться с системой контроля версий svn. А также рекомендую к прочтению тем, кто постоянно трудится, вычищая папку с проектом от всяких назойливых dcu/~pas/~dfm и других файлов. В общем, постараюсь осветить маленькие хитрости, которые, возможно, помогут Вам в работе. Надеюсь, это сообщение устранит последний барьер между исходными кодами glVehicle и монитором читателя. Вот так вот я поэтично закрутил вступление, поэтому сразу же направимся к кульминации, чтобы никого не утомить!

Что такое svn (SubVersioN)?
Итак, если сказать по-простому, то в принципе системы контроля версий предназначены для того, чтобы устранить фразы вроде: "сила креста! я же случайно стер важную процедуру и совсем ненароком сохранил файл! как же быть?". Как раз во избежание таких плачевных ситуаций, можно организовать репозиторий (или воспользоваться уже запущенными хранилищами), в который периодически будем заливать (commit/коммитеть) исходные коды программы. Что замечательно, так это то, что все версии программы (revision/ревизии) будут сохраняться в репозитории, и мы в любой момент сможем посмотреть изменения, которые мы вносили в программу, можно сравнить построчно прежнюю и текущую версию нашего кода. Сейчас немного сленга, чтобы понимать о чем люди пишут иногда. Итак, само хранилище называют репозиторием (repository, иногда сокращают до "репо"). Процесс заливания на сервер наших изменений - коммитом (commit), версию программы на сервере - ревизией (иногда коммитов бывает до сотен тысяч на проект, поэтому ориентируются строго по номеру ревизии - это уникальное число коммита в репозитории). Подробнее об svn можно почитать на просторах Интернета. Есть и другие системы контроля версий, вроде CVS и Mercurial. Первый (CVS) - уже устарел и уходит в прошлое, второй (Mercurial) - набирает обороты и скоро может вытеснить svn; но я с ним, к сожалению, пока не работал.

Какую программу лучше использовать?
Для работы с svn программ много. У меня сейчас установлены две: одна как консольный клиент, удобный для различных tools'ов; вторая - для быстрой и легкой работы через explorer. Рекомендую начать именно со второго клиента, а именно TortoiseSVN. Бесплатен, удобен, прост, вроде даже с открытыми исходниками. В общем, качаете свежую версию, устанавливаете и наблюдаете тот факт, что теперь в explorer'е доступно дополнительное меню:


Как выгрузить исходные коды glVehicles?
Все очень просто, покажу на картинках :)

Для начала нужно найти адрес, по которому располагается репозиторий, для этого заходим в раздел Source\CheckOut на сервере Code.Google проекта glVehicles:
и находим там необходимый адрес:

Копируем его в буфер обмена (Ctrl+C), пригодится.
Далее выбираете папку на локальном компьютере, в которую хотите загрузить исходники:

Теперь жмем в explorer'е правую кнопку мыши на нашей папке и находим пункт контекстного меню "Svn Checkout...":

Клацаем, в появившемся окошке вставляем (Ctrl+V) тот адрес репозитория, что мы сохранили в буфер обмена:
Нажимаем Ok, и, если соединение с Интернетом есть, а также репозиторий еще жив, то появится окошко, в котором будет виден прогресс загрузки исходников:
Вот и всё! Зайдите в папку - там будут лежать долгожданные (а может и не очень) pas-файлы:
Но есть еще один момент. Давайте откроем какой-нибудь проект из папки prj в Delphi. Зайдем в свойства проекта (Ctrl+Shift+F11) и увидим следующее:
Зачем такие сложности?
Настроив таким образом пути проекта можно добиться того, что dcu файлы будут складироваться в отдельную папку, не захламляя папки с исходниками. Также exe-файл будет сохранен в свою папку, куда можно смело сбрасывать все ресурсы для итогового проекта: картинки, dll, модели и т.д. Тем самым папки prj и src будут оставаться чистыми, имея внутри себя только файлы, относящиеся к компиляции (pas, dfm, dpr, и другие).

Как теперь все это компилировать?
Все очень просто. Для начала добавим необходимые для успешной компиляции папки dcu и exe.
Теперь, чтобы при различных манипуляциях с репозиторием, никто не ругался, что есть какие-то странные папки, не относящиеся к данному хранилищу, пометим их в качестве игнорируемых:
Такую операцию выполните для обеих папок (dcu и exe). Теперь svn клиент будет пропускать эти папки при различных операциях.

Перед запуском проектов осталось последнее - заполнение exe-директории необходимыми для корректной работы файлами. А именно:

1. dll для работы физики. 
Скопируйте b2Physics.dll из prj\dll\b2Physics.dll в папку exe\. После этого порт b2Physics.pas будет корректно работать с функциями Box2d.

2. Различные картинки, которые будут использоваться в качестве текстур объектов.
Все они хранятся в папке images\. В отличие от dll-файла из первого пункта, который меняется довольно редко и его не трудно раз в двадцать ревизий скопировать из папки dll в папку exe; так вот в отличие от него, картинки в папке images меняются довольно часто, поэтому, чтобы не копировать содержимое этой папки из одного места в другое при каждом обновлении репозитория, можно сделать такой трюк (осторожно, при использовании этого трюка, картинки будут выгружены дважды, при этом интернет трафик удвоится). 
Итак, делаем так: в папке exe создаем папку images:
А затем ассоциирую ее (exe\images) с папкой images из репозитория, которая лежит на один уровень выше.
Жмем Ok, и теперь, с одной стороны, внутри exe есть необходимая для работы папка images, с другой - она уже верным образом ассоциирована с хранилищем, что не может не радовать - ведь это может сэкономить нам кучу нервов, освобождая от постоянного копирования содержимого папки из одного места в другое!
Уф... всё!

Как обновлять исходные коды?
Теперь, для того, чтобы увидеть изменения, которые будут производиться в проекте, достаточно выполнить команду Update:
Опять появится окошко, опять побегут файлы, и сразу станет ясно, были произведены какие-то изменения или нет.
Если же вы использовали "трюк" с папкой images, тогда придется сделать еще Update и на ту папку тоже (помните, мы пометили папку exe как игнорируемую для svn-операций? так вот именно из-за этого, обновления, касаемые корневой папки glVehicles не коснутся папки exe\images и ее придется обновить вручную через меню Svn Update точно также, как и папку glVehicles на картинке выше)

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

Сообщения, схожие по тематике:

4 коммент.:

  1. Ваш проект не компилируется с последней версией GLScene, надо добавлять модуль OpenGLTokens в модуль uBox2dGLDebug. Такие вот загогулины...

    ОтветитьУдалить
  2. При запуске вылетело:
    Project prjDemo7.exe raised exception class EPBuffer with message 'WGL_ARB_pbuffer support required'

    ОтветитьУдалить
  3. Второй эксепшн:
    Project prjDemo7.exe raised exception class EInvalidRasterFile with message 'Unknown file extension (png), maybe you forgot to add the support utit to your uses? (GLFilePNG?)'

    ОтветитьУдалить
  4. Demo1 запускается, хотя внутри виртуальной машины также ругается на отсутствие поддержки ARB и в конце выругивается на Range Check тут:

    unit GLWin32Context;
    ****
    procedure UnTrackWindow(h: HWND);
    ****
    if vTrackedHwnd[i] <> h then

    ОтветитьУдалить