Перевод патчей под новые ревизии.
Вложений: 4
Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a)
Возьмем, к примеру, часть патча добавляющая auctionhousebot. В котором, у меня, возникает ошибка. Пример: Вложение 124 У меня ошибка была в этом блоке патча, ошибка в файле 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)); Пример того что должно получиться: Вложение 125 Жмём сохранить. 7. В заключении ещё одна важная вещь. Адрес изменения. На отдельном примере Обратите внимание на цифры в адресе изменения. @@ -1168,10 +1168,10 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] -1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать, и удалять не нужные строки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во удаляемых строчек. +1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать и добавлять и или изменять нужные строчки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во добавляемых строчек. OpcodeHandler opcodeTable[NUM_MSG_TYPES] Название блока в исходнике, в котором происходит изменение. Пример: Вложение 126 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, поправьте пожалуйста если есть ошибки. . . Дополнил. |
Альтернативный способ
|
Чаще всего достаточно совершить меньше действий.
Накатываем патч, получаем (местами) reject Не закрываем git - идём в папку пропатченных исходников и ищем файл, в котором мы словили reject. Например, reject выпал на player.cpp. Находим два файла: player.cpp и player.cpp.rej. Открываем оба и сразу. Файл с расширением .rej содержит только ту часть кода патча, которую git не смог сам определить куда будет правильно подставить. Далее как в мануале. Только мы всегда работаем не с целиковым файлом патча, а лишь с теми, где возник редж и лишь с той его частью, которую не смог применить git автоматически. Обновление патчей: накатили, поправили реджы, выполнили команду git diff > путь/имя_файла_патча.patch - всё готово. Но это уже больше к командам гита относится, а не переводу патча под новые ревы... |
может этот мануал тож комуто пригодится
Исправления конфликтов Берем патч (я показываю на патче venciles ) патчим исходники командой: Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Автор: MangMan |
Текущее время: 18:30. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS