# HG changeset patch # User Giulio@puck # Date 1250024490 -7200 # Node ID bf84d6b2281c8ce70352a99998c535fb2456c27d # Parent 3d5e63d5d180e86016fc46b4dcec4e8cc0657ad3 Minor changes and translation of code snippets for Ch.7. diff -r 3d5e63d5d180 -r bf84d6b2281c it/ch07-filenames.xml --- a/it/ch07-filenames.xml Tue Aug 11 21:53:03 2009 +0200 +++ b/it/ch07-filenames.xml Tue Aug 11 23:01:30 2009 +0200 @@ -7,7 +7,7 @@ Denominazione semplice dei file - Mercurial usa un unico meccanismo a livello di implementazione per gestire i nomi dei file. Tutti i comandi si comportano in maniera uniforme rispetto ai nomi dei file e lavorano nel modo seguente. + A livello di implementazione, Mercurial usa un unico meccanismo per gestire i nomi dei file. Tutti i comandi si comportano in maniera uniforme rispetto ai nomi dei file e lavorano nel modo seguente. Se indicate esplicitamente nomi di file esistenti sulla riga di comando, Mercurial lavora esattamente con quei file, come vi aspettereste. @@ -21,7 +21,7 @@ Eseguire comandi senza nomi di file - I comandi di Mercurial che lavorano con i nomi di file assumono un utile comportamento predefinito quando li invocate senza passare alcun nome di file o pattern. Il comportamento che dovreste aspettarvi dipende dalla funzionalità del comando. Ecco alcune regole pratiche che potete usare per predirre quello che un comando probabilmente farà se non gli date alcun nome con cui lavorare. + I comandi Mercurial che lavorano con i nomi di file assumono un utile comportamento predefinito quando li invocate senza passare alcun nome di file o pattern. Il comportamento che dovreste aspettarvi dipende dalla funzione del comando. Ecco alcune regole pratiche che potete usare per predire quello che un comando probabilmente farà se non gli date alcun nome con cui lavorare. La maggior parte dei comandi opererà sull'intera directory di lavoro. Per esempio, questo è quello che fa il comando hg add. @@ -32,7 +32,7 @@ &interaction.filenames.wdir-subdir; - Sulla stessa falsariga, alcuni comandi normalmente stampano nomi di file relativi alla radice del repository, anche quando li invocate da una sottodirectory. Questi comandi stamperanno nomi di file relativi alla vostra sottodirectory se gli passate nomi espliciti. Qui di seguito eseguiremo hg status da una sottodirectory e lo faremo agire sull'intera directory di lavoro pur stampando nomi di file relativi alla nostra sottodirectory, passandogli il risultato del comando hg root. + Sulla stessa falsariga, alcuni comandi normalmente stampano nomi di file relativi alla radice del repository anche quando li invocate da una sottodirectory. Questi comandi stamperanno nomi di file relativi alla vostra sottodirectory se passate loro nomi espliciti. Qui di seguito eseguiremo hg status da una sottodirectory e lo faremo agire sull'intera directory di lavoro pur stampando nomi di file relativi alla nostra sottodirectory, passandogli il risultato del comando hg root. &interaction.filenames.wdir-relname; @@ -44,7 +44,7 @@ In questo caso, Mercurial segue il principio della minima sorpresa. Se avete fornito il nome esatto di un file sulla riga di comando, non ha senso ripetervelo. Se Mercurial sta agendo implicitamente su un file, e.g. perché non avete fornito alcun nome, o su una directory, o su un pattern (si veda più avanti), ritiene sia più sicuro farvi sapere su quali file sta lavorando. - Potete ridurre al silenzio i comandi che si comportano in questo modo usando l'opzione . Potete anche dirgli di stampare il nome di tutti i file, anche quelli che avete nominato esplicitamente, usando l'opzione . + Potete ridurre al silenzio i comandi che si comportano in questo modo usando l'opzione . Potete anche dire loro di stampare il nome di tutti i file, anche quelli che avete nominato esplicitamente, usando l'opzione . @@ -52,15 +52,15 @@ Oltre a lavorare con i nomi di file e directory, Mercurial vi consente di usare i pattern per identificare i file. La gestione dei pattern da parte di Mercurial è espressiva. - Su sistemi di tipo Unix (Linux, Mac OS X, etc.), di solito è la shell ad occuparsi di trovare le corrispondenze tra i pattern e i nomi dei file. Su questi sistemi, dovete esplicitamente dire a Mercurial che un nome è un pattern. Sotto Windows, la shell non si occupa di espandere i pattern, quindi Mercurial identificherà automaticamente i nomi che sono pattern e li espanderà per voi. + Su sistemi di tipo Unix (Linux, Mac OS X, etc.), di solito è la shell ad occuparsi di trovare le corrispondenze tra i pattern e i nomi dei file. Su questi sistemi, dovete esplicitamente dire a Mercurial che un nome è un pattern. Su Windows, la shell non si occupa di espandere i pattern, quindi Mercurial identificherà automaticamente i nomi che sono pattern e li espanderà per voi. Per fornire un pattern al posto di un nome ordinario sulla riga di comando, il meccanismo è semplice: - syntax:patternbody + sintassi:corpodelpattern Cioè, un pattern viene identificato da una breve stringa di testo che indica il tipo del pattern, seguita dai due punti, seguiti dall'effettivo pattern. Mercurial supporta due tipi di sintassi per i pattern. Quello usato più spesso è chiamato glob: è lo stesso tipo di pattern usato dalla shell Unix e dovrebbe essere familiare anche agli utenti del prompt dei comandi di Windows. - Quando Mercurial effettua la corrispondenza automatica di un pattern sotto Windows, usa la sintassi glob. Quindi, potete omettere il prefisso glob: sotto Windows, ma se volete potete anche usarlo tranquillamente. + Quando Mercurial effettua la corrispondenza automatica di un pattern su Windows, usa la sintassi glob. Quindi, potete omettere il prefisso glob: su Windows, ma se volete potete anche usarlo tranquillamente. La sintassi re è più potente perché vi permette di specificare i pattern usando le espressioni regolari, indicate a volte con il termine regexp. @@ -75,7 +75,7 @@ &interaction.filenames.glob.star; - Il pattern ** corrisponde a qualsiasi stringa e attraversa i confini delle directory. Non è un simbolo di tipo glob standard sotto Unix, ma viene accettato da diverse shell Unix popolari ed è molto utile. + Il pattern ** corrisponde a qualsiasi stringa e attraversa i confini delle directory. Non è un simbolo di tipo glob standard su Unix, ma viene accettato da diverse shell Unix popolari ed è molto utile. &interaction.filenames.glob.starstar; @@ -85,7 +85,7 @@ Il carattere [ comincia una classe di caratteri. Questo pattern corrisponde a qualsiasi carattere compreso nella classe. La classe viene terminata da un carattere ]. Una classe può contenere molteplici intervalli della forma a-f, che è una abbreviazione per abcdef. - &interaction.filenames.glob.range; + &interaction.filenames.glob.range; Se il primo carattere dopo [ in una classe di caratteri è !, si ottiene l'effetto di negare la classe, facendola corrispondere a qualsiasi carattere non compreso nella classe. @@ -105,13 +105,13 @@ Corrispondenze di espressioni regolari con i pattern <literal>re</literal> - Mercurial accetta la stessa sintassi per le espressioni regolari che viene usata dal linugaggio di programmazione Python (usa internamente il motore di regexp di Python). Questa sintassi è basata su quella del linguaggio Perl, che è il dialetto più popolare in uso (è anche utilizzato in Java, per esempio). - - Non discuterò alcun dettaglio del dialetto di regexp di Mercurial in questo libro, dato che le regexp non vengono usate molto spesso. Le regexp in stile Perl sono comunque già documentate in maniera esauriente su una moltitudine di siti web e in numerosi libri. Invece, qui mi concentrerò su alcune cose che dovreste sapere se vi trovate ad aver bisogno di usare le espressioni regolari con Mercurial. - - Una regexp cerca una corrispondenza con un intero nome di file, relativo alla radice del repository. In altre parole, anche se siete già nella sottodirectory foo, se volete una corrispondenza con i file in questa directory il vostro pattern dovrà cominciare con foo/. - - Una cosa da notare, se avete familiarità con le regexp in stile Perl, è che le espressioni regolari di Mercurial sono vincolate, nel senso che una regexp cerca una corrispondenza partendo sempre dall'inizio di una stringa e non da altre posizioni all'interno della stringa. Per cercare una corrispondenza in qualsiasi punto della stringa il vostro pattern deve cominciare con .*. + Mercurial accetta la stessa sintassi per le espressioni regolari che viene usata dal linugaggio di programmazione Python (usa internamente il motore di regexp di Python). Questa sintassi è basata su quella del linguaggio Perl, che è il dialetto più popolare attualmente in uso (è anche utilizzato in Java, per esempio). + + Non discuterò alcun dettaglio del dialetto di regexp di Mercurial in questo libro, dato che le espressioni regolari non vengono usate molto spesso. Le regexp in stile Perl sono comunque già documentate in maniera esauriente su una moltitudine di siti web e in numerosi libri. Invece, qui mi concentrerò su alcune cose che dovreste sapere se vi trovate ad aver bisogno di usare le espressioni regolari con Mercurial. + + Un'espressione regolare cerca una corrispondenza con un intero nome di file, relativo alla radice del repository. In altre parole, anche se siete già nella sottodirectory foo, se volete una corrispondenza con i file in questa directory il vostro pattern dovrà cominciare con foo/. + + Una cosa da notare, se avete familiarità con le regexp in stile Perl, è che le espressioni regolari di Mercurial sono vincolate, nel senso che un'espressione regolare cerca una corrispondenza partendo sempre dall'inizio di una stringa e non da altre posizioni all'interno della stringa. Per cercare una corrispondenza in qualsiasi punto della stringa, il vostro pattern deve cominciare con .*. @@ -138,7 +138,7 @@ Ignorare permanentemente file e directory indesiderate - Quando create un nuovo repository, è possibile che nel tempo cresca fino a contenere file che non dovrebbero essere gestiti da Mercurial, ma che non vorreste vedere elencati ogni volta che eseguite hg status. Per esempio, i prodotti di assemblaggio sono file che vengono creati come parte dell'assemblaggio di un progetto ma che non dovrebbero essere gestiti da un sistema di controllo di revisione. I prodotti di assemblaggio più comuni sono i file di elaborazione generati da strumenti software come i compilatori. Un altro esempio sono i file di bloccaggio, i file di lavoro temporanei e i file di backup che gli editor di testo disseminano per le directory e che non ha alcun senso gestire. + Quando create un nuovo repository, è possibile che nel tempo cresca fino a contenere file che non dovrebbero essere gestiti da Mercurial, ma che non vorreste vedere elencati ogni volta che invocate hg status. Per esempio, i prodotti di assemblaggio sono file che vengono creati come parte dell'assemblaggio di un progetto ma che non dovrebbero essere gestiti da un sistema di controllo di revisione. I prodotti di assemblaggio più comuni sono i file di elaborazione generati da strumenti software come i compilatori. Un altro esempio sono i file di bloccaggio, i file di lavoro temporanei e i file di backup che gli editor di testo disseminano per le directory e che non ha alcun senso gestire. Per fare in modo che Mercurial ignori permanentemente quei file, create un file chiamato .hgignore alla radice del vostro repository. Dovreste registrare questo file tramite hg add in modo che Mercurial ne tenga traccia insieme al resto dei contenuti del vostro repository, dato che anche i vostri collaboratori potrebbero trovarlo utile. @@ -179,7 +179,7 @@ Completa insensibilità alle maiuscole. Le versioni maiuscole e minuscole di una lettera sono trattate come se fossero identiche, sia quando un file viene creato sia durante i successivi accessi. Questo è il funzionamento comune dei vecchi sistemi basati su DOS. - Conservazione delle maiuscole, ma insensibilità ad esse. Quando un file o una directory vengono creati, le maiuscole nel loro nome vengono memorizzate e possono essere recuperate e visualizzate dal sistema operativo. Quando un file esistente viene cercato, le maiuscole nel suo nome vengono ignorate. Questa è la situazione standard sotto Windows e MacOS. I nomi foo e FoO identificano lo stsso file. Questo trattamento intercambiabile delle lettere maiuscole e minuscole è anche chiamato ripiegamento delle maiuscole. + Conservazione delle maiuscole, ma insensibilità ad esse. Quando un file o una directory vengono creati, le maiuscole nel loro nome vengono memorizzate e possono essere recuperate e visualizzate dal sistema operativo. Quando un file esistente viene cercato, le maiuscole nel suo nome vengono ignorate. Questa è la situazione standard su Windows e MacOS. I nomi foo e FoO identificano lo stesso file. Questo trattamento intercambiabile delle lettere maiuscole e minuscole è anche chiamato ripiegamento delle maiuscole. Sensibilità alle maiuscole. Le lettere maiuscole di un nome sono significative in ogni momento. I nomi foo e FoO identificano due file differenti. Questo è il modo in cui i sistemi Linux e Unix lavorano normalmente. @@ -189,7 +189,7 @@ Memorizzazione del repository sicura e portabile - Il meccanismo di memorizzazione dei repository Mercurial è sicuro per le maiuscole. Traduce i nomi dei file in modo che possano essere memorizzati senza problemi sia su file system sensibili alle maiuscole sia su quelli insensibili alle maiuscole. Questo significa che potete usare i normali strumenti per la copia di file per trasferire un repository Mercurial su, per esempio, una chiavetta USB, e spostare la chiavetta e il repository avanti e indietro tra un Mac, un PC con Windows e una macchina Linux senza problemi. + Il meccanismo di memorizzazione dei repository Mercurial è sicuro per le maiuscole. Traduce i nomi dei file in modo che possano essere memorizzati senza problemi sia su file system sensibili alle maiuscole sia su quelli insensibili alle maiuscole. Questo significa che, per esempio, potete usare i normali strumenti per la copia di file per trasferire un repository Mercurial su una chiavetta USB, e spostare la chiavetta e il repository avanti e indietro tra un Mac, un PC con Windows e una macchina Linux senza problemi. @@ -197,7 +197,7 @@ Quando opera sulla directory di lavoro, Mercurial segue la politica di denominazione del file system su cui la directory di lavoro si trova. Se il file system conserva le maiuscole ma è insensibile ad esse, Mercurial tratterà i nomi che differiscono solo per le maiuscole come se fossero uguali. - È importante ricordare che questo approccio permette di eseguire su un file system sensibile alle maiuscole (tipicamente Linux o Unix) il commit di un changeset che creerà problemi per gli utenti di file system insensibili alle maiuscole (di solito Windows e MacOS). Se un utente Linux inserisce nel repository le modifiche a due file, uno chiamato myfile.c e l'altro chiamato MyFile.c, questi verranno memorizzati correttamente. E quei file verranno correttamente rappresentati come due file separati nella directory di lavoro di altri utenti Linux. + È importante ricordare che questo approccio permette di eseguire su un file system sensibile alle maiuscole (tipicamente Linux o Unix) il commit di un changeset che creerà problemi per gli utenti di file system insensibili alle maiuscole (di solito Windows e MacOS). Se un utente Linux inserisce nel repository le modifiche a due file, uno chiamato miofile.c e l'altro chiamato MioFile.c, questi file verranno memorizzati correttamente. E gli stessi file verranno correttamente rappresentati come due file separati nella directory di lavoro di altri utenti Linux. Se un utente Windows o Mac estrae questo changeset, inizialmente non avrà alcun problema, perché il meccanismo di memorizzazione di un repository Mercurial è sicuro per le maiuscole. Tuttavia, appena tenta di aggiornare la directory di lavoro a quel changeset tramite hg update, o a unire il proprio lavoro con quel changeset tramite hg merge, Mercurial individuerà il conflitto tra i due nomi di file che il file system tratterebbe come lo stesso nome e impedirà all'aggiornamento o all'unione di avvenire. diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/auto-snippets.xml --- a/it/examples/auto-snippets.xml Tue Aug 11 21:53:03 2009 +0200 +++ b/it/examples/auto-snippets.xml Tue Aug 11 23:01:30 2009 +0200 @@ -138,18 +138,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.dirs.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.dirs.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,8 @@ + +$ hg status sorgenti +? sorgenti/principale.py +? sorgenti/controllore/_controllore.c +? sorgenti/controllore/controllore.py +? sorgenti/xyzzy.txt + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.files.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.files.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,4 @@ + +$ hg add COPIARE LEGGIMI esempi/semplice.py + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.filter.exclude.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.filter.exclude.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,6 @@ + +$ hg status -X '**.py' sorgenti +? sorgenti/controllore/_controllore.c +? sorgenti/xyzzy.txt + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.filter.include.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.filter.include.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,5 @@ + +$ hg status -I '*.in' +? MANIFEST.in + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.group.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.group.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,6 @@ + +$ hg status 'glob:*.{in,py}' +? MANIFEST.in +? setup.py + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.question.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.question.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,5 @@ + +$ hg status 'glob:**.?' +? sorgenti/controllore/_controllore.c + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.range.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.range.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,6 @@ + +$ hg status 'glob:**[nr-t]' +? MANIFEST.in +? sorgenti/xyzzy.txt + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.star-starstar.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.star-starstar.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,11 @@ + +$ hg status 'glob:*.py' +? setup.py +$ hg status 'glob:**.py' +A esempi/semplice.py +A sorgenti/principale.py +? esempi/efficiente.py +? setup.py +? sorgenti/controllore/controllore.py + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.star.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.star.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,5 @@ + +$ hg add 'glob:*.py' +aggiungo principale.py + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.glob.starstar.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.glob.starstar.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,10 @@ + +$ cd .. +$ hg status 'glob:**.py' +A esempi/semplice.py +A sorgenti/principale.py +? esempi/efficiente.py +? setup.py +? sorgenti/controllore/controllore.py + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.wdir-relname.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.wdir-relname.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,25 @@ + +$ hg status +A COPIARE +A LEGGIMI +A esempi/semplice.py +? MANIFEST.in +? esempi/efficiente.py +? setup.py +? sorgenti/principale.py +? sorgenti/controllore/_controllore.c +? sorgenti/controllore/controllore.py +? sorgenti/xyzzy.txt +$ hg status `hg root` +A ../COPIARE +A ../LEGGIMI +A ../esempi/semplice.py +? ../MANIFEST.in +? ../esempi/performante.py +? ../setup.py +? principale.py +? controllore/_controllore.c +? controllore/controllore.py +? xyzzy.txt + + diff -r 3d5e63d5d180 -r bf84d6b2281c it/examples/filenames.wdir-subdir.it --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/it/examples/filenames.wdir-subdir.it Tue Aug 11 23:01:30 2009 +0200 @@ -0,0 +1,17 @@ + +$ cd sorgenti +$ hg add -n +aggiungo ../MANIFEST.in +aggiungo ../esempi/efficiente.py +aggiungo ../setup.py +aggiungo principale.py +aggiungo controllore/_controllore.c +aggiungo controllore/controllore.py +aggiungo xyzzy.txt +$ hg add -n . +aggiungo principale.py +aggiungo controllore/_controllore.c +aggiungo controllore/controllore.py +aggiungo xyzzy.txt + +