hgbook

changeset 812:42e2c9d47ef4

Minor changes and translation of code snippets for Ch.12.
author Giulio@puck
date Sat Aug 15 15:15:39 2009 +0200 (2009-08-15)
parents 8e3ccc187357
children 15eeeef467d2
files it/ch12-mq.xml it/examples/auto-snippets.xml it/examples/ch11-qdelete.convert.it it/examples/ch11-qdelete.go.it it/examples/mq.dodiff.diff.it it/examples/mq.id.output.it it/examples/mq.qinit-help.help.it it/examples/mq.tarball.download.it it/examples/mq.tarball.newsource.it it/examples/mq.tarball.qinit.it it/examples/mq.tarball.repush.it it/examples/mq.tools.lsdiff.it it/examples/mq.tools.tools.it it/examples/mq.tutorial.add.it it/examples/mq.tutorial.qinit.it it/examples/mq.tutorial.qnew.it it/examples/mq.tutorial.qnew2.it it/examples/mq.tutorial.qpop.it it/examples/mq.tutorial.qpush-a.it it/examples/mq.tutorial.qrefresh.it it/examples/mq.tutorial.qrefresh2.it it/examples/mq.tutorial.qseries.it
line diff
     1.1 --- a/it/ch12-mq.xml	Sat Aug 15 12:50:55 2009 +0200
     1.2 +++ b/it/ch12-mq.xml	Sat Aug 15 15:15:39 2009 +0200
     1.3 @@ -13,7 +13,7 @@
     1.4  
     1.5      <para id="x_3af">Chi distribuisce sistemi operativi che includono software open source ha spesso bisogno di effettuare modifiche ai pacchetti che distribuisce in modo da assemblarli correttamente nel proprio ambiente.</para>
     1.6  
     1.7 -    <para id="x_3b0">Quando dovete mantenere solo alcune modifiche da mantenere, potete facilmente gestire una singola patch usando i programmi standard <command>diff</command> e <command>patch</command> (si veda la <xref linkend="sec:mq:patch"/> per una discussione di questi strumenti). Una volta che il numero di modifiche cresce, comincia ad avere senso l'idea di mantenere le patch come <quote>frammenti di lavoro</quote> distinti in modo che, per esempio, una singola patch contenga solo una correzione di bug (la patch potrebbe modificare diversi file, ma sta facendo <quote>solo una cosa</quote>) e un certo numero di queste patch sia destinato a bug differenti che dovete correggere e a modifiche locali di cui avete bisogno. In questa situazione, se sottoponete una patch per la correzione di un bug ai manutentori del pacchetto a monte e questi includono la vostra correzione in una release successiva, potete semplicemente scartare quella singola patch quando state aggiornando il pacchetto a una nuova release.</para>
     1.8 +    <para id="x_3b0">Quando dovete mantenere solo alcune modifiche, potete facilmente gestire una singola patch usando i programmi standard <command>diff</command> e <command>patch</command> (si veda la <xref linkend="sec:mq:patch"/> per una discussione di questi strumenti). Una volta che il numero di modifiche cresce, comincia ad avere senso l'idea di mantenere le patch come <quote>frammenti di lavoro</quote> distinti in modo che, per esempio, una singola patch contenga solo una correzione di bug (la patch potrebbe modificare diversi file, ma sta facendo <quote>solo una cosa</quote>) e un certo numero di queste patch sia destinato a bug differenti che dovete correggere e a modifiche locali di cui avete bisogno. In questa situazione, se proponete una patch per la correzione di un bug ai manutentori del pacchetto a monte e questi includono la vostra correzione in una release successiva, potete semplicemente scartare quella singola patch quando state aggiornando il pacchetto a una nuova release.</para>
     1.9  
    1.10      <para id="x_3b1">Mantenere una singola patch per un albero a monte è un'attività un po' noiosa e soggetta a errori, ma non è difficile. Tuttavia, la complessità del problema cresce rapidamente man mano che il numero di patch che dovete mantenere aumenta. Con più di un piccolo numero di patch in mano, il compito di capire quali sono quelle che dovete applicare e di mantenerle passa da sgradevole a opprimente.</para>
    1.11  
    1.12 @@ -34,17 +34,17 @@
    1.13  
    1.14        <para id="x_3b6">Quilt gestisce una <emphasis>pila di patch</emphasis> per un albero di directory. Per cominciare a usarlo, dite a quilt di gestire un albero di directory e quali file volete che gestisca, in modo che memorizzi i nomi e il contenuto di quei file. Per correggere un bug, create una nuova patch (usando un singolo comando), modificate i file che dovete correggere, poi <quote>aggiornate</quote> la patch.</para>
    1.15  
    1.16 -      <para id="x_3b7">L'operazione di aggiornamento induce quilt a esaminare l'albero di directory completando la patch con tutte le modifiche che avete fatto. Potete creare un'altra patch in aggiunta alla prima, che terrà traccia dei cambiamenti richiesti per modificare l'albero da <quote>albero con una patch applicata</quote> ad <quote>albero con due patch applicate</quote>.</para>
    1.17 +      <para id="x_3b7">L'operazione di aggiornamento induce quilt a esaminare l'albero di directory completando la patch con tutte le modifiche che avete fatto. Sulla base di questa prima patch, potete creare un'altra patch che terrà traccia dei cambiamenti richiesti per modificare l'albero da <quote>albero con una patch applicata</quote> ad <quote>albero con due patch applicate</quote>.</para>
    1.18  
    1.19        <para id="x_3b8">Potete <emphasis>scegliere</emphasis> quali sono le patch da applicare all'albero. Se <quote>estraete</quote> una patch, i cambiamenti effettuati da quella patch spariranno dall'albero di directory. Quilt si ricorda quali patch avete estratto, comunque, così potete <quote>inserire</quote> nuovamente una patch estratta e l'albero di directory verrà ripristinato per contenere le modifiche di quella patch. La cosa più importante è che potete eseguire il comando di <quote>aggiornamento</quote> in ogni momento e la patch applicata più recentemente verrà aggiornata. Questo significa che, in ogni momento, potete modificare sia l'insieme delle patch da applicare sia l'insieme dei cambiamenti effettuati da quelle patch.</para>
    1.20  
    1.21 -      <para id="x_3b9">Quilt non ha nulla a che vedere con gli strumenti di controllo di revisione, così funziona altrettanto bene con un gruppo di file estratti da un archivio compresso che con una copia di lavoro di Subversion.</para>
    1.22 +      <para id="x_3b9">Quilt non ha nulla a che fare con gli strumenti di controllo di revisione, così funziona altrettanto bene con un gruppo di file estratti da un archivio compresso che con una copia di lavoro di Subversion.</para>
    1.23      </sect2>
    1.24  
    1.25      <sect2 id="sec:mq:quilt-mq">
    1.26        <title>Da patchwork quilt a Mercurial Queues</title>
    1.27  
    1.28 -      <para id="x_3ba">A metà del 2005, Chris Mason prese le funzionalità di quilt e implementò un'estensione chiamata Mercurial Queues, che aggiungeva a Mercurial un comportamento simile a quello di quilt.</para>
    1.29 +      <para id="x_3ba">A metà del 2005, Chris Mason prese le funzioni di quilt e implementò un'estensione chiamata Mercurial Queues, che aggiungeva a Mercurial un comportamento simile a quello di quilt.</para>
    1.30  
    1.31        <para id="x_3bb">La differenza chiave tra quilt e MQ è che quilt non è progettato per interagire con alcun sistema di controllo di revisione, mentre MQ è <emphasis>integrata</emphasis> in Mercurial. Ogni patch che inserite è rappresentata sotto forma di changeset Mercurial. Se estraete una patch, il changeset relativo sparisce.</para>
    1.32  
    1.33 @@ -63,7 +63,7 @@
    1.34  
    1.35      <para id="x_3c0">Al contrario, il matrimonio tra controllo di revisione distribuito e patch realizzato da MQ rende molto più facile isolare il vostro lavoro. Le vostre patch si basano sulla normale cronologia delle revisioni e potete farle sparire e comparire a piacere. Se non vi piace una patch, potete scartarla. Se una patch non è esattamente come volete che sia, vi basta correggerla&emdash;tutte le volte che ne avete bisogno, fino a quando non l'avete ritoccata facendole assumere la forma che desiderate.</para>
    1.36  
    1.37 -    <para id="x_3c1">Per esempio, l'integrazione delle patch con il controllo di revisione facilita <emphasis>enormemente</emphasis> la comprensione delle patch e delle interazioni con il codice su cui si basano, nonché la correzione dei loro effetti. Dato che ogni patch applicata è associata a un changeset, potete invocare <command role="hg-cmd">hg log</command> con un nome di file per vedere quali changeset e quali patch hanno avuto effetto sul file. Potete usare il comando <command role="hg-cmd">hg bisect</command> per condurre una ricerca binaria attraverso tutti i changeset e le patch applicate in modo da scoprire dov'è è stato introdotto o corretto un bug. Potete usare il comando <command role="hg-cmd">hg annotate</command> per vedere quali changeset o patch hanno modificato una particolare riga di un file sorgente. E così via.</para>
    1.38 +    <para id="x_3c1">Per esempio, l'integrazione delle patch con il controllo di revisione facilita <emphasis>enormemente</emphasis> la comprensione delle patch e delle interazioni con il codice su cui si basano, nonché la correzione dei loro effetti. Dato che ogni patch applicata è associata a un changeset, potete invocare <command role="hg-cmd">hg log</command> con un nome di file per vedere quali changeset e quali patch hanno avuto effetto sul file. Potete usare il comando <command role="hg-cmd">hg bisect</command> per condurre una ricerca binaria attraverso tutti i changeset e le patch applicate in modo da scoprire dov'è stato introdotto o corretto un bug. Potete usare il comando <command role="hg-cmd">hg annotate</command> per vedere quali changeset o patch hanno modificato una particolare riga di un file sorgente. E così via.</para>
    1.39    </sect1>
    1.40  
    1.41    <sect1 id="sec:mq:patch">
    1.42 @@ -73,7 +73,7 @@
    1.43  
    1.44      <para id="x_3c3">Il tradizionale comando Unix <command>diff</command> confronta due file e stampa una lista di differenze tra loro. Il comando <command>patch</command> interpreta queste differenze come <emphasis>modifiche</emphasis> da effettuare a un file. Date un'occhiata qui di seguito per vedere un semplice esempio di questi comandi in azione.</para>
    1.45  
    1.46 -      &interaction.mq.dodiff.diff;
    1.47 +    &interaction.mq.dodiff.diff;
    1.48  
    1.49      <para id="x_3c4">Il tipo di file generato da <command>diff</command> (e che <command>patch</command> prende in ingresso) viene chiamato una <quote>patch</quote> (letteralmente, pezza) o un <quote>diff</quote>. Non c'è alcuna differenza tra una patch e un diff, ma noi useremo il termine <quote>patch</quote>, dato che è quello più comunemente usato.</para>
    1.50  
    1.51 @@ -115,7 +115,7 @@
    1.52  
    1.53        &interaction.mq.tutorial.qnew;
    1.54  
    1.55 -      <para id="x_3d0">La directory <filename role="special" class="directory">.hg/patches</filename> contiene anche altri due nuovi file, <filename role="special">series</filename> e <filename role="special">status</filename>.  Il file <filename role="special">series</filename> elenca tutte le patch per questo repository di cui MQ è a conoscenza, con una patch per riga. Mercurial usa il file <filename role="special">status</filename> per tenere traccia internamente di tutte le patch che MQ ha <emphasis>applicato</emphasis> a questo repository.</para>
    1.56 +      <para id="x_3d0">La directory <filename role="special" class="directory">.hg/patches</filename> contiene anche altri due nuovi file, <filename role="special">series</filename> e <filename role="special">status</filename>.  Il file <filename role="special">series</filename> elenca tutte le patch per questo repository di cui MQ è a conoscenza, con una patch per ogni riga. Mercurial usa il file <filename role="special">status</filename> per tenere traccia internamente di tutte le patch che MQ ha <emphasis>applicato</emphasis> a questo repository.</para>
    1.57  
    1.58        <note>
    1.59  	<para id="x_3d1">A volte potreste voler modificare il file <filename role="special">series</filename> a mano, per esempio per cambiare la sequenza in cui sono applicate alcune patch. Tuttavia, modificare manualmente il file <filename role="special">status</filename> è quasi sempre una cattiva idea, dato che così facendo si rischia facilmente di disorientare MQ.</para>
    1.60 @@ -145,7 +145,7 @@
    1.61  
    1.62        &interaction.mq.tutorial.qnew2;
    1.63  
    1.64 -      <para id="x_3d7">Notate che la patch contiene le modifiche nella nostra patch precedente come parte del proprio contesto (potete vederlo più chiaramente nel risultato di <command role="hg-cmd">hg annotate</command>).</para>
    1.65 +      <para id="x_3d7">Notate che la patch contiene le modifiche della nostra patch precedente come parte del proprio contesto (potete vederlo più chiaramente nel risultato di <command role="hg-cmd">hg annotate</command>).</para>
    1.66  
    1.67        <para id="x_3d8">Finora, con l'eccezione di <command role="hg-ext-mq">qnew</command> e <command role="hg-ext-mq">qrefresh</command>, siamo stati attenti a usare solo gli ordinari comandi Mercurial. Tuttavia, MQ fornisce molti comandi che sono più facili da usare quando state pensando in termini di patch, come illustrato di seguito.</para>
    1.68  
    1.69 @@ -173,7 +173,7 @@
    1.70  	</mediaobject>
    1.71        </figure>
    1.72  
    1.73 -      <para id="x_3de">Potete riapplicare una patch non applicata o estratta usando il comando <command role="hg-ext-mq">qpush</command>. Questo comando crea un nuovo changeset da far corrispondere alla patch, e le modifiche della patch diventano ancora una volta presenti nella directory di lavoro. Di seguito, vengono mostrati esempi di <command role="hg-ext-mq">qpop</command> e <command role="hg-ext-mq">qpush</command> in azione.</para>
    1.74 +      <para id="x_3de">Potete riapplicare una patch non applicata o estratta usando il comando <command role="hg-ext-mq">qpush</command>. Questo comando crea un nuovo changeset da far corrispondere alla patch, e le modifiche della patch compaiono nuovamente nella directory di lavoro. Di seguito, vengono mostrati esempi di <command role="hg-ext-mq">qpop</command> e <command role="hg-ext-mq">qpush</command> in azione.</para>
    1.75  
    1.76        &interaction.mq.tutorial.qpop;
    1.77  
    1.78 @@ -202,7 +202,7 @@
    1.79      <sect2>
    1.80        <title>Lavorare su diverse patch alla volta</title>
    1.81  
    1.82 -      <para id="x_3e3">Il comando <command role="hg-ext-mq">qrefresh</command> aggiorna sempre la patch applicata <emphasis>più recentemente</emphasis>. Questo significa che potete sospendere il lavoro su una patch (aggiornandola), operare estrazioni o inserimenti in modo che l'ultima patch applicata sia differente e lavorare su <emphasis>quella</emphasis> patch per un po'.</para>
    1.83 +      <para id="x_3e3">Il comando <command role="hg-ext-mq">qrefresh</command> aggiorna sempre la patch applicata <emphasis>più recentemente</emphasis>. Questo significa che potete sospendere il lavoro su una patch (aggiornandola), operare estrazioni o inserimenti in modo che l'ultima patch applicata sia differente e lavorare su <emphasis>questa</emphasis> patch per un po'.</para>
    1.84  
    1.85        <para id="x_3e4">Ecco un esempio che illustra come potete sfruttare questa possibilità. Diciamo che state sviluppando una nuova funzione sotto forma di due patch. La prima è una modifica al nucleo del vostro software e la seconda&emdash;basata sulla prima&emdash;modifica l'interfaccia utente per usare il codice che avete appena aggiunto al nucleo. Se notate un bug nel nucleo mentre state lavorando sulla patch per l'interfaccia utente, per correggerlo vi basta usare <command role="hg-ext-mq">qrefresh</command>, in modo da salvare le modifiche in corso alla vostra patch di interfaccia, e poi usare <command role="hg-ext-mq">qpop</command> per estrarre la patch del nucleo. Correggete il bug nel nucleo, aggiornate la patch del nucleo con <command role="hg-ext-mq">qrefresh</command> e inserite la patch di interfaccia tramite <command role="hg-ext-mq">qpush</command> per continuare a lavorare dal punto dove avevate lasciato.</para>
    1.86      </sect2>
    1.87 @@ -218,7 +218,7 @@
    1.88  
    1.89        <para id="x_3e6">Se osservate le intestazioni di file in una patch, noterete che i percorsi dei nomi di solito hanno un componente aggiuntivo iniziale che non è presente nel percorso reale. Questo è uno strascico del modo in cui le persone erano abituate a generare le patch (questo modo viene ancora impiegato, ma piuttosto raramente ora che sono disponibili strumenti di controllo di revisione più moderni).</para>
    1.90  
    1.91 -      <para id="x_3e7">Alice avrebbe estratto un archivio, modificato i file e poi deciso di voler creare una patch. Quindi avrebbe rinominato la directory di lavoro, estratto nuovamente l'archivio (da qui nasce il bisogno di modificare il nome) e usato le opzioni <option role="cmd-opt-diff">-r</option> e <option role="cmd-opt-diff">-N</option> del comando <command>diff</command> per generare ricorsivamente una patch tra la directory non modificata e quella modificata. Come risultato, sarebbe che il nome della directory non modificata si sarebbe trovato all'inizio del percorso sulla parte sinistra in ogni intestazione di file e il nome della directory modificata si sarebbe trovato all'inizio del percorso sulla parte destra.</para>
    1.92 +      <para id="x_3e7">Alice avrebbe estratto un archivio, modificato i file e poi deciso di voler creare una patch. Quindi avrebbe rinominato la directory di lavoro, estratto nuovamente l'archivio (da qui nasce il bisogno di modificare il nome) e usato le opzioni <option role="cmd-opt-diff">-r</option> e <option role="cmd-opt-diff">-N</option> del comando <command>diff</command> per generare ricorsivamente una patch tra la directory non modificata e quella modificata. Come risultato, il nome della directory non modificata si sarebbe trovato all'inizio del percorso sulla parte sinistra di ogni intestazione di file e il nome della directory modificata si sarebbe trovato all'inizio del percorso sulla parte destra.</para>
    1.93  
    1.94        <para id="x_3e8">Dato che chi riceveva una patch dalle Alice della rete probabilmente non avrebbe avuto le due copie, modificata e non, della directory con esattamente gli stessi nomi, il comando <command>patch</command> è stato dotato di un'opzione <option role="cmd-opt-patch">-p</option> che indica il numero di elementi iniziali da eliminare dal percorso al momento di applicare una patch. Questo numero viene chiamato il <emphasis>numero di cancellazioni</emphasis>.</para>
    1.95  
    1.96 @@ -226,14 +226,14 @@
    1.97  
    1.98        <para id="x_3ea">Il numero di cancellazioni <quote>standard</quote> per le patch è pari a uno, in quanto quasi tutte le patch contengono un elemento iniziale da eliminare nel percorso. Il comando <command role="hg-cmd">hg diff</command> di Mercurial genera nomi di percorso in questa forma e sia il comando <command role="hg-cmd">hg import</command> che MQ si aspettano patch con un numero di cancellazioni pari a uno.</para>
    1.99  
   1.100 -      <para id="x_3eb">Se qualcuno vi invia una patch che volete aggiungere alla vostra coda delle patch e la patch necessita di un numero di cancellazioni diverso da uno, non potete usare semplicemente <command role="hg-ext-mq">qimport</command> con la patch, perché <command role="hg-ext-mq">qimport</command> non è ancora dotato di un'opzione <literal>-p</literal> (si veda il <ulink role="hg-bug" url="http://www.selenic.com/mercurial/bts/issue311">problema 311</ulink> per i dettagli). L'alternativa migliore che avete è quella di creare una vostra patch con <command role="hg-ext-mq">qnew</command> e poi usare <command>patch -pN</command> per applicare la patch che avete ricevuto, seguito da <command role="hg-cmd">hg addremove</command> per registrare qualsiasi file aggiunto o rimosso dalla patch, seguito da <command role="hg-ext-mq">hg qrefresh</command>. Questa complessità potrebbe diventare inutile una volta che il <ulink role="hg-bug" url="http://www.selenic.com/mercurial/bts/issue311">problema 311</ulink> venga risolto.
   1.101 +      <para id="x_3eb">Se qualcuno vi invia una patch che volete aggiungere alla vostra coda delle patch e la patch necessita di un numero di cancellazioni diverso da uno, non potete usare semplicemente <command role="hg-ext-mq">qimport</command> con la patch, perché <command role="hg-ext-mq">qimport</command> non è ancora dotato di un'opzione <literal>-p</literal> (si veda il <ulink role="hg-bug" url="http://www.selenic.com/mercurial/bts/issue311">problema 311</ulink> per i dettagli). L'alternativa migliore che avete è quella di creare una vostra patch con <command role="hg-ext-mq">qnew</command> e poi usare il comando <command>patch -pN</command> per applicare la patch che avete ricevuto, seguito da <command role="hg-cmd">hg addremove</command> per registrare qualsiasi file aggiunto o rimosso dalla patch, seguito da <command role="hg-ext-mq">hg qrefresh</command>. Questa complessità potrebbe diventare inutile una volta che il <ulink role="hg-bug" url="http://www.selenic.com/mercurial/bts/issue311">problema 311</ulink> verrà risolto.
   1.102        </para>
   1.103      </sect2>
   1.104  
   1.105      <sect2>
   1.106        <title>Strategie per applicare una patch</title>
   1.107  
   1.108 -      <para id="x_3ec">Quando <command>patch</command> applica un blocco, prova a impiegare una serie di strategie successive sempre meno accurate per portare a termine l'operazione. Questo impiego di tecniche alternative spesso rende possibile prendere una patch che è stata generata a partire da una vecchia versione di un file e applicarla alla nuova versione di quel file.</para>
   1.109 +      <para id="x_3ec">Quando <command>patch</command> applica un blocco, prova a impiegare una serie di strategie successive sempre meno accurate per portare a termine l'operazione. Questo impiego di tecniche alternative rende spesso possibile prendere una patch che è stata generata a partire da una vecchia versione di un file e applicarla alla nuova versione di quel file.</para>
   1.110  
   1.111        <para id="x_3ed">Come prima cosa, <command>patch</command> cerca una corrispondenza esatta, dove i numeri di riga, il contesto e il testo da modificare devono applicarsi perfettamente. Se non riesce a trovare una corrispondenza esatta, cerca una corrispondenza esatta per il contesto, senza onorare le informazioni sulla numerazione delle righe. Se questa strategia ha successo, il comando stampa una riga dicendo che il blocco è stato applicato, ma con un certo <emphasis>scostamento</emphasis> rispetto al numero di riga originale.</para>
   1.112  
   1.113 @@ -277,12 +277,12 @@
   1.114  
   1.115        <para id="x_3fa">Se <emphasis>di solito</emphasis> la vostra patch si applicava in maniera pulita e ora non lo fa più perché avete modificato il codice sottostante su cui si basavano le vostre patch, Mercurial Queues può aiutarvi: leggete la <xref linkend="sec:mq:merge"/> per i dettagli.</para>
   1.116  
   1.117 -      <para id="x_3fb">Sfortunatamente, non esiste alcuna tecnica particolare per gestire i blocchi rifiutati. Molto spesso, avrete bisogno di esaminare il file <filename role="special">.rej</filename> e di modificare il file di destinazione, applicando a mano i blocchi rifiutati.</para>
   1.118 -
   1.119 -      <para id="x_3fd">Un programmatore del kernel di Linux, Chris Mason (l'autore di Mercurial Queues), ha realizzato uno strumento chiamato <command>mpatch</command> (<ulink url="http://oss.oracle.com/~mason/mpatch/">http://oss.oracle.com/~mason/mpatch/</ulink>), che adotta un approccio semplice per automatizzare l'applicazione dei blocchi rifiutati da <command>patch</command>. Il comando <command>mpatch</command> può aiutarvi nel caso il blocco sia stato rifiutato per quattro tipiche ragioni:</para>
   1.120 +      <para id="x_3fb">Sfortunatamente, non esiste alcuna tecnica particolare per gestire i blocchi rifiutati. Molto spesso, dovrete esaminare il file <filename role="special">.rej</filename> e modificare il file di destinazione, applicando a mano i blocchi rifiutati.</para>
   1.121 +
   1.122 +      <para id="x_3fd">Un programmatore del kernel di Linux, Chris Mason (l'autore di Mercurial Queues), ha realizzato uno strumento chiamato <command>mpatch</command> (<ulink url="http://oss.oracle.com/~mason/mpatch/">http://oss.oracle.com/~mason/mpatch/</ulink>), che adotta un metodo semplice per automatizzare l'applicazione dei blocchi rifiutati da <command>patch</command>. Il comando <command>mpatch</command> può aiutarvi nel caso il blocco sia stato rifiutato per quattro tipiche ragioni:</para>
   1.123  
   1.124        <itemizedlist>
   1.125 -	<listitem><para id="x_3fe">il contesto nel mezzo di un blocco è cambiato;</para>
   1.126 +	<listitem><para id="x_3fe">il contesto in mezzo a un blocco è cambiato;</para>
   1.127  	</listitem>
   1.128  	<listitem><para id="x_3ff">all'inizio o alla fine del blocco manca una certa quantità di contesto;</para>
   1.129  	</listitem>
   1.130 @@ -310,7 +310,7 @@
   1.131      </sect2>
   1.132  
   1.133      <sect2>
   1.134 -      <title>Convertire verso e da revisioni permanenti</title>
   1.135 +      <title>Convertire in e da revisioni permanenti</title>
   1.136  
   1.137        <para id="x_6dd">Una volta che avete finito di lavorare con una patch e volete trasformarla in un changeset permanente, usate il comando <command role="hg-ext-mq">hg qfinish</command>. Passate una revisione al comando per identificare la patch che volete trasformare in un normale changeset; questa patch deve essere già stata applicata.</para>
   1.138  
   1.139 @@ -339,7 +339,7 @@
   1.140  
   1.141      <para id="x_407">I comandi <command role="hg-ext-mq">qpush</command> e <command role="hg-ext-mq">qpop</command> vi permettono di estrarre e inserire più patch alla volta. Come prima cosa, identificate la <quote>patch di destinazione</quote> che volete raggiungere. Quando usate <command role="hg-ext-mq">qpush</command> specificando una destinazione, il comando inserirà patch finché quella patch non si troverà in cima alla pila delle patch applicate. Quando usate <command role="hg-ext-mq">qpop</command> con una destinazione, MQ estrarrà patch finché la patch di destinazione non si troverà in cima a quella pila.</para>
   1.142  
   1.143 -    <para id="x_408">Potete identificare una patch di destinazione usando il nome della patch oppure un numero. Se usate un identificatore numerico, il conteggio delle patch parte da zero; questo significa che la prima patch corrisponde a zero, la seconda a uno, e così via.</para>
   1.144 +    <para id="x_408">Potete indicare una patch di destinazione usando il nome della patch oppure un numero. Se usate un identificatore numerico, il conteggio delle patch parte da zero: questo significa che la prima patch corrisponde a zero, la seconda a uno, e così via.</para>
   1.145    </sect1>
   1.146  
   1.147    <sect1 id="sec:mq:merge">
   1.148 @@ -366,7 +366,7 @@
   1.149        <listitem><para id="x_412">Unite tutte le patch usando <command>hg qpush -m -a</command>. L'opzione <option role="hg-ext-mq-cmd-qpush-opt">-m</option> di <command role="hg-ext-mq">qpush</command> dice a MQ di effettuare un'unione a tre vie se l'applicazione di una patch fallisce.</para>
   1.150        </listitem></orderedlist>
   1.151  
   1.152 -    <para id="x_413">Durante l'esecuzione di <command role="hg-cmd">hg qpush <option role="hg-ext-mq-cmd-qpush-opt">-m</option></command>, ogni patch nel file <filename role="special">series</filename> viene applicata normalmente. Se una patch viene applicata con un fattore di incertezza o viene rifiutata, MQ esamina la coda che avete salvato tramite <command role="hg-ext-mq">qsave</command> ed effettua un'unione a tre vie con il changeset che corrisponde alla patch. Questa unione sfrutta il normale meccanismo di unione di Mercurial, quindi potrebbe aprire uno strumento grafico per le unioni in modo da aiutarvi a risolvere i problemi.</para>
   1.153 +    <para id="x_413">Durante l'esecuzione di <command role="hg-cmd">hg qpush <option role="hg-ext-mq-cmd-qpush-opt">-m</option></command>, ogni patch nel file <filename role="special">series</filename> viene applicata normalmente. Se una patch viene applicata con un fattore di incertezza o viene rifiutata, MQ esamina la coda che avete salvato tramite <command role="hg-ext-mq">qsave</command> ed effettua un'unione a tre vie con il changeset che corrisponde alla patch. Questa operazione sfrutta il normale meccanismo di unione di Mercurial, quindi potrebbe aprire uno strumento grafico di unione in modo da aiutarvi a risolvere i problemi.</para>
   1.154  
   1.155      <para id="x_414">Quando avete finito di risolvere gli effetti di una patch, MQ aggiornerà la vostra patch sulla base dei risultati dell'unione.</para>
   1.156  
   1.157 @@ -390,7 +390,7 @@
   1.158  	<programlisting>hg email qbase:qtip</programlisting>
   1.159  	<para id="x_41c">(Non sapete cosa sia un <quote>bombardamento di patch</quote>? Leggete la <xref linkend="sec:hgext:patchbomb"/>.)</para>
   1.160        </listitem>
   1.161 -      <listitem><para id="x_41d">Avete bisogno di vedere tutte le patch che da <literal>foo.patch</literal> in poi hanno toccato i file contenuti in una sottodirectory del vostro albero?</para>
   1.162 +      <listitem><para id="x_41d">Avete bisogno di vedere tutte le patch che da <literal>foo.patch</literal> in poi hanno coinvolto i file contenuti in una sottodirectory del vostro albero?</para>
   1.163  	<programlisting>hg log -r foo.patch:qtip sottodirectory</programlisting>
   1.164        </listitem>
   1.165      </itemizedlist>
   1.166 @@ -410,7 +410,7 @@
   1.167      <itemizedlist>
   1.168        <listitem><para id="x_421">Normalmente, quando estraete una patch tramite <command role="hg-ext-mq">qpop</command> e poi la reinserite tramite <command role="hg-ext-mq">qpush</command>, il changeset che rappresenta la patch dopo l'estrazione/inserimento avrà una <emphasis>diversa identità</emphasis> rispetto al changeset che rappresentava l'hash in precedenza. Leggete la <xref linkend="sec:mqref:cmd:qpush"/> per sapere perché.</para>
   1.169        </listitem>
   1.170 -      <listitem><para id="x_422">Non è una buona idea usare <command role="hg-cmd">hg merge</command> per unire i cambiamenti da un altro ramo con un changeset corrispondente a una patch, almeno se volete mantenere la <quote>natura di patch</quote> di quel changeset e dei changeset che si trovano sotto a quello nella pila delle patch. Se provate a farlo, sembrerà avere successo, ma l'effetto sarà quello di disorientare MQ.</para>
   1.171 +      <listitem><para id="x_422">Non è una buona idea usare <command role="hg-cmd">hg merge</command> per unire i cambiamenti provenienti da un altro ramo con un changeset corrispondente a una patch, almeno se volete mantenere la <quote>natura di patch</quote> di quel changeset e dei changeset che si trovano sotto a quello nella pila delle patch. Se provate a farlo, sembrerà avere successo, ma l'effetto sarà quello di disorientare MQ.</para>
   1.172        </listitem>
   1.173      </itemizedlist>
   1.174    </sect1>
   1.175 @@ -451,7 +451,7 @@
   1.176  
   1.177        <para id="x_42e">Il supporto di MQ per lavorare con un repository pieno di patch è limitato in alcuni aspetti di dettaglio.</para>
   1.178  
   1.179 -      <para id="x_42f">MQ non può automaticamente scoprire quali modifiche avete fatto alla directory delle patch. Se usate <command role="hg-cmd">hg pull</command>, apportate cambiamenti a mano, o invocate <command role="hg-cmd">hg update</command> per aggiornare le modifiche alle patch o al file <filename role="special">series</filename>, dovrete usare <command role="hg-cmd">hg qpop <option role="hg-ext-mq-cmd-qpop-opt">-a</option></command> e poi <command role="hg-cmd">hg qpush <option role="hg-ext-mq-cmd-qpush-opt">-a</option></command> nel repository sottostante per fare in modo che quelle modifiche compaiano anche là. Se dimenticate di fare questo, potete confondere le idee a MQ in merito a quali patch sono state effettivamente applicate.</para>
   1.180 +      <para id="x_42f">MQ non può automaticamente scoprire quali modifiche avete fatto alla directory delle patch. Se usate <command role="hg-cmd">hg pull</command>, apportate cambiamenti a mano, o invocate <command role="hg-cmd">hg update</command> per aggiornare le modifiche alle patch o al file <filename role="special">series</filename>, dovrete usare <command role="hg-cmd">hg qpop <option role="hg-ext-mq-cmd-qpop-opt">-a</option></command> e poi <command role="hg-cmd">hg qpush <option role="hg-ext-mq-cmd-qpush-opt">-a</option></command> nel repository sottostante per fare in modo che quelle modifiche compaiano anche là. Se dimenticate di fare questo, potreste confondere le idee a MQ in merito a quali patch sono state effettivamente applicate.</para>
   1.181  
   1.182      </sect2>
   1.183    </sect1>
   1.184 @@ -464,7 +464,7 @@
   1.185  
   1.186      &interaction.mq.tools.tools;
   1.187  
   1.188 -    <para id="x_432">Il pacchetto <literal role="package">patchutils</literal> <citation>web:patchutils</citation> è inestimabile. Fornisce un insieme di piccole utilità che seguono la <quote>filosofia Unix:</quote> ognuna effettua una singola operazione utile su una patch. Il comando di <literal role="package">patchutils</literal> che uso di più è <command>filterdiff</command>, che estrae sottoinsiemi di un file di patch. Per esempio, data una patch che modifica centinaia di file attraverso dozzine di directory, una singola invocazione di <command>filterdiff</command> può generare una patch più piccola che coinvolge solo i file il cui nome corrisponde a un particolare pattern di tipo glob. Leggete la <xref linkend="mq-collab:tips:interdiff"/> per un altro esempio.</para>
   1.189 +    <para id="x_432">Il pacchetto <literal role="package">patchutils</literal> <citation>web:patchutils</citation> è inestimabile. Fornisce un insieme di piccole utilità che seguono la <quote>filosofia Unix</quote>: ognuna effettua una singola operazione utile su una patch. Il comando di <literal role="package">patchutils</literal> che uso di più è <command>filterdiff</command>, che estrae sottoinsiemi di un file di patch. Per esempio, data una patch che modifica centinaia di file attraverso dozzine di directory, una singola invocazione di <command>filterdiff</command> può generare una patch più piccola che coinvolge solo i file il cui nome corrisponde a un particolare pattern di tipo glob. Leggete la <xref linkend="mq-collab:tips:interdiff"/> per un altro esempio.</para>
   1.190  
   1.191    </sect1>
   1.192    <sect1>
   1.193 @@ -472,7 +472,7 @@
   1.194  
   1.195      <para id="x_433">Sia che stiate lavorando su una serie di patch da sottoporre a un progetto software libero od open source, o su una serie che intendete trattare come una sequenza di normali changeset una volta che avete finito, potete usare alcune semplici tecniche per mantenere bene organizzato il vostro lavoro.</para>
   1.196  
   1.197 -    <para id="x_434">Date nomi descrittivi alle vostre patch. Un buon nome per una patch potrebbe essere <filename>rework-device-alloc.patch</filename>, perché vi suggerirà immediatamente qual è lo scopo della patch. I nomi lunghi non dovrebbero essere un problema: non digiterete i nomi spesso, ma <emphasis>invocherete</emphasis> comandi come <command role="hg-ext-mq">qapplied</command> e <command role="hg-ext-mq">qtop</command> più e più volte. Una buona denominazione diventa particolarmente importante quando state lavorando con un certo numero di patch, o se vi state destreggiando tra un certo numero di attività differenti e le vostre patch ottengono solo una frazione della vostra attenzione.</para>
   1.198 +    <para id="x_434">Date nomi descrittivi alle vostre patch. Un buon nome per una patch potrebbe essere <filename>riorganizza-allocazione-dispositivi.patch</filename>, perché vi suggerirà immediatamente qual è lo scopo della patch. I nomi lunghi non dovrebbero essere un problema: non digiterete i nomi spesso, ma <emphasis>invocherete</emphasis> comandi come <command role="hg-ext-mq">qapplied</command> e <command role="hg-ext-mq">qtop</command> più e più volte. Una buona denominazione diventa particolarmente importante quando state lavorando con un certo numero di patch, o se vi state destreggiando tra un certo numero di attività differenti e le vostre patch ottengono solo una frazione della vostra attenzione.</para>
   1.199  
   1.200      <para id="x_435">Siate consapevoli della patch su cui state lavorando. Usate frequentemente il comando <command role="hg-ext-mq">qtop</command> e date un'occhiata al testo delle vostre patch&emdash;per esempio, usando <command role="hg-cmd">hg tip <option role="hg-opt-tip">-p</option></command>&emdash;per assicurarvi di sapere dove vi trovate. Mi è capitato molte volte di modificare e aggiornare una patch diversa da quella che intendevo, ed è spesso complicato trasferire le modifiche nella patch giusta dopo averle inserite in quella sbagliata.</para>
   1.201  
   1.202 @@ -495,11 +495,11 @@
   1.203  
   1.204        &interaction.mq.tarball.qinit;
   1.205  
   1.206 -      <para id="x_43a">Diciamo che trascorrono alcune settimane o mesi e gli autori di quel pacchetto rilascia una nuova versione. Prima di tutto, propagate i loro cambiamenti nel repository.</para>
   1.207 +      <para id="x_43a">Diciamo che trascorrono alcune settimane o mesi e gli autori di quel pacchetto rilasciano una nuova versione. Prima di tutto, propagate i loro cambiamenti nel repository.</para>
   1.208  
   1.209        &interaction.mq.tarball.newsource;
   1.210  
   1.211 -      <para id="x_43b">La serie di comandi iniziata con <command role="hg-cmd">hg locate</command> che avete appena invocato cancella tutti i file dalla directory di lavoro, in modo che l'opzione <option role="hg-opt-commit">--addremove</option> di <command role="hg-cmd">hg commit</command> possa effettivamente dirvi quali file sono stati davvero rimossi nella nuova versione dei sorgenti.</para>
   1.212 +      <para id="x_43b">La coppia di comandi che comincia con <command role="hg-cmd">hg locate</command> appena invocata cancella tutti i file dalla directory di lavoro, in modo che l'opzione <option role="hg-opt-commit">--addremove</option> di <command role="hg-cmd">hg commit</command> possa effettivamente dirvi quali file sono stati davvero rimossi nella nuova versione dei sorgenti.</para>
   1.213  
   1.214        <para id="x_43c">Infine, potete applicare le vostre patch al nuovo albero.</para>
   1.215  
     2.1 --- a/it/examples/auto-snippets.xml	Sat Aug 15 12:50:55 2009 +0200
     2.2 +++ b/it/examples/auto-snippets.xml	Sat Aug 15 15:15:39 2009 +0200
     2.3 @@ -84,8 +84,8 @@
     2.4  <!ENTITY interaction.ch09-hook.ws.simple SYSTEM "ch09-hook.ws.simple.it">
     2.5  <!ENTITY interaction.ch10-multiline.go SYSTEM "ch10-multiline.go.it">
     2.6  <!ENTITY interaction.ch10-multiline.orig.go SYSTEM "results/ch10-multiline.orig.go.lxo">
     2.7 -<!ENTITY interaction.ch11-qdelete.convert SYSTEM "results/ch11-qdelete.convert.lxo">
     2.8 -<!ENTITY interaction.ch11-qdelete.go SYSTEM "results/ch11-qdelete.go.lxo">
     2.9 +<!ENTITY interaction.ch11-qdelete.convert SYSTEM "ch11-qdelete.convert.it">
    2.10 +<!ENTITY interaction.ch11-qdelete.go SYSTEM "ch11-qdelete.go.it">
    2.11  <!ENTITY interaction.ch11-qdelete.import SYSTEM "results/ch11-qdelete.import.lxo">
    2.12  <!ENTITY interaction.cmdref.diff-p SYSTEM "results/cmdref.diff-p.lxo">
    2.13  <!ENTITY interaction.daily.copy.after SYSTEM "daily.copy.after.it">
    2.14 @@ -155,7 +155,7 @@
    2.15  <!ENTITY interaction.hook.simple.init SYSTEM "hook.simple.init.it">
    2.16  <!ENTITY interaction.hook.simple.pretxncommit SYSTEM "hook.simple.pretxncommit.it">
    2.17  <!ENTITY interaction.issue29.go SYSTEM "issue29.go.it">
    2.18 -<!ENTITY interaction.mq.dodiff.diff SYSTEM "results/mq.dodiff.diff.lxo">
    2.19 +<!ENTITY interaction.mq.dodiff.diff SYSTEM "mq.dodiff.diff.it">
    2.20  <!ENTITY interaction.mq.guards.init SYSTEM "results/mq.guards.init.lxo">
    2.21  <!ENTITY interaction.mq.guards.qguard SYSTEM "results/mq.guards.qguard.lxo">
    2.22  <!ENTITY interaction.mq.guards.qguard.neg SYSTEM "results/mq.guards.qguard.neg.lxo">
    2.23 @@ -168,23 +168,23 @@
    2.24  <!ENTITY interaction.mq.guards.qselect.quux SYSTEM "results/mq.guards.qselect.quux.lxo">
    2.25  <!ENTITY interaction.mq.guards.series SYSTEM "results/mq.guards.series.lxo">
    2.26  <!ENTITY interaction.mq.id.lxoput SYSTEM "results/mq.id.lxoput.lxo">
    2.27 -<!ENTITY interaction.mq.id.output SYSTEM "results/mq.id.output.lxo">
    2.28 -<!ENTITY interaction.mq.qinit-help.help SYSTEM "results/mq.qinit-help.help.lxo">
    2.29 -<!ENTITY interaction.mq.tarball.download SYSTEM "results/mq.tarball.download.lxo">
    2.30 -<!ENTITY interaction.mq.tarball.newsource SYSTEM "results/mq.tarball.newsource.lxo">
    2.31 -<!ENTITY interaction.mq.tarball.qinit SYSTEM "results/mq.tarball.qinit.lxo">
    2.32 -<!ENTITY interaction.mq.tarball.repush SYSTEM "results/mq.tarball.repush.lxo">
    2.33 -<!ENTITY interaction.mq.tools.lsdiff SYSTEM "results/mq.tools.lsdiff.lxo">
    2.34 -<!ENTITY interaction.mq.tools.tools SYSTEM "results/mq.tools.tools.lxo">
    2.35 -<!ENTITY interaction.mq.tutorial.add SYSTEM "results/mq.tutorial.add.lxo">
    2.36 -<!ENTITY interaction.mq.tutorial.qinit SYSTEM "results/mq.tutorial.qinit.lxo">
    2.37 -<!ENTITY interaction.mq.tutorial.qnew SYSTEM "results/mq.tutorial.qnew.lxo">
    2.38 -<!ENTITY interaction.mq.tutorial.qnew2 SYSTEM "results/mq.tutorial.qnew2.lxo">
    2.39 -<!ENTITY interaction.mq.tutorial.qpop SYSTEM "results/mq.tutorial.qpop.lxo">
    2.40 -<!ENTITY interaction.mq.tutorial.qpush-a SYSTEM "results/mq.tutorial.qpush-a.lxo">
    2.41 -<!ENTITY interaction.mq.tutorial.qrefresh SYSTEM "results/mq.tutorial.qrefresh.lxo">
    2.42 -<!ENTITY interaction.mq.tutorial.qrefresh2 SYSTEM "results/mq.tutorial.qrefresh2.lxo">
    2.43 -<!ENTITY interaction.mq.tutorial.qseries SYSTEM "results/mq.tutorial.qseries.lxo">
    2.44 +<!ENTITY interaction.mq.id.output SYSTEM "mq.id.output.it">
    2.45 +<!ENTITY interaction.mq.qinit-help.help SYSTEM "mq.qinit-help.help.it">
    2.46 +<!ENTITY interaction.mq.tarball.download SYSTEM "mq.tarball.download.it">
    2.47 +<!ENTITY interaction.mq.tarball.newsource SYSTEM "mq.tarball.newsource.it">
    2.48 +<!ENTITY interaction.mq.tarball.qinit SYSTEM "mq.tarball.qinit.it">
    2.49 +<!ENTITY interaction.mq.tarball.repush SYSTEM "mq.tarball.repush.it">
    2.50 +<!ENTITY interaction.mq.tools.lsdiff SYSTEM "mq.tools.lsdiff.it">
    2.51 +<!ENTITY interaction.mq.tools.tools SYSTEM "mq.tools.tools.it">
    2.52 +<!ENTITY interaction.mq.tutorial.add SYSTEM "mq.tutorial.add.it">
    2.53 +<!ENTITY interaction.mq.tutorial.qinit SYSTEM "mq.tutorial.qinit.it">
    2.54 +<!ENTITY interaction.mq.tutorial.qnew SYSTEM "mq.tutorial.qnew.it">
    2.55 +<!ENTITY interaction.mq.tutorial.qnew2 SYSTEM "mq.tutorial.qnew2.it">
    2.56 +<!ENTITY interaction.mq.tutorial.qpop SYSTEM "mq.tutorial.qpop.it">
    2.57 +<!ENTITY interaction.mq.tutorial.qpush-a SYSTEM "mq.tutorial.qpush-a.it">
    2.58 +<!ENTITY interaction.mq.tutorial.qrefresh SYSTEM "mq.tutorial.qrefresh.it">
    2.59 +<!ENTITY interaction.mq.tutorial.qrefresh2 SYSTEM "mq.tutorial.qrefresh2.it">
    2.60 +<!ENTITY interaction.mq.tutorial.qseries SYSTEM "mq.tutorial.qseries.it">
    2.61  <!ENTITY interaction.rename.divergent.clone SYSTEM "rename.divergent.clone.it">
    2.62  <!ENTITY interaction.rename.divergent.merge SYSTEM "rename.divergent.merge.it">
    2.63  <!ENTITY interaction.rename.divergent.rename.anne SYSTEM "rename.divergent.rename.anne.it">
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/it/examples/ch11-qdelete.convert.it	Sat Aug 15 15:15:39 2009 +0200
     3.3 @@ -0,0 +1,13 @@
     3.4 +<!-- BEGIN ch11/qdelete.convert -->
     3.5 +<screen><prompt>$</prompt> <userinput>hg qnew buona.patch</userinput>
     3.6 +<prompt>$</prompt> <userinput>echo a &gt; a</userinput>
     3.7 +<prompt>$</prompt> <userinput>hg add a</userinput>
     3.8 +<prompt>$</prompt> <userinput>hg qrefresh -m 'Buona modifica.'</userinput>
     3.9 +<prompt>$</prompt> <userinput>hg qfinish tip</userinput>
    3.10 +<prompt>$</prompt> <userinput>hg qapplied</userinput>
    3.11 +<prompt>$</prompt> <userinput>hg tip --style=compact</userinput>
    3.12 +0[tip]   8eae2605f537   2009-06-05 15:49 +0000   bos
    3.13 +  Buona modifica.
    3.14 +
    3.15 +</screen>
    3.16 +<!-- END ch11/qdelete.convert -->
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/it/examples/ch11-qdelete.go.it	Sat Aug 15 15:15:39 2009 +0200
     4.3 @@ -0,0 +1,15 @@
     4.4 +<!-- BEGIN ch11/qdelete.go -->
     4.5 +<screen><prompt>$</prompt> <userinput>hg init miorepo</userinput>
     4.6 +<prompt>$</prompt> <userinput>cd miorepo</userinput>
     4.7 +<prompt>$</prompt> <userinput>hg qinit</userinput>
     4.8 +<prompt>$</prompt> <userinput>hg qnew cattiva.patch</userinput>
     4.9 +<prompt>$</prompt> <userinput>echo a &gt; a</userinput>
    4.10 +<prompt>$</prompt> <userinput>hg add a</userinput>
    4.11 +<prompt>$</prompt> <userinput>hg qrefresh</userinput>
    4.12 +<prompt>$</prompt> <userinput>hg qdelete cattiva.patch</userinput>
    4.13 +fallimento: non posso cancellare la patch applicata cattiva.patch
    4.14 +<prompt>$</prompt> <userinput>hg qpop</userinput>
    4.15 +la coda delle patch è vuota
    4.16 +<prompt>$</prompt> <userinput>hg qdelete cattiva.patch</userinput>
    4.17 +</screen>
    4.18 +<!-- END ch11/qdelete.go -->
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/it/examples/mq.dodiff.diff.it	Sat Aug 15 15:15:39 2009 +0200
     5.3 @@ -0,0 +1,16 @@
     5.4 +<!-- BEGIN mq.dodiff.diff -->
     5.5 +<screen><prompt>$</prompt> <userinput>echo 'questo è il mio primo pensiero' &gt; vecchiofile</userinput>
     5.6 +<prompt>$</prompt> <userinput>echo 'ho cambiato idea' &gt; nuovofile</userinput>
     5.7 +<prompt>$</prompt> <userinput>diff -u vecchiofile nuovofile &gt; piccola.patch</userinput>
     5.8 +<prompt>$</prompt> <userinput>cat piccola.patch</userinput>
     5.9 +--- vecchiofile	2009-06-05 15:50:32.000000000 +0000
    5.10 ++++ nuovofile	2009-06-05 15:50:32.000000000 +0000
    5.11 +@@ -1 +1 @@
    5.12 +-questo è il mio primo pensiero
    5.13 ++ho cambiato idea
    5.14 +<prompt>$</prompt> <userinput>patch &lt; piccola.patch</userinput>
    5.15 +correggo il file vecchiofile
    5.16 +<prompt>$</prompt> <userinput>cat vecchiofile</userinput>
    5.17 +ho cambiato idea
    5.18 +</screen>
    5.19 +<!-- END mq.dodiff.diff -->
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/it/examples/mq.id.output.it	Sat Aug 15 15:15:39 2009 +0200
     6.3 @@ -0,0 +1,35 @@
     6.4 +<!-- BEGIN mq.id.output -->
     6.5 +<screen><prompt>$</prompt> <userinput>hg qapplied</userinput>
     6.6 +prima.patch
     6.7 +seconda.patch
     6.8 +<prompt>$</prompt> <userinput>hg log -r qbase:qtip</userinput>
     6.9 +changeset:   1:32b3cae9e753
    6.10 +tag:         prima.patch
    6.11 +tag:         qbase
    6.12 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
    6.13 +date:        Fri Jun 05 15:50:45 2009 +0000
    6.14 +summary:     [mq]: prima.patch
    6.15 +
    6.16 +changeset:   2:dee839d89dc6
    6.17 +tag:         qtip
    6.18 +tag:         seconda.patch
    6.19 +tag:         tip
    6.20 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
    6.21 +date:        Fri Jun 05 15:50:46 2009 +0000
    6.22 +summary:     [mq]: seconda.patch
    6.23 +
    6.24 +<prompt>$</prompt> <userinput>hg export seconda.patch</userinput>
    6.25 +# HG changeset di patch
    6.26 +# Utente Bryan O'Sullivan &lt;bos@serpentine.com&gt;
    6.27 +# Data 1244217046 0
    6.28 +# ID di nodo dee839d89dc6e420682b02551b31e8375929aa7c
    6.29 +# Genitore 32b3cae9e753537be60bb2fbfefe0de3e19ec4a3
    6.30 +[mq]: seconda.patch
    6.31 +
    6.32 +diff -r 32b3cae9e753 -r dee839d89dc6 altro.c
    6.33 +--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    6.34 ++++ b/altro.c	Fri Jun 05 15:50:46 2009 +0000
    6.35 +@@ -0,0 +1,1 @@
    6.36 ++double u;
    6.37 +</screen>
    6.38 +<!-- END mq.id.output -->
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/it/examples/mq.qinit-help.help.it	Sat Aug 15 15:15:39 2009 +0200
     7.3 @@ -0,0 +1,20 @@
     7.4 +<!-- BEGIN mq.qinit-help.help -->
     7.5 +<screen><prompt>$</prompt> <userinput>hg help qinit</userinput>
     7.6 +hg qinit [-c]
     7.7 +
     7.8 +inizializza un nuovo repository di coda
     7.9 +
    7.10 +    Per default, il repository di coda non è sotto controllo di
    7.11 +    versione. Se viene specificato -c, qinit creerà un repository
    7.12 +    annidato separato per le patch (qinit -c può anche essere
    7.13 +    invocato più tardi per convertire un repository di patch non
    7.14 +    gestito in uno gestito). Potete usare qcommit per inserire
    7.15 +    modifiche in questo repository di coda.
    7.16 +
    7.17 +opzioni:
    7.18 +
    7.19 + -c --create-repo  crea il repository di coda
    7.20 +
    7.21 +usate "hg -v help qinit" per vedere le opzioni globali
    7.22 +</screen>
    7.23 +<!-- END mq.qinit-help.help -->
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/it/examples/mq.tarball.download.it	Sat Aug 15 15:15:39 2009 +0200
     8.3 @@ -0,0 +1,12 @@
     8.4 +<!-- BEGIN mq.tarball.download -->
     8.5 +<screen><prompt>$</prompt> <userinput>download netplug-1.2.5.tar.bz2</userinput>
     8.6 +<prompt>$</prompt> <userinput>tar jxf netplug-1.2.5.tar.bz2</userinput>
     8.7 +<prompt>$</prompt> <userinput>cd netplug-1.2.5</userinput>
     8.8 +<prompt>$</prompt> <userinput>hg init</userinput>
     8.9 +<prompt>$</prompt> <userinput>hg commit -q --addremove --message netplug-1.2.5</userinput>
    8.10 +<prompt>$</prompt> <userinput>cd ..</userinput>
    8.11 +<prompt>$</prompt> <userinput>hg clone netplug-1.2.5 netplug</userinput>
    8.12 +aggiorno la directory di lavoro
    8.13 +18 file aggiornati, 0 file uniti, 0 file rimossi, 0 file irrisolti
    8.14 +</screen>
    8.15 +<!-- END mq.tarball.download -->
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/it/examples/mq.tarball.newsource.it	Sat Aug 15 15:15:39 2009 +0200
     9.3 @@ -0,0 +1,16 @@
     9.4 +<!-- BEGIN mq.tarball.newsource -->
     9.5 +<screen><prompt>$</prompt> <userinput>hg qpop -a</userinput>
     9.6 +la coda delle patch è vuota
     9.7 +<prompt>$</prompt> <userinput>cd ..</userinput>
     9.8 +<prompt>$</prompt> <userinput>download netplug-1.2.8.tar.bz2</userinput>
     9.9 +<prompt>$</prompt> <userinput>hg clone netplug-1.2.5 netplug-1.2.8</userinput>
    9.10 +aggiorno la directory di lavoro
    9.11 +18 file aggiornati, 0 file uniti, 0 file rimossi, 0 file irrisolti
    9.12 +<prompt>$</prompt> <userinput>cd netplug-1.2.8</userinput>
    9.13 +<prompt>$</prompt> <userinput>hg locate -0 | xargs -0 rm</userinput>
    9.14 +<prompt>$</prompt> <userinput>cd ..</userinput>
    9.15 +<prompt>$</prompt> <userinput>tar jxf netplug-1.2.8.tar.bz2</userinput>
    9.16 +<prompt>$</prompt> <userinput>cd netplug-1.2.8</userinput>
    9.17 +<prompt>$</prompt> <userinput>hg commit --addremove --message netplug-1.2.8</userinput>
    9.18 +</screen>
    9.19 +<!-- END mq.tarball.newsource -->
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/it/examples/mq.tarball.qinit.it	Sat Aug 15 15:15:39 2009 +0200
    10.3 @@ -0,0 +1,31 @@
    10.4 +<!-- BEGIN mq.tarball.qinit -->
    10.5 +<screen><prompt>$</prompt> <userinput>cd netplug</userinput>
    10.6 +<prompt>$</prompt> <userinput>hg qinit</userinput>
    10.7 +<prompt>$</prompt> <userinput>hg qnew -m 'corregge un problema di assemblaggio con gcc 4' correzione-assemblaggio.patch</userinput>
    10.8 +<prompt>$</prompt> <userinput>perl -pi -e 's/int addr_len/socklen_t addr_len/' netlink.c</userinput>
    10.9 +<prompt>$</prompt> <userinput>hg qrefresh</userinput>
   10.10 +<prompt>$</prompt> <userinput>hg tip -p</userinput>
   10.11 +changeset:   1:5227ba4b6a8b
   10.12 +tag:         qtip
   10.13 +tag:         correzione-assemblaggio.patch
   10.14 +tag:         tip
   10.15 +tag:         qbase
   10.16 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
   10.17 +date:        Fri Jun 05 15:50:51 2009 +0000
   10.18 +summary:     corregge un problema di assemblaggio con gcc 4
   10.19 +
   10.20 +diff -r e709896f2959 -r 5227ba4b6a8b netlink.c
   10.21 +--- a/netlink.c	Fri Jun 05 15:50:49 2009 +0000
   10.22 ++++ b/netlink.c	Fri Jun 05 15:50:51 2009 +0000
   10.23 +@@ -275,7 +275,7 @@
   10.24 +         exit(1);
   10.25 +     }
   10.26 + 
   10.27 +-    int addr_len = sizeof(addr);
   10.28 ++    socklen_t addr_len = sizeof(addr);
   10.29 + 
   10.30 +     if (getsockname(fd, (struct sockaddr *) &amp;addr, &amp;addr_len) == -1) {
   10.31 +         do_log(LOG_ERR, "Could not get socket details: %m");
   10.32 +
   10.33 +</screen>
   10.34 +<!-- END mq.tarball.qinit -->
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/it/examples/mq.tarball.repush.it	Sat Aug 15 15:15:39 2009 +0200
    11.3 @@ -0,0 +1,16 @@
    11.4 +<!-- BEGIN mq.tarball.repush -->
    11.5 +<screen><prompt>$</prompt> <userinput>cd ../netplug</userinput>
    11.6 +<prompt>$</prompt> <userinput>hg pull ../netplug-1.2.8</userinput>
    11.7 +estraggo da ../netplug-1.2.8
    11.8 +cerco i cambiamenti
    11.9 +aggiungo i changeset
   11.10 +aggiungo i manifest
   11.11 +aggiungo i cambiamenti ai file
   11.12 +aggiunti 1 changeset con 12 cambiamenti a 12 file
   11.13 +(eseguite 'hg update' per ottenere una copia di lavoro)
   11.14 +<prompt>$</prompt> <userinput>hg qpush -a</userinput>
   11.15 +(la directory di lavoro non è alla punta)
   11.16 +applico correzione-assemblaggio.patch
   11.17 +ora a: correzione-assemblaggio.patch
   11.18 +</screen>
   11.19 +<!-- END mq.tarball.repush -->
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/it/examples/mq.tools.lsdiff.it	Sat Aug 15 15:15:39 2009 +0200
    12.3 @@ -0,0 +1,24 @@
    12.4 +<!-- BEGIN mq.tools.lsdiff -->
    12.5 +<screen><prompt>$</prompt> <userinput>lsdiff -nvv rimuove-controlli-ridondati-su-null.patch</userinput>
    12.6 +22	File #1  		a/drivers/char/agp/sgi-agp.c
    12.7 +	24	Blocco #1	static int __devinit agp_sgi_init(void)
    12.8 +37	File #2  		a/drivers/char/hvcs.c
    12.9 +	39	Blocco #1	static struct tty_operations hvcs_ops = 
   12.10 +	53	Blocco #2	static int hvcs_alloc_index_list(int n)
   12.11 +69	File #3  		a/drivers/message/fusion/mptfc.c
   12.12 +	71	Blocco #1	mptfc_GetFcDevPage0(MPT_ADAPTER *ioc, in
   12.13 +85	File #4  		a/drivers/message/fusion/mptsas.c
   12.14 +	87	Blocco #1	mptsas_probe_hba_phys(MPT_ADAPTER *ioc)
   12.15 +98	File #5  		a/drivers/net/fs_enet/fs_enet-mii.c
   12.16 +	100	Blocco #1	static struct fs_enet_mii_bus *create_bu
   12.17 +111	File #6  		a/drivers/net/wireless/ipw2200.c
   12.18 +	113	Blocco #1	static struct ipw_fw_error *ipw_alloc_er
   12.19 +	126	Blocco #2	static ssize_t clear_error(struct device
   12.20 +	140	Blocco #3	static void ipw_irq_tasklet(struct ipw_p
   12.21 +	150	Blocco #4	static void ipw_pci_remove(struct pci_de
   12.22 +164	File #7  		a/drivers/scsi/libata-scsi.c
   12.23 +	166	Blocco #1	int ata_cmd_ioctl(struct scsi_device *sc
   12.24 +178	File #8  		a/drivers/video/au1100fb.c
   12.25 +	180	Blocco #1	void __exit au1100fb_cleanup(void)
   12.26 +</screen>
   12.27 +<!-- END mq.tools.lsdiff -->
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/it/examples/mq.tools.tools.it	Sat Aug 15 15:15:39 2009 +0200
    13.3 @@ -0,0 +1,26 @@
    13.4 +<!-- BEGIN mq.tools.tools -->
    13.5 +<screen><prompt>$</prompt> <userinput>diffstat -p1 rimuove-controlli-ridondati-su-null.patch</userinput>
    13.6 + drivers/char/agp/sgi-agp.c        |    5 ++---
    13.7 + drivers/char/hvcs.c               |   11 +++++------
    13.8 + drivers/message/fusion/mptfc.c    |    6 ++----
    13.9 + drivers/message/fusion/mptsas.c   |    3 +--
   13.10 + drivers/net/fs_enet/fs_enet-mii.c |    3 +--
   13.11 + drivers/net/wireless/ipw2200.c    |   22 ++++++----------------
   13.12 + drivers/scsi/libata-scsi.c        |    4 +---
   13.13 + drivers/video/au1100fb.c          |    3 +--
   13.14 + 8 file modificati, 19 inserimenti(+), 38 cancellazioni(-)
   13.15 +<prompt>$</prompt> <userinput>filterdiff -i '*/video/*' rimuove-controlli-ridondati-su-null.patch</userinput>
   13.16 +--- a/drivers/video/au1100fb.c~rimuove-controlli-ridondanti-su-null-prima-di-free-nei-driver
   13.17 ++++ a/drivers/video/au1100fb.c
   13.18 +@@ -743,8 +743,7 @@ void __exit au1100fb_cleanup(void)
   13.19 + {
   13.20 + 	driver_unregister(&amp;au1100fb_driver);
   13.21 + 
   13.22 +-	if (drv_info.opt_mode)
   13.23 +-		kfree(drv_info.opt_mode);
   13.24 ++	kfree(drv_info.opt_mode);
   13.25 + }
   13.26 + 
   13.27 + module_init(au1100fb_init);
   13.28 +</screen>
   13.29 +<!-- END mq.tools.tools -->
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/it/examples/mq.tutorial.add.it	Sat Aug 15 15:15:39 2009 +0200
    14.3 @@ -0,0 +1,7 @@
    14.4 +<!-- BEGIN mq.tutorial.add -->
    14.5 +<screen><prompt>$</prompt> <userinput>echo 'file 3, riga 1' &gt;&gt; file3</userinput>
    14.6 +<prompt>$</prompt> <userinput>hg qnew aggiunta-file3.patch</userinput>
    14.7 +<prompt>$</prompt> <userinput>hg qnew -f aggiunta-file3.patch</userinput>
    14.8 +fallimento: la patch "aggiunta-file3.patch" esiste già
    14.9 +</screen>
   14.10 +<!-- END mq.tutorial.add -->
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/it/examples/mq.tutorial.qinit.it	Sat Aug 15 15:15:39 2009 +0200
    15.3 @@ -0,0 +1,10 @@
    15.4 +<!-- BEGIN mq.tutorial.qinit -->
    15.5 +<screen><prompt>$</prompt> <userinput>hg init mq-prova</userinput>
    15.6 +<prompt>$</prompt> <userinput>cd mq-prova</userinput>
    15.7 +<prompt>$</prompt> <userinput>echo 'riga 1' &gt; file1</userinput>
    15.8 +<prompt>$</prompt> <userinput>echo "un'altra riga 1" &gt; file2</userinput>
    15.9 +<prompt>$</prompt> <userinput>hg add file1 file2</userinput>
   15.10 +<prompt>$</prompt> <userinput>hg commit -m 'Prima modifica.'</userinput>
   15.11 +<prompt>$</prompt> <userinput>hg qinit</userinput>
   15.12 +</screen>
   15.13 +<!-- END mq.tutorial.qinit -->
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/it/examples/mq.tutorial.qnew.it	Sat Aug 15 15:15:39 2009 +0200
    16.3 @@ -0,0 +1,23 @@
    16.4 +<!-- BEGIN mq.tutorial.qnew -->
    16.5 +<screen><prompt>$</prompt> <userinput>hg tip</userinput>
    16.6 +changeset:   0:c6618fa9eed7
    16.7 +tag:         tip
    16.8 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
    16.9 +date:        Fri Jun 05 15:50:56 2009 +0000
   16.10 +summary:     Prima modifica.
   16.11 +
   16.12 +<prompt>$</prompt> <userinput>hg qnew prima.patch</userinput>
   16.13 +<prompt>$</prompt> <userinput>hg tip</userinput>
   16.14 +changeset:   1:f32697f1a94e
   16.15 +tag:         qtip
   16.16 +tag:         prima.patch
   16.17 +tag:         tip
   16.18 +tag:         qbase
   16.19 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
   16.20 +date:        Fri Jun 05 15:50:57 2009 +0000
   16.21 +summary:     [mq]: prima.patch
   16.22 +
   16.23 +<prompt>$</prompt> <userinput>ls .hg/patches</userinput>
   16.24 +prima.patch  series  status
   16.25 +</screen>
   16.26 +<!-- END mq.tutorial.qnew -->
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/it/examples/mq.tutorial.qnew2.it	Sat Aug 15 15:15:39 2009 +0200
    17.3 @@ -0,0 +1,31 @@
    17.4 +<!-- BEGIN mq.tutorial.qnew2 -->
    17.5 +<screen><prompt>$</prompt> <userinput>hg qnew seconda.patch</userinput>
    17.6 +<prompt>$</prompt> <userinput>hg log --style=compact --limit=2</userinput>
    17.7 +2[qtip,seconda.patch,tip]   2d7ecb80769d   2009-06-05 15:51 +0000   bos
    17.8 +  [mq]: seconda.patch
    17.9 +
   17.10 +1[prima.patch,qbase]   8593307a06ec   2009-06-05 15:51 +0000   bos
   17.11 +  [mq]: prima.patch
   17.12 +
   17.13 +<prompt>$</prompt> <userinput>echo 'riga 4' &gt;&gt; file1</userinput>
   17.14 +<prompt>$</prompt> <userinput>hg qrefresh</userinput>
   17.15 +<prompt>$</prompt> <userinput>hg tip --style=compact --patch</userinput>
   17.16 +2[qtip,seconda.patch,tip]   78d47e79ab59   2009-06-05 15:51 +0000   bos
   17.17 +  [mq]: seconda.patch
   17.18 +
   17.19 +diff -r 8593307a06ec -r 78d47e79ab59 file1
   17.20 +--- a/file1	Fri Jun 05 15:51:00 2009 +0000
   17.21 ++++ b/file1	Fri Jun 05 15:51:02 2009 +0000
   17.22 +@@ -1,3 +1,4 @@
   17.23 + riga 1
   17.24 + riga 2
   17.25 + riga 3
   17.26 ++riga 4
   17.27 +
   17.28 +<prompt>$</prompt> <userinput>hg annotate file1</userinput>
   17.29 +0: riga 1
   17.30 +1: riga 2
   17.31 +1: riga 3
   17.32 +2: riga 4
   17.33 +</screen>
   17.34 +<!-- END mq.tutorial.qnew2 -->
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/it/examples/mq.tutorial.qpop.it	Sat Aug 15 15:15:39 2009 +0200
    18.3 @@ -0,0 +1,17 @@
    18.4 +<!-- BEGIN mq.tutorial.qpop -->
    18.5 +<screen><prompt>$</prompt> <userinput>hg qapplied</userinput>
    18.6 +prima.patch
    18.7 +seconda.patch
    18.8 +<prompt>$</prompt> <userinput>hg qpop</userinput>
    18.9 +ora a: prima.patch
   18.10 +<prompt>$</prompt> <userinput>hg qseries</userinput>
   18.11 +prima.patch
   18.12 +seconda.patch
   18.13 +<prompt>$</prompt> <userinput>hg qapplied</userinput>
   18.14 +prima.patch
   18.15 +<prompt>$</prompt> <userinput>cat file1</userinput>
   18.16 +riga 1
   18.17 +riga 2
   18.18 +riga 3
   18.19 +</screen>
   18.20 +<!-- END mq.tutorial.qpop -->
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/it/examples/mq.tutorial.qpush-a.it	Sat Aug 15 15:15:39 2009 +0200
    19.3 @@ -0,0 +1,11 @@
    19.4 +<!-- BEGIN mq.tutorial.qpush-a -->
    19.5 +<screen><prompt>$</prompt> <userinput>hg qpush -a</userinput>
    19.6 +applico seconda.patch
    19.7 +ora a: seconda.patch
    19.8 +<prompt>$</prompt> <userinput>cat file1</userinput>
    19.9 +riga 1
   19.10 +riga 2
   19.11 +riga 3
   19.12 +riga 4
   19.13 +</screen>
   19.14 +<!-- END mq.tutorial.qpush-a -->
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/it/examples/mq.tutorial.qrefresh.it	Sat Aug 15 15:15:39 2009 +0200
    20.3 @@ -0,0 +1,24 @@
    20.4 +<!-- BEGIN mq.tutorial.qrefresh -->
    20.5 +<screen><prompt>$</prompt> <userinput>echo 'riga 2' &gt;&gt; file1</userinput>
    20.6 +<prompt>$</prompt> <userinput>hg diff</userinput>
    20.7 +diff -r f32697f1a94e file1
    20.8 +--- a/file1	Fri Jun 05 15:50:57 2009 +0000
    20.9 ++++ b/file1	Fri Jun 05 15:50:58 2009 +0000
   20.10 +@@ -1,1 +1,2 @@
   20.11 + riga 1
   20.12 ++riga 2
   20.13 +<prompt>$</prompt> <userinput>hg qrefresh</userinput>
   20.14 +<prompt>$</prompt> <userinput>hg diff</userinput>
   20.15 +<prompt>$</prompt> <userinput>hg tip --style=compact --patch</userinput>
   20.16 +1[qtip,prima.patch,tip,qbase]   18f39bf02ad5   2009-06-05 15:50 +0000   bos
   20.17 +  [mq]: prima.patch
   20.18 +
   20.19 +diff -r c6618fa9eed7 -r 18f39bf02ad5 file1
   20.20 +--- a/file1	Fri Jun 05 15:50:56 2009 +0000
   20.21 ++++ b/file1	Fri Jun 05 15:50:59 2009 +0000
   20.22 +@@ -1,1 +1,2 @@
   20.23 + riga 1
   20.24 ++riga 2
   20.25 +
   20.26 +</screen>
   20.27 +<!-- END mq.tutorial.qrefresh -->
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/it/examples/mq.tutorial.qrefresh2.it	Sat Aug 15 15:15:39 2009 +0200
    21.3 @@ -0,0 +1,19 @@
    21.4 +<!-- BEGIN mq.tutorial.qrefresh2 -->
    21.5 +<screen><prompt>$</prompt> <userinput>echo 'riga 3' &gt;&gt; file1</userinput>
    21.6 +<prompt>$</prompt> <userinput>hg status</userinput>
    21.7 +M file1
    21.8 +<prompt>$</prompt> <userinput>hg qrefresh</userinput>
    21.9 +<prompt>$</prompt> <userinput>hg tip --style=compact --patch</userinput>
   21.10 +1[qtip,prima.patch,tip,qbase]   8593307a06ec   2009-06-05 15:51 +0000   bos
   21.11 +  [mq]: prima.patch
   21.12 +
   21.13 +diff -r c6618fa9eed7 -r 8593307a06ec file1
   21.14 +--- a/file1	Fri Jun 05 15:50:56 2009 +0000
   21.15 ++++ b/file1	Fri Jun 05 15:51:00 2009 +0000
   21.16 +@@ -1,1 +1,3 @@
   21.17 + line 1
   21.18 ++riga 2
   21.19 ++riga 3
   21.20 +
   21.21 +</screen>
   21.22 +<!-- END mq.tutorial.qrefresh2 -->
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/it/examples/mq.tutorial.qseries.it	Sat Aug 15 15:15:39 2009 +0200
    22.3 @@ -0,0 +1,9 @@
    22.4 +<!-- BEGIN mq.tutorial.qseries -->
    22.5 +<screen><prompt>$</prompt> <userinput>hg qseries</userinput>
    22.6 +prima.patch
    22.7 +seconda.patch
    22.8 +<prompt>$</prompt> <userinput>hg qapplied</userinput>
    22.9 +prima.patch
   22.10 +seconda.patch
   22.11 +</screen>
   22.12 +<!-- END mq.tutorial.qseries -->