2012-03-25 13 views
17

Qual è la prassi migliore/corretta per specificare la versione all'interno dell'albero del codice sorgente? Quello che voglio è, per esempio, mettere il file VERSION nel livello più alto dell'albero dei sorgenti e ottenere la funzione "versione" per leggerlo.Haskell: pratica corretta per specificare la versione nell'origine?

C'è una sezione di versione nel file cabal. È possibile leggerlo dalla mia fonte con le funzioni "aiuto" o "versione"? Qual è la pratica corretta di specificare la versione in un unico posto e renderla disponibile globaly?

P.S. Ci sono delle funzioni nella libreria Cabal che ti permettono di estrarre qualsiasi sezione dal file cabal e presentarla nella tua fonte? Quindi potrei semplicemente estrarre la sezione della versione dal file cabal.

- AGGIORNAMENTO -

Grazie Thomas per un bel pezzo di conoscenza del modulo Pathes_x. Volevo solo aggiungere che, a quanto pare, non ho bisogno di mettere nulla nel mio file cabal. Tutto funziona senza di esso. Tutto ciò di cui avevo bisogno era di importare Pathes_X come hai suggerito. Inoltre, avevo bisogno di importare Data.Version per ottenere la funzione showVersion per formattare/stampare correttamente il tipo di dati della versione. Così alla fine ho qualcosa di simile:

import Paths_kvman 
import Data.Version 

runVersion _ = putStrLn ("Version: " ++ (showVersion version)) 

Ora, ho solo bisogno di cambiare il numero di versione nel file cabala per propagade tutto da mia fonte. Esattamente quello di cui avevo bisogno. Grazie.

risposta

22

La cabina genera automaticamente un modulo per ogni pacchetto denominato Paths_packagename. Importa questo pacchetto e osserva il valore version che esporta.

Edit: Per esempio:

module Data.Blah where 

import Paths_t 

func :: IO() 
func = print version 

E un esempio gestita:

> func 
Version {versionBranch = [0,1], versionTags = []} 

essere sicuri di mettere nel vostro Paths_packagenameOther-Modules sezione del file cabala.

+0

Che dovrebbe farlo :) –

+0

Wow. Non ne avevo idea. –

+1

bel consiglio! Che ne dici di avere un blog con "il consiglio di cabala della settimana"? Mi iscriverei di sicuro. –

1

Si consiglia di inserire il numero di versione nel file cabal, come già notato.

Non sono a conoscenza di alcuna buona pratica in base alla quale è possibile mantenere un singolo punto di verità sulla versione, ma rendere il numero disponibile sia per la cabal sia per la propria applicazione.

mi sento di raccomandare un singolo file Version.hs nelle fonti con questi contenuti:

module Version 
where 
version :: String 
version = "3.14159" 

Si potrebbe quindi, se si voleva, utilizzare un qualche tipo di script per aggiornare il file cabala con questo numero, ma io don Sappiamo come farlo all'interno della stessa cabala.

Questa strategia funzionerà solo per i pacchetti di applicazioni; se stai costruendo una libreria, dovrai riflettere su dove si trova lo spazio dei nomi dei moduli gerarchici il tuo Version.hs.

Nel complesso, sospetto che il gioco non valga la candela.


P.S. Il numero di versione dovrebbe essere immutabile, quindi si desidera un valore, non una funzione.

+0

Grazie Norman, per funzione intendevo quello che chiamo quando è specificato l'opzione -h o -v. È un valore inizialmente. Ma questo valore viene alla fine chiamato da una funzione che governa le opzioni -v o -h. Destra? –

+1

@ r.sendecky, quando si ha un commando da riga di comando si eseguirà una sorta di azione monadica come 'putStrLn $" Versione: "++ Version.version' –

Problemi correlati