Precedente: , Su: Aggiunte   [Contenuti][Indice]


C.2.4 Perché i file generati sono tenuti in Git

Se si esaminano i sorgenti di gawk nel deposito Git si noterà che sono inclusi file generati automaticamente dagli strumenti dell’infrastruttura GNU, come Makefile.in generato da Automake e anche configure proveniente da Autoconf.

Questo comportamento è differente da quello di molti progetti di Libero Software che non memorizzano i file derivati, per mantenere più sgombro il deposito Git, rendendo così più facile comprendere quali sono le modifiche sostanziali confrontando differenti versioni, nel tentativo di capire cosa è cambiato tra una modifica e la precedente.

Tuttavia, ci sono parecchie ragioni per le quali il manutentore di gawk preferisce mantenere ogni cosa nel deposito Git.

Innanzitutto, perché in questo modo è facile generare completamente ogni data versione, senza doversi preoccupare di avere a disposizione altri strumenti (più vecchi, probabilmente obsoleti, e in qualche caso perfino impossibili da trovare).

Come esempio estremo, se solo si pensa di tentare di compilare, diciamo, la versione Unix V7 di awk, ci si accorge che non solo è necessario scaricare e ricompilare la versione V7 del comando yacc per farlo, ma anche che serve la versione V7 del comando lex. E quest’ultima è praticamente impossibile farla funzionare in un sistema GNU/Linux dei giorni nostri.122

(Oppure, diciamo che la versione 1.2 di gawk richiede il comando bison come funzionava nel 1989, e non è presente il file awkgram.c [generato tramite bison] nel deposito Git. Che cosa ci garantisce di riuscire a trovare quella versione di bison? O che quella riesca a generarlo?)

Se il deposito Git comprende tutti i file derivati, è facile, dopo averli scaricati, ricostruire il programma. (Oppure è più facile, a seconda di quanto si vuole risalire indietro nel tempo).

E qui arriviamo alla seconda (e più valida) ragione per cui tutti i file devono essere proprio nel deposito Git. Domandiamoci a chi ci si rivolge: agli sviluppatori di gawk, oppure a un utilizzatore che intende solo scaricare una data versione e provarla?

Il manutentore di gawk desidera che per tutti gli utenti awk interessati sia possibile limitarsi a clonare il deposito sul proprio computer, selezionare la variante che lo interessa e costruirla. Senza doversi preoccupare di avere a disposizione le versioni corrette degli Autotool GNU.123. A questo serve il file bootstrap.sh. Va a "toccare" [tramite il comando touch] vari altri file nell’ordine richiesto in modo che

# La formula canonica per compilare il software GNU:
./bootstrap.sh && ./configure && make

tutto funzioni senza problemi.

Questo è estremamente importante per i rami master e gawk-X.Y-stable.

Inoltre, il manutentore di gawk potrebbe sostenere che ciò è importante anche per gli sviluppatori di gawk. Tentando di scaricare il ramo xgawk124 per compilarlo, non ci riuscì. (Mancava il file ltmain.sh, ed egli non aveva idea di come crearlo, e c’erano anche ulteriori problemi.)

La cosa lo lasciò in uno stato di frustrazione estrema. Riguardo a quel ramo, il manutentore è in una posizione non differente da quella di un utente generico che voglia tentare di compilare gawk-4.1-stable o master dal deposito Git.

Quindi, il manutentore ritiene che sia non solo importante, ma cruciale, che per ogni dato ramo la formula canonica evocata prima funzioni senza problemi.

Una terza ragione per avere tutti i file è che senza di essi, usare ‘git bisect’ per tentare di trovare quale modifica ha introdotto un errore diventa estremamente difficile. Il manutentore ha tentato di farlo su un altro progetto che richiede di eseguire script di inizializzazione allo scopo di creare lo script configure e così via; è stata un’esperienza veramente dolorosa. Se invece il deposito Git contiene tutto il necessario, usare git bisect al suo interno è molto facile.

Quali sono, quindi, alcune delle conseguenze e/o delle cose da fare?

  1. Non importa se ci sono file differenti nei diversi rami prodotti da versioni differenti degli Autotool.
    1. Spetta al manutentore integrarli tra loro, e se ne occuperà lui.
    2. È facile per lui eseguire ‘git diff x y > /tmp/diff1 ; gvim /tmp/diff1’ per rimuovere le differenze che non sono rilevanti ai fini della revisione del codice sorgente.
  2. Sarebbe sicuramente d’aiuto se tutti usassero le stesse versioni degli Autotool GNU che lui usa, che in generale sono le ultime versioni rilasciate di Automake, Autoconf, bison, GNU gettext e Libtool.

    Installare a partire dal sorgente è abbastanza facile. È il modo con cui il manutentore ha lavorato per anni (e ancora lavora). Egli aveva /usr/local/bin all’inizio del suo PATH e dava i seguenti comandi:

    wget https://ftp.gnu.org/gnu/package/package-x.y.z.tar.gz
    tar -xpzvf package-x.y.z.tar.gz
    cd package-x.y.z
    ./configure && make && make check
    make install    # come utente root
    

    NOTA: A causa degli URL di tipo ‘https://’, può essere necessario specificare l’opzione --no-check-certificate a wget per poter scaricare il file.

La maggior parte del testo precedente fa parte di messaggi scritti originalmente dal manutentore agli altri sviluppatori gawk. Da uno degli sviluppatori è stata avanzata l’obiezione “… che chi scarica il sorgente da Git non è un utente finale”.

Tuttavia, questo non è esatto. Ci sono “utenti avanzati di awk” che possono installare gawk (usando la formula canonica vista sopra) ma che non conoscono il linguaggio C. Quindi, i rami più rilevanti dovrebbero essere sempre compilabili.

È stato proposto poi di lanciare ogni notte uno script tramite il programma di utilità cron per creare archivi in formato tar contenenti tutto “il codice sorgente.” Il problema in questo caso è che ci sono differenti alberi di sorgenti, che corrispondono ai vari rami! Quindi gli archivi notturni in questione non sono una risposta valida, anche per il fatto che il deposito Git può rimanere senza alcuna modifica significativa per settimane intere.

Fortunatamente, il server Git può rispondere a questa esigenza. Per ogni dato ramo chiamato nome-ramo, basta usare:

wget https://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-nome-ramo.tar.gz

per ottenere una copia utilizzabile del ramo in questione.


Note a piè di pagina

(122)

Ci abbiamo provato. È stata un’esperienza dolorosa.

(123)

Ecco un programma GNU che (secondo noi) è estremamente difficile da estrarre dal deposito Git e compilare. Per esempio, in un vecchio (ma ancora funzionante) PowerPC Macintosh, con il sistema operativo Mac Os X 10.5, è stato necessario scaricare e compilare una tonnellata di software, incominciando dallo stesso programma Git, per riuscire a lavorare con l’ultima versione del codice. Non è un’esperienza piacevole e, specie sui vecchi sistemi, è una notevole perdita di tempo.

Neppure partire dall’ultimo archivio tar compresso è stata una passeggiata: i manutentori avevano eliminato i file compressi in formato .gz e .bz2 sostituendoli con file di tipo .tar.xz. Bisognava quindi per prima cosa scaricare e compilare xz

(124)

Un ramo (non più presente) creato da uno degli altri sviluppatori, e che non includeva i file generati.


Precedente: , Su: Aggiunte   [Contenuti][Indice]