Версия:

Руководство разработчика / Рекомендации / Рекомендации для разработчиков
Руководство разработчика / Рекомендации / Рекомендации для разработчиков

Рекомендации для разработчиков

Рекомендации для разработчиков

Как работать над дефектами

На любой дефект, даже незначительный, если он изменяет доступное пользователю поведение сервера, необходимо составить отчет об ошибке. Сообщите о дефекте по ссылке http://github.com/tarantool/tarantool/issues.

Когда вы сообщаете об ошибке, постарайтесь сразу же приступить к тестовому сценарию. Установите текущую контрольную точку для исправления ошибки и укажите серию. Назначьте задачу на себя. Укажите статус «In progress» (выполняется). Как только патч готов, укажите статус ошибки «In review» (на рассмотрении) и отправьте версию с исправленными ошибками на рассмотрение.

После успешного рассмотрения кода опубликуйте патч и укажите статус «Closed» (закрыт).

Патчи для исправления ошибок должны содержать ссылку на соответствующую страницу дефекта Launchpad или хотя бы идентификатор дефекта. Каждому патча должен соответствовать отдельный тест, если только это не слишком трудно сделать в текущем окружении, и в этом случае следует предупредить тестировщиков.

Когда ваш патч доходит до главной ветки проекта, нужно сделать следующее:

  • перевести статус ошибки в „fix committed“ (исправлено),
  • удалить отдельную ветку.

Как писать сообщение о коммите

Любой коммит следует описать в полезном сообщении. Следуйте нижеприведенным рекомендациям при коммитах в любой репозиторий Tarantool’а на GitHub.

  1. Отделяйте тему от тела сообщения пустой строкой.
  2. Постарайтесь ограничить тему сообщения примерно 50 символами.
  3. Начните тему сообщения с прописной буквы, если ей не предшествует префикс с именем подсистемы и точка с запятой:
    • memtx:
    • vinyl:
    • xlog:
    • replication:
    • recovery:
    • iproto:
    • net.box:
    • lua:
    • sql:
  4. Не заканчивайте тему сообщения точкой.
  5. Не пишите «gh-xx», «closes #xxx» в строке темы.
  6. В теме сообщения используйте повелительное наклонение. Правильно оформленная тема Git-коммита должна корректно дополнять следующее предложение: «Если применить, коммит /здесь тема сообщения/».
  7. Уместите тело сообщения в примерно 72 символа.
  8. Используйте тело сообщения, чтобы объяснить, что и почему, а не как.
  9. Привяжите задачи на GitHub в последних строках (см. как).
  10. Используйте настоящие имя и адрес электронной почты. Членам проектной команды Tarantool’а рекомендуется указывать почту на @tarantool.org, но это необязательно.

Шаблон:

Кратко сформулируйте изменения в пределах 50 символов.

 При необходимости, более подробные объяснения.
 Уместите детали в примерно 72 символов.
 Иногда первая строка считается темой
 коммита, а остальной текст -- телом сообщения.
 Критически важна пустая строка, которая отделяет тему от тела сообщения
 (если только тело не отсутствует совсем); различные средства, такие как `log`,
 `shortlog` и `rebase` могут их перепутать, если нет разделения.

 Объясните проблему, которую решает данный коммит. Уделите внимание тому, почему
 вы вносите эти изменения, а не как (это объясняется в коде).
 Есть ли побочные эффекты или другие неочевидные последствия применения этих
 изменений? Здесь можно объяснить их.

 Следующие абзацы идут после пустых строк.

 - Можно также использовать элементы в списке.

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

 Исправляет: #123
 Закрывает: #456
 Необходим для: #859
 См. также: #343, #789

Некоторые реальные примеры:

Основано на [1] и [2].

Как отправить патч на рассмотрение

Мы не принимаем запросы на включение в проект на GitHub. Вместо этого все патчи следует отправлять в виде обычного текстового сообщения по адресу tarantool-patches@freelists.org. Просьба подписаться на рассылку https://www.freelists.org/list/tarantool-patches, чтобы убедиться, что ваши сообщения добавляются в архив.

  1. Подготовка патча

После коммита патча в локальный репозиторий git вы можете отправить его на рассмотрение.

Чтобы подготовить сообщение, воспользуйтесь командой git format-patch:

$ git format-patch -1

В результате последний коммит в локальном репозитории git будет отформатирован в виде обычного текстового сообщения в файл в текущей директории. Название файла будет выглядеть так: 0001-тема-коммита.patch. Чтобы указать другую директорию, используйте опцию -o:

$ git format-patch -1 -o ~/patches-to-send

После форматирования патча его можно просмотреть и отредактировать в вашем любимом текстовом редакторе (всё-таки это файл с обычным текстом!) Мы настоятельно рекомендуем добавить следующее:

  • ссылка на ветку, где можно найти этот патч на GitHub, а также
  • ссылку на проблему на GitHub, которую решает ваш патч.

Если патч всего один, журнал изменений должен идти сразу после --- в теле сообщения (тогда git am проигнорирует его).

Если же вы хотите отправить сразу несколько патчей (например, это важная функция, для которой нужны несколько предварительных патчей), каждый из них следует отправлять в отдельном сообщении в ответ на сопроводительное письмо. Чтобы соответствующим образом отформатировать серию патчей, передайте следующие опции в git format-patch:

