Inviare modifiche al codice

Questa pagina descrive l'intera procedura di invio di una modifica del codice all'Android Open Source Project (AOSP), inclusa la procedura per richiedere una revisione e monitorare le modifiche.

AOSP si basa su Gerrit, un sistema di revisione del codice basato sul web per i progetti che utilizzano Git.

Firmare i contratti di licenza per i contributori

Prima di contribuire con modifiche del codice per AOSP, devi leggere Contributor license agreements and headers e firmare uno dei seguenti contratti:

Avviare un ramo

Per ogni modifica del codice che intendi apportare, segui questi passaggi:

  1. Avvia un nuovo ramo all'interno del repository Git pertinente. Un ramo non è una copia dei file originali, ma un puntatore a un commit specifico, il che rende la creazione di rami locali e il passaggio da uno all'altro un'operazione leggera. Utilizzando i rami, puoi identificare le modifiche l'una dall'altra. Esegui questo comando per avviare un ramo:

    repo start BRANCH_NAME

    Puoi avviare più rami indipendenti contemporaneamente nello stesso repository. Il ramo BRANCH_NAME è locale al tuo spazio di lavoro e non è incluso né in Gerrit né nell'albero di origine finale. I rami sono anche specifici del progetto in cui ti trovi, quindi se devi modificare i file in progetti diversi nell'ambito della stessa modifica, avrai bisogno di un ramo in ogni progetto in cui modifichi i file.

  2. (Facoltativo) Verifica che il ramo sia stato creato:

    repo status .

    Dovresti vedere il ramo che hai appena creato. Ad esempio:

    project frameworks/native/                      branch mynewbranch

Apportare e testare la modifica

Segui questi passaggi per apportare e testare la modifica:

  1. Per assicurarti di lavorare con la codebase più recente, esegui una sincronizzazione dell'intera codebase:

    repo sync

    Se si verificano conflitti durante la sincronizzazione, consulta i passaggi da 2 a 4 di Risolvere i conflitti di sincronizzazione.

  2. Trova il codice da modificare. Per trovare il codice, valuta la possibilità di utilizzare la ricerca del codice Android. Puoi utilizzare la ricerca del codice Android per visualizzare il codice sorgente AOSP così come viene visualizzato quando lo utilizzi effettivamente. Per ulteriori informazioni, consulta la pagina Guida introduttiva a Code Search. Per visualizzare tutto il codice nel ramo della release AOSP più recente nella ricerca del codice Android, vai a https://cs.android.com/android/platform/superproject/.

  3. Modifica o aggiungi file di origine. Per le modifiche apportate:

  4. Crea Android.

  5. Testa la build.

Preparare ed eseguire il commit della modifica

Un commit è l'unità di base del controllo della revisione in Git e consiste in uno snapshot della struttura delle directory e dei contenuti dei file per l'intero progetto. Segui questi passaggi per eseguire il commit della modifica:

  1. Per impostazione predefinita, Git registra le modifiche apportate, ma non le monitora. Per indicare a Git di monitorare le modifiche, devi contrassegnarle o prepararle per l'inclusione in un commit. Esegui questo comando per preparare la modifica:

    git add -A

    Questo comando monitora le modifiche apportate a qualsiasi file.

  2. Prendi i file nell'area di preparazione ed esegui il commit o archiviali nel database locale:

    git commit -s

    Per impostazione predefinita, si apre un editor di testo e ti viene chiesto di fornire un messaggio di commit.

  3. Fornisci un messaggio di commit nel seguente formato:

    • Riga 1: titolo. Fornisci un riepilogo di una riga della modifica (massimo 50 caratteri). Valuta la possibilità di utilizzare i prefissi per descrivere l'area modificata, seguiti da una descrizione della modifica apportata in questo commit, come nell'esempio seguente contenente una modifica dell'interfaccia utente:

      ui: Removes deprecated widget
      
    • Riga 2: riga vuota. Dopo il titolo, inserisci una riga vuota.

    • Riga 3: corpo. Fornisci una descrizione lunga con un massimo di 72 caratteri. Descrivi il problema risolto dalla modifica e in che modo. Sebbene il corpo sia facoltativo, è utile per gli altri che devono fare riferimento alla modifica. Assicurati di includere una breve nota su eventuali ipotesi o informazioni di base che potrebbero essere importanti quando un altro contributore lavora su questa funzionalità.

    Per leggere un blog sulle buone descrizioni dei commit (con esempi), consulta l'articolo How to Write a Git Commit Message.

  4. Salva il commit.

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

