Appendice B. Guida di riferimento a Mercurial Queues

Indice

Guida di riferimento ai comandi MQ
qapplied—stampa le patch applicate
qcommit—registra i cambiamenti nel repository della coda
qdelete—elimina una patch dal file series
qdiff—stampa un diff dell’ultima patch applicata
qfinish—sposta le patch applicate nella cronologia del repository
qfold—unisce («include») diverse patch in una
qheader—mostra l’intestazione/descrizione di una patch
qimport—importa una patch di terze parti nella coda
qinit—prepara un repository per lavorare con MQ
qnew—crea una nuova patch
qnext—stampa il nome della patch successiva
qpop—estrae le patch dalla pila
qprev—stampa il nome della patch precedente
qpush—inserisce le patch in cima alla pila
qrefresh—aggiorna l’ultima patch applicata
qrename—rinomina una patch
qseries—stampa l’intera serie di patch
qtop—stampa il nome della patch corrente
qunapplied—stampa le patch non ancora applicate
hg strip—rimuove una revisione e i suoi discendenti
Guida di riferimento ai file di MQ
Il file series
Il file status

Guida di riferimento ai comandi MQ

Per un’introduzione ai comandi forniti da MQ, usate il comando hg help mq.

qapplied—stampa le patch applicate

Il comando qapplied stampa la pila corrente delle patch applicate. Le patch vengono stampate in ordine dalla più vecchia alla più recente, così l’ultima patch nella lista è quella «in cima» alla pila.

qcommit—registra i cambiamenti nel repository della coda

Il comando qcommit registra qualsiasi cambiamento in sospeso nel repository .hg/patches. Questo comando funziona solo se la directory .hg/patches è un repository, cioè se avete creato la directory usando hg qinit -c o avete invocato hg init nella directory dopo aver eseguito qinit.

Questo comando è un’abbreviazione di hg commit --cwd .hg/patches.

qdelete—elimina una patch dal file series

Il comando qdelete rimuove la voce relativa a una patch dal file series nella directory .hg/patches. Non estrae la patch se la patch è già applicata. Per default, non cancella il file della patch, perciò dovrete usare l’opzione -f se volete fare questo.

Opzioni:

  • -f: cancella il file della patch.

qdiff—stampa un diff dell’ultima patch applicata

Il comando qdiff stampa un diff dell’ultima patch applicata. È equivalente al comando hg diff -r-2:-1.

qfinish—sposta le patch applicate nella cronologia del repository

Il comando hg qfinish converte le patch applicate specificate in modifiche permanenti, spostandole fuori dal controllo di MQ in modo che siano trattate come normale cronologia del repository.

qfold—unisce («include») diverse patch in una

Il comando qfold unisce più patch all’ultima patch applicata, in modo che l’ultima patch applicata rappresenti l’unione di tutti i cambiamenti delle patch in questione.

Le patch da includere non devono essere applicate, altrimenti qfold terminerà segnalando un errore. L’ordine in cui le patch vengono incluse è significativo: hg qfold a b significa «applica la patch più recente, seguita da a, seguita da b».

I commenti delle patch incluse vengono aggiunti alla fine dei commenti della patch di destinazione, separando ogni blocco di commenti con tre caratteri di asterisco («*»). Usate l’opzione -e per modificare il messaggio di commit della patch/changeset combinata dopo che l’inclusione è stata completata.

Opzioni:

  • -e: modifica il messaggio di commit e la descrizione di patch per la nuova patch combinata.

  • -l: usa il testo contenuto nel file dato come nuovo messaggio di commit e descrizione di patch per la patch combinata.

  • -m: usa il testo dato come nuovo messaggio di commit e descrizione di patch per la patch combinata.

qheader—mostra l’intestazione/descrizione di una patch

Il comando qheader stampa l’intestazione, o descrizione, di una patch. Per default, stampa l’intestazione dell’ultima patch applicata. Dato un argomento, stampa l’intestazione della patch indicata.

qimport—importa una patch di terze parti nella coda

Il comando qimport aggiunge una voce per una patch esterna al file series e copia la patch nella directory .hg/patches. Aggiunge la voce immediatamente dopo l’ultima patch applicata, ma non inserisce la patch.

Se la directory .hg/patches è un repository, qimport usa hg add per aggiungere automaticamente la patch importata.

qinit—prepara un repository per lavorare con MQ

Il comando qinit prepara un repository per lavorare con MQ. Crea una directory chiamata .hg/patches.

Opzioni:

  • -c: crea .hg/patches sotto forma di repository. Crea anche un file .hgignore che ignorerà il file status.

Quando la directory .hg/patches è un repository, i comandi qimport e qnew useranno automaticamente hg add per aggiungere nuove patch.

qnew—crea una nuova patch

