Invia patch

Questa pagina descrive l'intero processo di invio di una patch al progetto Android Open Source (AOSP), incluso come richiedere una revisione e tenere traccia delle modifiche con Gerrit . Gerrit è un sistema di revisione del codice basato sul web per progetti che utilizzano Git. Gerrit incoraggia un uso più centralizzato di Git consentendo a tutti gli utenti autorizzati di inviare modifiche, che vengono automaticamente unite se superano la revisione del codice. Inoltre, Gerrit semplifica la revisione, visualizzando le modifiche una accanto all'altra nel browser e abilitando i commenti in linea.

Prerequisiti

Per iniziare, assicurati di aver effettuato quanto segue:

Risorse

Configura Git

Per utilizzare Gerrit, la tua email deve essere associata a un account Google registrato. Esegui i seguenti comandi per configurare Git con un nome e un indirizzo email associati a un account Google registrato:

git config --global user.name Your Name
git config --global user.email your_email@gmail.com
    

Autenticarsi con il server

Se condividi un indirizzo IP con altri utenti, le quote possono essere attivate anche per modelli di utilizzo regolari. Ciò può verificarsi quando, ad esempio, molti utenti sincronizzano nuovi client dallo stesso indirizzo IP in un breve periodo di tempo. L'accesso autenticato utilizza una quota separata per ciascun utente, indipendentemente dall'indirizzo IP. Per informazioni sull'attivazione dell'accesso autenticato, vedere Utilizzo dell'autenticazione .

Avvia un ramo Repo

Per ogni modifica che intendi apportare, avvia un nuovo ramo all'interno del relativo repository Git:

repo start NAME .

You can start several independent branches at the same time in the same repository. The branch NAME is local to your workspace and isn't included either on Gerrit or in the final source tree.

Make your change

Modify the source files, and test your changes.

For any changes made, follow License header best practices.

Commit your change

Commit the changes to your local repository with these commands:

git add -A
git commit -s

Modificare le descrizioni

  • Riga 1: titolo

    Fornire un riepilogo di una riga ( massimo 50 caratteri)

    Questo formato viene utilizzato da Git e Gerrit per vari display. È la parte più importante e più densa del tuo messaggio di commit. Considera l'utilizzo dei prefissi per descrivere l'area che hai modificato, seguita da una descrizione della modifica apportata in questo commit, come questa che ha ui come prefisso:

    ui: Removes deprecated widget

  • Riga 2: vuota

    Mantieni questa riga vuota, sempre.

  • Linea 3: Corpo

    Scrivi una descrizione più lunga, iniziando da questa riga.

    Questo deve avere una lunghezza massima di 72 caratteri. Descrivi quale problema viene risolto dal cambiamento e come. Anche se questo è facoltativo quando si implementano nuove funzionalità, è molto utile per gli altri in seguito se fanno riferimento a questa modifica, soprattutto per il debug.

    Includi una breve nota di eventuali presupposti o informazioni di base che potrebbero essere importanti quando un altro collaboratore lavora su questa funzionalità.

Un ID di modifica univoco, il tuo nome e la tua email, forniti durante repo init , vengono aggiunti automaticamente al tuo messaggio di commit.

Ecco un esempio di messaggio di commit:

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.
To read a blog about good commit descriptions (with examples), see How to Write a Git Commit Message by Chris Beams.

Upload to Gerrit

After you commit your change to your personal history, upload it to Gerrit with this command:

repo upload

If you started multiple branches in the same repository, you're prompted to select which ones to upload.

After a successful upload, Repo provides you with the URL of a new page on Gerrit. Click the link that Repo gives you to view your patch on the review server, add comments, or request specific reviewers for your patch.

Request a review

After you've uploaded your changes to Gerrit, the patch must be reviewed and approved by the appropriate code owners. Locate code owners in OWNERS files.

To find the appropriate code owners and add them as reviewers for your change, follow these steps.

  1. Select the SUGGEST OWNERS link in the Gerrit UI to see a list of code owners for the files in your patch.

    suggest owners link in Gerrit
    Figure 1. Suggest owners link in Gerrit
  2. Add code owners from the list as reviewers for your patch.

To determine the status of the files in your patch, check for the following icons next to the files in the patch.

  • (checkmark icon): Approved by code owner
  • (cross icon): Not approved by code owner
  • (clock icon): Pending approval by code owner
