Как сделать патч на drupal.org

16.12.2017

Сразу оговорю что детального описания по тому как найти проблему и работать с GIT для получения файла патча, здесь не будет, в этой статье только описание как его правильно оформить для того что бы патч попал в ядро или контриб модуль, внизу будут ссылки как сделать патч через GIT и разное другое, если что-то не понятно спрашивайте в комментариях, будем искать ответы.

Тема в которой сделан патч и по которой пишется данная статья http://drupal.org/node/1765756, поэтому подразумевается что мы работает с текущей версией Друпал 6.26.

Сам патч делается не на вашей версии ядра/модуля, а последней dev версии, которую нужно скачать http://drupal.org/project/drupal после чего внести наши правки и сделать файл патча. Сразу хочу сказать что все мы люди серьезные, поэтому ваш код должен соответствовать требованиям Друпал http://drupal.org/node/360052 и не нужно в файл патча включать отладочную информацию, отступы строк или объяснительные комментарии — только код и комментарии по делу, если необходимо.
Следующий момент, файл патча должен быть в кодировке UTF-8 и сохранен в формате UNIX (в Windows переход на новую строку дополняется возвратом каретки), эти ошибки видны в комментарии 8 http://drupal.org/node/1765756#comment-6490672 если нажать на ссылку «View details» у проваленого теста, будет написано — 4. Detect invalid patch format

Сам файл патча нужно правильно назвать. В имени файла не должно быть кириллицы или спец символов, только латинские символы и в нужном формате http://drupal.org/node/1054616#naming-conventions
[project_name]-[short-description]-[issue-number]-[comment-number].patch

  • [project_name] — имя проекта в который вы сделали патч (или имя модуля),
  • [short-description] — краткое описание, что делает ваш патч,
  • [issue-number] — ИД issue в котором выложен патч (берется из УРЛ),
  • [comment-number] — порядковый номер комментария в котором вы выложили данный патч.

Это нужно для того что бы если другой разработчик применит ваш патч до того как патч включат в релиз. То этот разработчик сохранит себе файл патча в отдельную папочку проекта. По прошествии любого количества времени этот разработчик или его коллега сможет по имени файла узнать зачем каждый конкретный патч, зайти в тему обсуждения патча и увидеть конкретный комментарий про этот патч.

Файл патча у нас есть, осталось найти куда его выкласть, для этого ищем по http://drupal.org в issue нашего модуля (или ядра) ищем проблему которую решает наш патч и если такого issue нет, тогда создаем сами и важно подробно описать проблему, как ее увидеть, что сделать что бы ее обнаружить … максимально полно все описываем. После этого создаем комментарий к issue. В комментарий помещаем файл патча и детальное описание как этот патч исправляет проблему и что бы наш патч прошел автоматические тесты делаем статус нашего комментария Status: needs review после этого система запустит автоматический тест патча в течении нескольких минут. Возможность тестов должна быть предусмотрена маинтенером модуля (в контриб модулях не всегда такое появится).

Как это работает видно по нашей тестовой теме http://drupal.org/node/1765756
Я создал тему и описал проблему (к сожалению писать на английском из меня слабый, поэтому тут пример брать не нужно, описания должно быть больше и понятнее). Потом выложил патч и описание как он работает. Статус у комментария (и темы) я не менял и поэтому тест не запускался. Но тут мне помог пользователь timmillwood, который установил нужный статус и система провела тест. Как видно в имени файла есть пробелы и система написала что тест не пройден. В комментарии 8 я выложил этот же патч с правильным названием, но при этом тест не пройден потому что кодировка файла не соответствует правилам. И наконец-то в комментарии 11 я уже устранил все недоработки и тест был пройден положительно.

После этого необходимо сделать детальное описание, как другие пользователи могут вручную проверить работу моего патча, для этого нужно сделать how-to check или написать simpletest.

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

Важный момент Issue tags они помечают текущее состояние Issue и майнтейнеры могут ориентироваться в ситуации по каждому Issue.

Еще один важный момент, если вы делаете патч для версии Друпал 6, то необходимо проверить эту проблему на Друпал 7 и Друпал 8 (все следующие версии тоже). И если проблема актуальна и там то сделать патчи и туда, это поможет быстрому продвижению патча в ядро.

Как сделать что бы ваш патч был замечен и обработан:

  • сделать все что здесь написано
  • подробно описывать проблему/решение/тестирование
  • правильно устанавливаться статус в комментариях
  • правильно устанавливать теги в комментариях
  • проверить актуальность патча для старших версий друпала и по необходимости сделать патчи и туда
  • не боятся просить кого-то из опытных разработчиков проверить все ли вы сделали правильно
  • отписать в http://webchat.freenode.net/ комната #drupal-contribute