Caricare la modifica per la revisione

Dopo aver eseguito il commit della modifica nella cronologia Git personale, caricala in Gerrit:

  1. Esegui il comando seguente per caricare tutti i commit in tutti i progetti:

    repo upload

    Tutte le modifiche in tutti i progetti sono incluse nel caricamento.

    Ti viene chiesto di eseguire gli script hook.

  2. Premi a e poi Invio.

    Ti viene chiesto di approvare il caricamento:

    Upload project frameworks/native/ to remote branch android17-release:
    branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
           ff46b36d android codelab change
    to https://android-review.googlesource.com/ (y/N)?
    
  3. Premi y e poi Invio per approvare il caricamento.

Dovresti ricevere un messaggio simile a remote: SUCCESS.

Richiedere una revisione

Dopo un caricamento riuscito, Repo ti fornisce un link alle modifiche in Gerrit. Fai clic sul link per visualizzare le modifiche sul server di revisione, aggiungere commenti o richiedere revisori specifici per la modifica. Tutte le modifiche al codice devono essere esaminate dai proprietari del codice appropriati.

Per richiedere una revisione:

  1. In Gerrit, fai clic su SUGGERISCI PROPRIETARI:

    Suggerire il link ai proprietari in Gerrit

    Figura 1. Link Suggerisci proprietari in Gerrit.

    Viene visualizzata la finestra di dialogo del revisore. Questa finestra di dialogo contiene un elenco di proprietari del codice che possono esaminare la modifica.

  2. Fai clic su un proprietario del codice per aggiungerlo alla revisione.

    Il pulsante INVIA è attivo.

  3. (Facoltativo) Digita l'indirizzo email di chiunque altro tu voglia esaminare la modifica.

  4. Fai clic su INVIA per inviare la modifica per la revisione.

I proprietari del codice esaminano le modifiche del codice e, se accettate, le selezionano e le uniscono al ramo di sviluppo interno.

Determinare lo stato della modifica

Per determinare lo stato dei file nella modifica, controlla le seguenti icone accanto ai file nella modifica:

  • (icona del segno di spunta ): approvato dal proprietario del codice
  • (icona della croce): non approvato dal proprietario del codice
  • (icona dell'orologio ): in attesa di approvazione da parte del proprietario del codice

La figura seguente mostra queste icone di stato applicate ai file in una modifica:

Esempio di file con icone che mostrano l'approvazione del proprietario del codice

Figura 2. Esempio di file con icone che mostrano l'approvazione del proprietario del codice.

Risolvere il feedback e caricare una modifica sostitutiva

Se un revisore richiede una modifica all'aggiornamento, puoi modificare il commit in Git, il che comporta un nuovo patchset sulla stessa modifica.

Per risolvere il feedback e modificare la modifica:

  1. Segui i passaggi da 2 a 4 in Apportare e testare la modifica.

  2. Esegui i seguenti comandi per modificare la modifica:

    git add -A
    git commit --amend
  3. Carica la modifica.

Quando carichi la modifica modificata, questa sostituisce l'originale sia in Gerrit sia nella cronologia Git locale.

Risolvere i conflitti di sincronizzazione

Se vengono inviate altre modifiche all'albero di origine in conflitto con le tue, riceverai un messaggio che indica la presenza di conflitti. Per risolvere i conflitti:

  1. Assicurati di lavorare con il codice più recente:

    repo sync .

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

  2. Se il rebase automatico non va a buon fine, esegui un rebase manuale:

    repo rebase .
  3. Risolvi i conflitti di unione. Se non hai un metodo preferito per risolvere i conflitti di unione, puoi utilizzare git mergetool per correggere manualmente i conflitti tra i file.

  4. Dopo aver corretto correttamente i file in conflitto, esegui questo comando per applicare i nuovi commit:

    git rebase --continue

Inviare la modifica

Dopo che un invio ha superato la procedura di revisione e verifica, il proprietario del codice invia il codice per tuo conto, nel ramo in cui è stata esaminata la modifica o in un ramo interno.

Dopo l'unione dell'invio, puoi visitare la dashboard di integrazione continua di Android per monitorare quando gli invii vengono integrati nell'albero.