Figure 2. Example of files with icons showing code owner approval status

Upload a replacement patch

Suppose a reviewer looked at your patch and requested a small modification. You can amend your commit within Git, which results in a new patch on Gerrit that has the same change ID as the original.

git add -A
git commit --amend

Quando carichi la patch modificata, questa sostituisce l'originale sia su Gerrit che nella cronologia Git locale.

Risolvi i conflitti di sincronizzazione

Se all'albero dei sorgenti vengono inviate altre patch che sono in conflitto con la tua, ribasare la patch sul nuovo HEAD del repository dei sorgenti. Per fare ciò, esegui questo comando:

repo sync

Il comando repo sync recupera gli aggiornamenti dal server di origine, quindi tenta di ribasare automaticamente il tuo HEAD sul nuovo HEAD remoto.

Se il rebase automatico non ha esito positivo, eseguire un rebase manuale.

repo rebase

Un altro strumento per gestire il conflitto di rebase è git mergetool . Dopo aver unito correttamente i file in conflitto, esegui questo comando:

git rebase --continue

Una volta completato il rebase automatico o manuale, esegui repo upload per inviare la patch ribasata.

Dopo che una presentazione è stata approvata

Dopo che un invio ha superato il processo di revisione e verifica, Gerrit unisce automaticamente la modifica nel repository pubblico. Altri utenti possono eseguire repo sync per inserire l'aggiornamento nei rispettivi client locali.

Per progetti a monte

Android fa uso di una serie di altri progetti open source, come il kernel Linux e WebKit, come descritto in Gestione del software Android . Per la maggior parte dei progetti che risiedono in external/ , apportare le modifiche upstream, quindi informare i manutentori Android della nuova versione upstream che contiene le modifiche.

Potresti anche caricare patch che determinano il monitoraggio di una nuova versione upstream. Tieni presente che queste possono essere modifiche difficili da apportare se il progetto è ampiamente utilizzato in Android, come la maggior parte di quelli più grandi menzionati di seguito, che di solito vengono aggiornati ad ogni versione.

Un caso speciale interessante è Bionic. Gran parte del codice presente proviene da BSD, quindi a meno che la modifica non riguardi un codice nuovo per Bionic, apportare una correzione upstream, quindi estrarre un file completamente nuovo dal BSD appropriato.

kernel Android

Apportare tutte le modifiche a monte. Per indicazioni generali, seguire le Linee guida per il contributo del kernel Android e la pagina Sviluppa codice kernel per GKI .

terapia intensiva

Apportare tutte le modifiche al progetto ICU in external/icu (cartelle icu4c/ e icu4j/ ) nella home page ICU-TC . Per ulteriori informazioni, vedere Invio di bug ICU e richieste di funzionalità . Aggiungi l'etichetta "android" a tutte le richieste Jira upstream.

CLDR

La maggior parte dei dati linguistici in terapia intensiva provengono dal progetto Unicode CLDR . Invia tutte le richieste a monte secondo Contributing to CLDR e aggiungi l'etichetta "android".

LLVM/Clang/Compiler-rt

Apportare tutte le modifiche ai progetti relativi a LLVM ( external/clang , external/compiler-rt , external/llvm ) nella pagina Infrastruttura del compilatore LLVM .

mksh

Apporta tutte le modifiche al progetto MirBSD Korn Shell su external/mksh inviando un'e-mail a miros-mksh sul dominio mirbsd.org (non è richiesto alcun abbonamento per l'invio lì) o su Launchpad .

OpenSSL

Apporta tutte le modifiche al progetto OpenSSL in external/openssl nella pagina OpenSSL .

V8

Invia tutte le modifiche al progetto V8 all'indirizzo external/v8 nella pagina dei problemi V8 . Vedi Contribuire a V8 per i dettagli.

WebKit

Apporta tutte le modifiche al progetto WebKit in external/webkit nella pagina WebKit . Avvia il processo segnalando un bug WebKit . Nel bug, utilizza Android per i campi Piattaforma e Sistema operativo solo se il bug è specifico per Android. È molto più probabile che i bug ricevano l'attenzione dei revisori dopo l'aggiunta di una correzione proposta e l'inclusione dei test. Vedi Contribuire al codice a WebKit per i dettagli.

zlib

Apportare tutte le modifiche al progetto zlib in external/zlib nella home page di zlib .