|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
07.03.2010, 04:37 | #1 |
Гость
Сообщений: n/a
|
Перевод патчей под новые ревизии.
Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a)
Возьмем, к примеру, часть патча добавляющая auctionhousebot. В котором, у меня, возникает ошибка. Пример: 01.patch У меня ошибка была в этом блоке патча, ошибка в файле mail.cpp. Это обычно показано в начале одного из блоков патча.(я выделил фиолетовым) 1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных) 2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter 3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки. 4. Открываем патч который пропатчился с ошибками, и на основе лога ищем в нём блок который пропатчился с ошибкой. Делаем это основываясь на номере строчки или название файла которая/ый пропатчилась/ся с ошибкой. Я ориентируюсь на основе: (Старайтесь при возможность ориентироваться не только по одной строчке, т.к. они повторяются.) Код:
// will delete item or place to receiver mail list Теперь ищем строчку со знаком -, в патче, которую Git должен удалить или заменить. В моём случае это строчка: Код:
- SendMailTo(MailReceiver(receiver,receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay); 6. Открыв файл Mail.cpp нажимаем CTRL+F, в появившемся окне поиска вводим строчку которая до знака минуса, или предыдущую. (Тоесть, мы ищем ориентировочную строчку) К примеру, у меня вместо заменяемой строчки стоит следующее: Код:
Player *receiver = sObjectMgr.GetPlayer(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER)); Пример того что должно получиться: 02.patch Жмём сохранить. 7. В заключении ещё одна важная вещь. Адрес изменения. На отдельном примере Обратите внимание на цифры в адресе изменения. @@ -1168,10 +1168,10 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] -1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать, и удалять не нужные строки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во удаляемых строчек. +1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать и добавлять и или изменять нужные строчки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во добавляемых строчек. OpcodeHandler opcodeTable[NUM_MSG_TYPES] Название блока в исходнике, в котором происходит изменение. Пример: 03.patch 8. Запускаем консоль Git, как мы делали во 2 пункте, и применяем патч, лучше это делать на чистых исходниках. Если не получилось, делаем по новой. Альтернативный способ. Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a) В этом способе мы подгоняем подгоняем патч под имеющиеся исходники. Исходный кусок кода патча для примера: 1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных) 2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter 3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки. 4. Открываем патч. Ищем на основе результата применения патча в Git'e ищём нужный блок в котором была ошибка. В моём примере. Начало блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/Group.h b/src/game/Group.h В моём примере. Конец блока вносимых изменений из патча в исходный файл нужного кода, это : #define GROUP_UPDATE_FLAGS_COUNT 20 В моём примере. Начало следующего блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp 5. Открываем файл, в моём примере это Group.h, и ищем строчку из патча начинающуюся со знака "-". И заменяем эти строчки на строчки которые начинаются со знака + 6. После того как вы внесли все изменения из ошибочного блока патча, удалите этот блок из патча. И продолжите дальше исправление ошибок. Аккуратно изменяйте патч, при удалении не задевайте другие блоки. После всех необходимых попробуйте добавить патч на чистые исходники. P.S. Возможны краши после подгонки патчей. Взял с rumangos.ru, а они похоже у вас. Отредактировал под Git, поправьте пожалуйста если есть ошибки. . . Дополнил. Последний раз редактировалось Max; 12.03.2010 в 17:21. |
Пользователь сказал cпасибо: | Kolorado (01.10.2013) |
11.03.2010, 18:03 | #2 |
Гость
Сообщений: n/a
|
Альтернативный способ
Последний раз редактировалось Max; 12.03.2010 в 17:22. |
13.03.2010, 14:28 | #3 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Чаще всего достаточно совершить меньше действий.
Накатываем патч, получаем (местами) reject Не закрываем git - идём в папку пропатченных исходников и ищем файл, в котором мы словили reject. Например, reject выпал на player.cpp. Находим два файла: player.cpp и player.cpp.rej. Открываем оба и сразу. Файл с расширением .rej содержит только ту часть кода патча, которую git не смог сам определить куда будет правильно подставить. Далее как в мануале. Только мы всегда работаем не с целиковым файлом патча, а лишь с теми, где возник редж и лишь с той его частью, которую не смог применить git автоматически. Обновление патчей: накатили, поправили реджы, выполнили команду git diff > путь/имя_файла_патча.patch - всё готово. Но это уже больше к командам гита относится, а не переводу патча под новые ревы... |
4 пользователя(ей) сказали cпасибо: | Kolorado (01.10.2013) |
01.04.2010, 15:41 | #4 | ||||||
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
может этот мануал тож комуто пригодится
Исправления конфликтов Берем патч (я показываю на патче venciles ) патчим исходники командой: Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Автор: MangMan Последний раз редактировалось tempura; 03.04.2010 в 00:48. |
||||||
Пользователь сказал cпасибо: | Kolorado (01.10.2013) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Структура раздела патчей | virusav | Патчи | 8 | 27.09.2010 15:20 |
Новые арены | Limpnau | Баг-репорты | 3 | 16.03.2010 18:43 |
Шанс по рассмотрению патчей | Vladimir | Патчи на рассмотрении | 3 | 08.03.2010 18:46 |