Механизм обновления

Механизм обновления

от Александр Карпенко -
Количество ответов: 6
Всем доброго времени суток!

Возникла необходимость каким-либо образом переносить изменения, сделанные в скриптах Moodle на новые версии. Проблема в том, что это необходимо сколько-нибудь автоматизировать.

Пожалуйста, подскажите, есть ли известные методы для решения этой задачи?

(пока экспериментирую на winXP с пакетом xampp, в последствии планируется развернуть непереносную копию на winServer2008)

Создалось впечатление, что что-то подобное можно реализовать с помощью CVS, в частности TortoiseCVS. Но до реализации довести эту идею не удалось.
В ответ на Александр Карпенко

Re: Механизм обновления

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
CVS старое и не очень удобное средство.
Мне понравился GIT (который держит свое барахло только в одном каталоге, а не в кажом как SVN/CVS). По GIT-у достаточно документации и статей.

В ответ на Александр Карпенко

Re: Механизм обновления

от Dmitry Pupinin -
Ваше впечатление верно. улыбаюсь
Перенос изменений существенно упрощается при использовании систем контроля версий. Разработчики Мудл используют GIT и интерфейс совместимости с CVS.
Сразу хочу посоветовать вам отказаться от CVS, т.к. это централизованная система, и на центральный сервер никто не позоволит вам зафикировать (коммитить) свои изменения, поэтому они будут накапливаться локально и после нескольких изменений вам уже придется разбираться правки каких файлов относятся к первому изменению, какие ко второму и т.д. (это из собственного опыта).
GIT децентрализованная система, так что вы получите на локальную машину полный репозитарий. Это значит что вы можете создавать локальные ветки, коммитить изменения делая комментарии, перемещаться по версиям и все это без подключения к сети. Ну а переместить все свои изменения на новую версию можно одной единственной командой rebase.
Доп.инфомация: http://docs.moodle.org/en/Category:Developer_tools
В ответ на Dmitry Pupinin

Re: Механизм обновления

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Тут дело даже не в различии CVS и GIT.
Ваши изменения относительно исходной версии оформляются diff-патчами. Это можно сделать как утилитой diff, так и другими инструментами для работы с CVS или GIT, они всё равно запустят diff. То есть, сделав какие-то изменения вы сохраняете патч, который потом применяется ко всем обновлённым версиям. GIT позволяет хранить всю историю изменений в одном дереве, но для надёжности, созданные патчи лучше хранить ещё и отдельно.
Обычно diff-патч подержит несколько строк исходного кода до того места, где вы сделали изменения (это нужно для поиска места в файле), потом те строки, которые вы убрали, потом те, которые добавили, и несколько строк кода после. Такой патч всегда идеально подходит к той версии кода, для которой он создавался. А вот если версия другая - он начинает искать подходящие фрагменты кода. Так как кода в мудле много, а правки обычно незначительные, то даже через год многие патчи подходят.
Но в ряде случаев возникаю ошибки - если в коде есть несколько идентичных фрагментов, если в новой версии кто-то другой внёс изменения в те же самые фрагменты, что и вы, какой-то код был существенно переработан и т.п. В этом случае необходимо вруччную исправлять конфликты. В моей практике таких конфликтов 1 на 10 патчей. И от этой проблемы не спасает ни GIT, ни CVS.
GIT и CVS всего лишь снимают с вас часть работы по созданию патча, загрузки обновлённой версии и применению патча к ней. Если Вы разработчик, то в GIT удобно хранить всю историю собственных правок, но она будет постоянно перемешиваться с правками других участников, это раздражает. Плюс GIT-у не всегда просто объяснить, какие именно правки объединять, а какие нет, какая ветка сейчас активная, и т.п. Если Вы админ, то лучше просто хранить набор патчей и применять их после каждого обновления, а случае, если патч не подошёл, идти к разработчику за новым.
Хочу сразу предупредить, в случаях, когда конфликтов при слиянии ваших изменений с обоновлённой версией не возникает, всё работает на ура, как с CVS, так и с GIT. А вот если возникают конфликты, то в случае неумелого использования и GIT, и CVS может "намусорить" в скриптах информацией о собственной точке зрения на конфликт, сделав всю систему неработоспособной.
В ответ на Vadim Dvorovenko

Re: Механизм обновления

от Ильгизар Гайнутдинов -

Как применить diff патч? и как он работает?

В ответ на Ильгизар Гайнутдинов

Re: Механизм обновления

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

берем утилиту patch. Ей на вход передаем .diff-файл.

сам .diff очень простой - обычно это 3 строки до места исправления, потом само исправление и потом 3 строки после места исправления. Если удалось найти в тексте исходный текст, то исправляем, иначе в .rej пишем часть патча которая не применилась

В одном патче можно исправлять много мест во многих файлах.

Патч может удалять и создавать файлы