Страница 1 из 2

Утилита patch 2 MOD (теперь есть)

Добавлено: 07.01.2006 10:42
ETZel
Есть ли такая утилита, которая patch файлы переделывает в mod файлы в синтаксисе phpBB? Это очень бы упростило создание и обновление модов (не руками же все эти update_22_to_33.mod создают) :?:

Добавлено: 07.01.2006 10:59
IncominG
ETZel
Боюсь что вручную...

Добавлено: 07.01.2006 12:00
Balamut
ETZel
для EasyMod?

Добавлено: 07.01.2006 13:12
ETZel
Smayliks, я не использую EasyMOD, тк большинство модов далеки от совершенства и приходится их переделывать по ходу установки (ну или после установки - все равно лучше знаешь: что, куда и как вставлял).

С такой утилитой моды и обновления для них можно было бы создавать автоматом из CVS и не париться с ручным составлением файлов .mod
(все-таки гуманоидам .mod понятней чем .diff)

Добавлено: 08.01.2006 20:51
[R: R@m$e$ :U]
хм... лично я делаю все в ручную...

Добавлено: 08.01.2006 22:23
Balamut
ETZel писал(а):Smayliks, я не использую EasyMOD,
тогда смысл переделывания?
ETZel писал(а):все-таки гуманоидам .mod понятней
Ой ли? Не один десяток сообщений видел, где люде в винампе *.mod открывали...

Добавлено: 09.01.2006 1:32
Coagulant
Smayliks писал(а):Ой ли? Не один десяток сообщений видел, где люде в винампе *.mod открывали...
Речь была не о том, что это понятно для всех. А о том, что .mod понятнее, чем .diff. C чем не могу не согласиться.

По сабжу - сам всё делаю ручками. От подобного софта бы не отказался, апдейты писать к модам - одно наказание. :D

Добавлено: 09.01.2006 9:42
[R: R@m$e$ :U]
а теперь вопрос... и как вы представляете реализацию этого софта? 0_о сравнивать по инсталяторам двух версий? или как? а у меня обновление не от версии к версии, а от версии к последней... это как реализоовать?

Добавлено: 10.01.2006 23:50
ETZel
Объясняю вкратце, зачем это надо (для тех, кто знает, что такое CVS)
Допустим, я хочу написать мод "Super MOD".
1) Беру свежую версию форума, ставлю на локальный сервер, кладу под CVS (например, под именем phpbb-mods). Либо делаю ветку (branch) уже имеющегося форума (с именем supermod). Вешаю тег supermod-0-1-0.
2) Дальше пишу мод: меняю файлы, добавляю новые и т.д. (все коммиты идут в ветку supermod). Когда чувствую, что "дошел" до версии 0.1.1, вешаю тег supermod-0-1-1.
3) Пора опубликовать мод - пусть народ потестирует. Делаю rdiff

Код: Выделить всё

cvs rdiff -c -r supermod-0-1-0 -r supermod-0-1-1 phpbb-mods > supermod011.patch
Получаю фактически готовый мод в формате patch (supermod011.patch), в нем зафиксированы все изменения и все новые файлы! Осталось применить магическую (и, похоже, несуществующую) утилитку patch2mod - вуаля! supermod011.mod, полученный полностью автоматически.
Конечно, с бинариками типа картинок придется разбираться отдельно. но это мелочи...
4) Дальше еще круче. Народ нашел кучу багов - фиксим их, добавляем новые фичи, получаем версию 0.1.2. Вешаем тег supermod-0-1-2. Тем же rdiff'ом получаем supermod012.patch и (тада!) supermod_update_011_to_012.patch ! rdiff можно сделать между любыми двумя ревизиями (что и нужно тов. Рамзесу). Можно даже сделать rdiff c более новой версии на старую (например, соорудить патч для удаления мода). Снова магическая утилитка - и в сеть...
На форуме, кстати, были обсуждения, что .patch файлы можно устанавливать автоматически, похлеще всяких EasyMOD'ов. Так что имеет смысл patch публиковать тоже.
И это самый простой сценарий использования CVS... :D

