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

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

Предпосылки

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

Ресурсы

  • Дополнительные сведения о Repo и Git см. на странице инструментов управления версиями.
  • Информацию о различных ролях в сообществе Android Open Source см. на странице ролей в проекте .
  • Сведения о лицензировании добавления кода для платформы 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, чтобы увидеть список владельцев кода для файлов в вашем патче.

    предложить владельцам ссылку в 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 .

отделение интенсивной терапии

Внесите все изменения в проект ICU в external/icu ( icu4c/ и icu4j/ ) на домашней странице ICU-TC . Дополнительные сведения см. в разделе Отправка сообщений об ошибках ICU и запросах функций .

КЛДР

Большинство лингвистических данных в ICU поступает из проекта Unicode CLDR . Отправьте все запросы восходящего потока, используя запросы на изменение CLDR, и добавьте метку «Android».

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

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

мкш

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

OpenSSL

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

V8

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

Вебкит

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

zlib

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