Il comando qnew crea una nuova patch. Prende come argomento obbligatorio il nome da usare per il file di patch. La nuova patch viene creata vuota per default, viene aggiunta al file series dopo l’ultima patch applicata e viene immediatamente inserita sopra quella patch.

Se qnew trova qualche file modificato nella directory di lavoro, si rifiuterà di creare una nuova patch a meno che non usiate l’opzione -f (vedete più avanti). Questo comportamento vi permette di aggiornare l’ultima patch applicata tramite qrefresh prima di applicare una nuova patch.

Opzioni:

  • -f: crea una nuova patch se il contenuto della directory di lavoro è stato modificato. Ogni cambiamento in sospeso viene aggiunto alla patch appena creata, pertanto al termine dell’esecuzione del comando la directory di lavoro non risulterà più modificata.

  • -m: usa il testo dato come messaggio di commit. Il testo verrà memorizzato all’inizio del file di patch, prima dei dati di patch.

qnext—stampa il nome della patch successiva

Il comando qnext stampa il nome della patch nel file series che segue la patch applicata più recentemente. Questa patch diventerà l’ultima patch applicata se invocate qpush.

qpop—estrae le patch dalla pila

Il comando qpop rimuove patch applicate dalla cima della pila delle patch applicate. Per default, rimuove solo una patch.

Questo comando rimuove dal repository i changeset che rappresentano le patch estratte e aggiorna la directory di lavoro per annullare gli effetti delle patch.

Questo comando accetta un argomento opzionale che viene usato per indicare il nome o l’indice numerico della patch da estrarre. Se viene passato un nome, il comando continuerà a estrarre patch fino a quando la patch nominata sarà in cima alla pila delle patch applicate. Se viene passato un numero, qpop tratterà il numero come un indice d’accesso alle voci presenti nel file della serie, partendo da zero (le righe vuote e le righe contenenti solo commenti non vengono contate). Il comando continuerà a estrarre patch fino a quando la patch identificata dall’indice dato sarà in cima alla pila delle patch applicate.

Il comando qpop non legge e non modifica né le patch né il file series. Perciò, potete tranquillamente usare qpop su una patch che avete rimosso dal file series, oppure su una patch che avete rinominato o completamente cancellato. Negli ultimi due casi, usate il nome che la patch aveva quando l’avete applicata.

Per default, il comando qpop non estrarrà alcuna patch se la directory di lavoro è stata modificata. Potete cambiare questo comportamento usando l’opzione -f, che annulla tutte le modifiche nella directory di lavoro.

Opzioni:

  • -a: estrae tutte le patch applicate, riportando il repository allo stato in cui era prima che applicaste qualunque patch.

  • -f: annulla forzatamente qualsiasi modifica alla directory di lavoro al momento dell’estrazione.

  • -n: estrae una patch dalla coda nominata.

Il comando qpop rimuove una riga alla fine del file status per ogni patch che ha estratto.

qprev—stampa il nome della patch precedente

Il comando qprev stampa il nome della patch nel file series che precede la patch applicata più recentemente. Questa patch diventerà l’ultima patch applicata se invocate qpop.

qpush—inserisce le patch in cima alla pila

Il comando qpush aggiunge le patch in cima alla pila delle patch applicate. Per default, aggiunge solo una patch.

Questo comando crea un nuovo changeset per rappresentare ogni patch applicata e aggiorna la directory di lavoro per applicare gli effetti delle patch.

I dati predefiniti usati per creare un changeset sono i seguenti.

  • La data e il fuso orario del commit sono la data e il fuso orario corrente. Dato che questi dati vengono usati per computare l’identità di un changeset, questo significa che se invocate qpop su una patch e poi invocate qpush sulla stessa patch, il changeset che inserite avrà un’identità diversa dal changeset che avete estratto.

  • L’autore è quello predefinito usato dal comando hg commit.

  • Il messaggio di commit è il testo proveniente dal file di patch che precede la prima intestazione del diff. Se questo testo non è presente, viene usato un messaggio di commit predefinito che identifica il nome della patch.

Se una patch contiene un’intestazione di patch Mercurial, i dati nell’intestazione di patch sostituiscono quelli predefiniti.

Opzioni:

  • -a: inserisce tutte le patch non applicate contenute nel file series fino a quando non ne rimane nessuna da inserire.

  • -l: aggiunge il nome della patch alla fine del messaggio di commit.

  • -m: se l’applicazione di una patch fallisce, usa la voce relativa alla patch contenuta in un’altra coda salvata per computare i parametri di un’unione a tre vie, effettuando poi l’unione a tre vie attraverso il normale meccanismo di unione di Mercurial. Usa il risultato dell’unione come nuovo contenuto della patch.

  • -n: usa la coda nominata se effettua un’unione durante l’inserimento.