Товарищи гуру :!: Хочу написать статью типа "Использование CVS при создании модов". Оно кому-нибудь надо? :?: Похоже, мало кто пользуется этой удобнейшей вещью. А это не так сложно, как кажется.

Возвращаясь к теме: видимо, придется самому соорудить php-шничек, который бы перегонял patch в mod. И настанет благодать...

PS. просто раньше я не публиковал свои моды, а сейчас вот назрела необходимость.

Добавлено: 11.01.2006 0:58
Coagulant
Обсуждение про patch и diif в качестве замены модов :wink:
http://www.phpbbguru.net/community/viewtopic.php?t=2912

ETZel, возьметесь? Был бы здорово забыть про оформление и заниматься исключительно написанием модов.

Добавлено: 11.01.2006 2:04
ETZel
Coagulant писал(а):ETZel, возьметесь?
Да, возьмусь. К тому же работенка несложная.

Добавлено: 11.01.2006 9:05
Xpert
ETZel писал(а):Хочу написать статью типа "Использование CVS при создании модов". Оно кому-нибудь надо?
Надо...
Coagulant писал(а):Было бы здорово забыть про оформление и заниматься исключительно написанием модов.
Действительно. А то процесс собирания измененных кусков по файлам иногда приводит к тому, что некоторые куски по дороге теряются...

Добавлено: 15.01.2006 10:47
ETZel
Спросил про patch2mod на офсайте (http://www.phpbb.com/phpBB/viewtopic.php?t=357714). Сделал вывод, что у них такой нет и им не надо. (mod studio, правда, последний раз видел полгода назад, но сомневаюсь что она сильно изменилась)

Сделал первую убогую версию своей утилиты, пользоваться так:

Код: Выделить всё

patch2mod.php <файл_с_патчем>
Патч должен быть в формате unidiff (его проще всего парсить ;) )

А лучше так (из project root):

Код: Выделить всё

patch2mod.php <ревизия_1> <ревизия_2>
Пока НЕ умеет:
1) угадывать INLINE ADD и INLINE REPLACE
2) создавать новые файлоы из rdiff'a (даже не пытайтесь)
3) определять какие файлы принадлежат моду, а какие - нет
4) работать быстро (патч 1,5 метра - 5 секунд)

Добавлено: 15.01.2006 10:51
Xpert
ETZel писал(а):Использование CVS при создании модов
Чувствуется подобная статья лишней не будет 100%.

Продолжение истории...

Добавлено: 02.05.2006 9:44
ETZel
В связи с вот этой темой на офсайте усовершенствовал patch2mod.
(а) Теперь может работать без CVS, просто сравнивая два каталога (чистый phpbb и модифицированный).
(б) Добавляет заголовок мода, автоматически заполняя поля Changed Files и Included Files. Я бы рекомендовал поправить шаблон мода в конце patch2mod.php и заранее заполнить поля author/title/history и т.д., чтобы не париться после каждой перегенерации).
(в) Худо-бедно детектирует IN-LINE операции.

Для работы без CVS нужен GNU diff. Windows-порт его входит в состав MSYS (скачать 4 мб с sourceforge и установить).

Работает так (для сравнения 2-х директорий):

Код: Выделить всё

php.exe -f patch2mod.php d:\clean-phpbb-dir d:\modded-phpbb-dir
Если будет жаловаться, что "Can't find GNU diff", добавьте c:\msys\1.0\bin в PATH или в скрипте в строке

Код: Выделить всё

$DIFF = 'diff';
пропишите полный путь к вашему diff.exe.

Внимание! FIND и особенно IN-LINE FIND контексты нуждаются в проверке и ручной правке.

С CVS работает так же как и предыдущая версия. Или так (запускать в project root):

Код: Выделить всё

php.exe -f patch2mod.php clean-phpbb-tag modded-phpbb-tag
Сам скрипт и пример того, что получается в результате: