Отправка патчей

На этой странице описывается полный процесс отправки патча в проект с открытым исходным кодом Android (AOSP), включая то, как запросить проверку и отслеживать изменения с помощью Gerrit .

Предпосылки

Для начала убедитесь, что вы сделали следующее:

Ресурсы

  • Дополнительные сведения о Repo и Git см. На странице « Инструменты управления версиями».
  • Информацию о различных ролях в сообществе Android с открытым исходным кодом см. На странице « Роли проекта» .
  • Информацию о лицензировании кода для платформы Android см. На странице Лицензии .

Для авторов

Аутентификация на сервере

Если вы делитесь IP-адресом с другими пользователями, квоты могут быть активированы даже для обычных шаблонов использования. Это может произойти, например, когда многие пользователи синхронизируют новых клиентов с одного и того же IP-адреса в течение короткого периода времени. Доступ с проверкой подлинности использует отдельную квоту для каждого пользователя, независимо от IP-адреса. Чтобы прочитать об активации аутентифицированного доступа, см. Использование аутентификации .

Открытие репо-филиала

Для каждого изменения, которое вы собираетесь внести, запускайте новую ветку в соответствующем репозитории Git:

repo start NAME .

Вы можете запустить несколько независимых веток одновременно в одном репозитории. NAME ветки является локальным для вашей рабочей области и не входит ни в Gerrit, ни в окончательное дерево исходных текстов.

Внесение изменений

Измените исходные файлы и подтвердите свои изменения.

Зафиксируйте изменения в вашем локальном репозитории с помощью следующих команд:

git add -A
git commit -s

Изменить описания

  • Строка 1: заголовок

    Предоставьте однострочное резюме ( максимум 50 символов)

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

    ui: Removes deprecated widget

  • Строка 2: пусто

    Всегда оставляйте эту строку пустой.

  • Строка 3: Тело

    Напишите более подробное описание, начиная с этой строки.

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

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

Уникальный идентификатор изменения, ваше имя и адрес электронной почты, которые предоставляются во время repo init , автоматически добавляются в ваше сообщение фиксации.

Вот пример сообщения фиксации:

Line 1, Headline - a short description

Line 3, Body - Add the detailed description of your patch here. Use as many lines
as needed. You can write an overall description, then list specifics.

I6e3c64e7a:Added a new widget.
I60c539a8f:Fixed the spinning image.
Чтобы прочитать блог о хороших описаниях коммитов (с примерами), прочтите статью Криса Бимса о том, как написать сообщение о фиксации Git .

Загрузка в Геррит

После того, как вы зафиксируете изменения в своей личной истории, загрузите их в Gerrit с помощью этой команды:

repo upload

Если вы запустили несколько веток в одном репозитории, вам будет предложено выбрать, какие из них выгрузить.

После успешной загрузки Repo предоставит вам URL-адрес новой страницы на Gerrit . Щелкните ссылку, которую дает вам Repo, чтобы просмотреть свой патч на сервере обзора, добавить комментарии или запросить конкретных рецензентов для вашего патча.

Запрос на обзор

После того, как вы загрузили свои изменения в Gerrit, патч должен быть рассмотрен и утвержден соответствующими владельцами кода. Найдите владельцев кода в файлах OWNERS .

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

  1. Выберите ссылку ПРЕДЛАГАЕМЫЕ ВЛАДЕЛЬЦА в пользовательском интерфейсе Gerrit, чтобы просмотреть список владельцев кода для файлов в вашем патче.

    предложить владельцам ссылку в Геррите
    Рисунок 1. Ссылка на предложение владельцев в Gerrit
  2. Добавьте владельцев кода из списка в качестве рецензентов вашего патча.

Чтобы определить статус файлов в патче, проверьте следующие значки рядом с файлами в патче.

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

Загрузка патча на замену

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

git add -A
git commit --amend

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

Разрешение конфликтов синхронизации

Если в дерево исходных текстов отправлены другие патчи, которые конфликтуют с вашим, переустановите свой патч поверх новой HEAD исходного репозитория. Для этого запустите эту команду:

repo sync

Команда repo sync получает обновления с исходного сервера, а затем пытается автоматически перенастроить ваш HEAD на новый удаленный HEAD .

Если автоматическая перебазировка не удалась, выполните перебазирование вручную.

repo rebase

Еще один инструмент для разрешения конфликта перебазирования - git mergetool . После успешного объединения конфликтующих файлов выполните эту команду:

git rebase --continue

После завершения автоматической или ручной перебазировки запустите repo upload чтобы отправить исправление с измененной базой.

После утверждения заявки

После того, как отправка проходит процесс проверки и проверки, Gerrit автоматически добавляет изменение в общедоступный репозиторий. Другие пользователи могут запустить repo sync чтобы загрузить обновление своим локальным клиентам.

Для апстрим-проектов

Android использует ряд других проектов с открытым исходным кодом, таких как ядро ​​Linux и WebKit, как описано в разделе Управление программным обеспечением Android . Для большинства проектов, находящихся в каталоге external/ , внесите изменения вверх по течению, а затем проинформируйте разработчиков Android о новом выпуске основной ветки разработки, который содержит ваши изменения.

Вы также можете загружать патчи, которые вызывают отслеживание нового апстрима. Обратите внимание, что эти изменения могут быть трудными для внесения, если проект широко используется в Android, как и большинство более крупных, упомянутых ниже, которые обычно обновляются с каждым выпуском.

Один интересный частный случай - это Bionic. Большая часть кода взята из BSD, поэтому, если изменение не касается кода, нового для Bionic, пожалуйста, сделайте исправление восходящего потока, а затем извлеките новый файл из соответствующей BSD.

Ядро Android

Предпочитаю вносить все изменения вверх по течению. В качестве общих рекомендаций следуйте рекомендациям по добавлению ядра Android .

ICU4C

Внесите все изменения в проект ICU4C по адресу external/icu4c на домашней странице ICU-TC . Дополнительные сведения см. В разделе « Отправка ошибок ICU и запросов на добавление функций» .

LLVM / Clang / Компилятор-RT

Внесите все изменения в проекты, связанные с LLVM ( external/clang , external/compiler-rt , external/llvm ) на странице инфраструктуры компилятора LLVM .

мкш

Внесите все изменения в проект MirBSD Korn Shell на external/mksh , отправив электронное письмо на miros-mksh в домене mirbsd.org (для отправки туда подписка не требуется) или на Launchpad .

OpenSSL

Внесите все изменения в проект OpenSSL на странице external/openssl на странице OpenSSL .

V8

Отправляйте все изменения в проект V8 по адресу external/v8 на странице выпуска V8 . Подробнее см. Содействие в V8 .

WebKit

Внесите все изменения в проект WebKit на странице external/webkit на странице WebKit . Начните процесс с регистрации ошибки WebKit . В случае ошибки используйте Android для полей Platform и OS, только если ошибка специфична для Android. Ошибки с гораздо большей вероятностью привлекут внимание обозревателей после добавления предлагаемого исправления и включения тестов. Подробнее см. Добавление кода в WebKit .

zlib

Внесите все изменения в проект zlib по адресу external/zlib на домашней странице zlib .