$ git format-patch --cover-letter --thread=shallow HEAD~2

где:

  • --cover-letter заставит git format-patch сгенерировать сопроводительное письмо;
  • --thread=shallow отметит каждое сообщение с отформатированными патчами, которые следует отправить в ответ на сопроводительное письмо;
  • HEAD~2 (мы используем вместо -1) заставит git format-patch форматировать последние два патча в локальной ветке git, а не один. Чтобы форматировать три патча, используйте HEAD~3, и так далее.

После успешного выполнения этой команды все ваши патчи будут отформатированы в виде отдельных сообщений в текущей директории (или в директории, указанной с помощью опции -o):

0000-cover-letter.patch
 0001-first-commit.patch
 0002-second-commit.patch
 ...

В теме и теле сопроводительного письма будут рекламные аннотации. Вам нужно их отредактировать перед отправкой (опять же, это обычный текст). Просьба указать следующее:

  • короткое описание в теме сообщения;
  • несколько слов о каждом патче в теле сообщения.

Кроме того, не забудьте добавить ссылки на проблему на GitHub и на ветку, где можно найти серию патчей. В таком случае нет необходимости указывать ссылки или дополнительную информацию в каждом отдельном письме, поскольку всё необходимое уже будет в сопроводительном письме.

Примечание

Чтобы не указывать опции --cover-letter и --thread=shallow, можно добавить в gitconfig следующие строки:

[format]
     thread = shallow
     coverLetter = auto
  1. Отправка патча

После форматирования патчей их можно отправлять по электронной почте. Конечно, можно воспользоваться и любимым почтовым клиентом, но гораздо проще отправить их с помощью git send-email. Перед использованием команды ее необходимо настроить.

Если используется учетная запись GMail, добавьте следующий код в .gitconfig:

[sendemail]
     smtpencryption = tls
     smtpserver = smtp.gmail.com
     smtpserverport = 587
     smtpuser = your.name@gmail.com
     smtppass = topsecret

Для пользователей mail.ru настройки будут слегка отличаться:

[sendemail]
     smtpencryption = ssl
     smtpserver = smtp.mail.ru
     smtpserverport = 465
     smtpuser = your.name@mail.ru
     smtppass = topsecret

Если ваша учетная запись электронной почты находится на другом ресурсе, уточните SMTP-настройки у поставщика услуг.

После настройки используйте следующую команду для отправки патчей:

$ git send-email --to tarantool-patches@freelists.org 00*

(подстановочный символ 00* будет распространяться на список патчей, сгенерированных в предыдущем шаге.)

Если вы бы хотели, чтобы определенный человек рассматривал ваш патч, добавьте его в список получателей, передав --to или --cc для каждого получателя.

Примечание

Неплохо проверить, что git send-email будет работать должным образом, не отправив ничего на весь мир. Для этого воспользуйтесь опцией --dry-run.

  1. Процесс рассмотрения

После отправки патчей вы ожидаете их рассмотрения. Редактор отправит свои комментарии в ответ на сообщение с патчем, который нуждается в доработке, по его мнению.

Получив электронное письмо с примечаниями, вы внимательно читаете его и отвечаете, согласны вы или нет. Обратите внимание, что мы используем стиль ответа с чередованием (он же «встроенный ответ») в сообщениях электронной почты.

Достигнув соглашения, вы отправляете доработанный патч в ответ на последнее сообщение в обсуждении. Чтобы отправить патч, вы можете либо вложить простой diff (созданный с помощью git diff или git format-patch) в сообщение электронной почте и отправить его с помощью вашего любимого почтового клиента, либо использовать опцию --in-reply-to команды git send-email.

Если вы считаете, что общий набор изменений достаточно велик, чтобы отправить всю серию заново и перезапустить процесс рассмотрения в рамках нового обсуждения, вы снова генерируете сообщения с патчами с помощью git format-patch, на этот раз добавив v2 (затем v3, v4 и так далее) в тему и журнал изменений в тело сообщения. Чтобы соответствующим образом изменить тему сообщения, используйте опцию --subject-prefix в команде git format-patch:

$ git format-patch -1 --subject-prefix='PATCH v2'

Чтобы добавить журнал изменений, откройте созданное сообщение с помощью любимого текстового редактора и отредактируйте тело сообщения. Если патч всего один, журнал изменений должен идти сразу после --- в теле сообщения (тогда git am проигнорирует его). Если патчей несколько, журнал изменений следует добавить в сопроводительное письмо. Хороший пример журнала изменений:

Changes in v3:
   - Fixed comments as per review by Alex
   - Added more tests
 Changes in v2:
   - Fixed a crash if the user passes invalid options
   - Fixed a memory leak at exit

Также правильно будет добавить ссылку на предыдущую версию набора патчей (гиперссылку или идентификатор сообщения).

Примечание

  • Не спорьте с редактором без веских аргументов в свою поддержку.
  • Не принимайте любые слова редактора без доказательств. Редакторы – тоже люди, которые могут ошибаться.
  • Не ждите, что редактор скажет вам, как что делать. Это не их работа. Редактор может предложить пути решения проблемы, но вообще говоря, это ваша обязанность.
  • Не забывайте обновлять удаленную ветку git каждый раз, когда отправляете новую версию патча.
  • Соблюдайте вышеуказанные рекомендации. Если вы не будете их соблюдать, ваши патчи могут быть молча проигнорированы.