Показать сообщение отдельно
Старый 07.03.2010, 04:37   #1
Max
Гость
 
Сообщений: 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);
5. Заходим в папку с исходниками, заходим в папку "src/game/", находим файл на который ссылалась ошибка, и открываем с помощью Visual Studio или блокнота файл, на который Git сослался с ошибкой. У меня в примере Git сослался на файл - Mail.cpp
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)