Il comando qpush legge, ma non modifica, il file series. Aggiunge una riga alla fine del file status per ogni patch inserita.

qrefresh—aggiorna l’ultima patch applicata

Il comando qrefresh aggiorna l’ultima patch applicata. Modifica la patch, rimuove il vecchio changeset che rappresentava la patch e crea un nuovo changeset per rappresentare la patch modificata.

Il comando qrefresh si occupa delle seguenti modifiche.

  • I cambiamenti al messaggio di commit, cioè al testo che precede la prima intestazione di diff nel file di patch, vengono riflessi nel nuovo changeset che rappresenta la patch.

  • Le modifiche ai file registrati nella directory di lavoro vengono aggiunte alla patch.

  • Per quanto riguarda le modifiche ai file registrati apportate tramite hg add, hg copy, hg remove, o hg rename, i file aggiunti e i file destinazione di copie e cambiamenti di nome vengono aggiunti alla patch, mentre i file rimossi e i file sorgente dei cambiamenti di nome vengono rimossi.

Anche se qrefresh non trova alcun cambiamento, ricrea comunque il changeset che rappresenta la patch. Questo produce una differenza tra l’identità del nuovo changeset e quella del precedente changeset che identificava la patch.

Opzioni:

  • -e: modifica il messaggio di commit e la descrizione della patch, usando l’editor di testo preferito.

  • -m: modifica il messaggio di commit e la descrizione della patch, usando il testo dato.

  • -l: modifica il messaggio di commit e la descrizione della patch, usando il testo contenuto nel file dato.

qrename—rinomina una patch

Il comando qrename rinomina una patch e modifica la voce relativa alla patch nel file series.

Con un singolo argomento, qrename rinomina l’ultima patch applicata. Con due argomenti, cambia il nome del primo argomento al secondo argomento.

qseries—stampa l’intera serie di patch

Il comando qseries stampa l’intera serie di patch contenuta nel file series. Stampa solo i nomi delle patch, saltando le righe vuote e i commenti. Stampa le patch in ordine dalla prima patch da applicare all’ultima.

qtop—stampa il nome della patch corrente

Il comando qtop stampa il nome della patch attualmente in cima alla pila delle patch applicate.

qunapplied—stampa le patch non ancora applicate

Il comando qunapplied stampa i nomi delle patch non ancora applicate contenute nel file series, nell’ordine in cui le patch verrebbero inserite.

hg strip—rimuove una revisione e i suoi discendenti

Il comando hg strip rimuove una revisione e tutti i suoi discendenti dal repository. Annulla gli effetti delle revisioni rimosse dal repository e aggiorna la directory di lavoro al primo genitore della revisione rimossa.

Il comando hg strip salva una copia di backup dei changeset rimossi in un bundle, in modo che possano essere riapplicati se sono stati rimossi per errore.

Opzioni:

  • -b: salva i changeset non correlati che sono mescolati ai changeset eliminati nel bundle di backup.

  • -f: se un ramo ha più teste, rimuove tutte le teste.

  • -n: evita di salvare il bundle di backup.

Guida di riferimento ai file di MQ

Il file series

Il file series contiene una lista dei nomi di tutte le patch che MQ può applicare. Viene rappresentato come una lista di nomi, con un nome salvato per riga. Lo spazio bianco all’inizio e alla fine di ogni riga viene ignorato.

Le righe possono contenere commenti. Un commento comincia con il carattere «#» e si estende fino alla fine della riga. Le righe vuote e le righe che contengono solo commenti vengono ignorate.

Avrete spesso bisogno di modificare il file series a mano, da cui il supporto per i commenti e le righe vuote appena descritto. Per esempio, potete commentare temporaneamente una patch in modo che qpush la salti quando applica le patch. Potete anche cambiare l’ordine in cui le patch vengono applicate riordinando le loro voci nel file series.

Viene anche supportata la possibilità di mettere il file series sotto controllo di revisione. È una buona idea mettere sotto controllo di revisione anche tutte le patch a cui il file si riferisce. Se create una directory di patch usando l’opzione -c del comando qinit, questo verrà fatto per voi automaticamente.

Il file status

Il flie status contiene i nomi e gli hash di changeset per tutte le patch che MQ ha attualmente applicato. A differenza del file series, questo file non è destinato a essere modificato. Non dovreste mettere questo file sotto controllo di revisione, né modificarlo in alcun modo. Viene usato da MQ per mantenere traccia di informazioni strettamente private.

Volete rimanere aggiornati? Abbonatevi al feed delle modifiche per il libro italiano.

Copyright 2006, 2007, 2008, 2009 Bryan O’Sullivan. Icone realizzate da Paul Davey alias Mattahan.

Copyright 2009 Giulio Piancastelli per la traduzione italiana.