2012-03-25 5 views
17

ソースコードツリー内でバージョンを指定するためのベストプラクティスとは何ですか? 私が望むのは、たとえば、VERSIONファイルをソースツリーの最上位に置き、それを読むための "version"関数を得ることです。Haskell:バージョンをソースに指定するのは正しいですか?

カバールファイルにバージョンセクションがあります。それは "ヘルプ"または "バージョン"機能によって私のソースから読むことが可能ですか? バージョンを1か所で指定し、それをグローバルに使用できるようにする正しい方法は何ですか?

P.S. Cabalライブラリに、カバールファイルから任意のセクションを取得してソースに表示する機能がありますか?それでは、私はカバールファイルからバージョンセクションを引き出すことができました。

- UPDATE -

はPathes_xモジュールに関する知識の素敵な作品のためにあなたにトーマスをありがとうございます。 ちょうどそれを追加したいと思う、明らかに、私は私のカブファイルに何かを置く必要はありません。すべては、それなしで動作します。私が必要としたのは、あなたが納得したようにPathes_Xをインポートすることでした。 また、DataVersionをインポートして、バージョンのデータ型を適切に書式設定/印刷するためにshowVersion関数を取得する必要がありました。だから、最後に、私はこのような何かを得る:今

import Paths_kvman 
import Data.Version 

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

を、私が必要とするすべては私のソースの上にそれをすべてpropagadeする徒党ファイルにバージョン番号を変更することです。正確に私が必要としたもの。ありがとう。

答えて

22

Cabalは、Paths_packagenameという名前のパッケージごとにモジュールを自動的に生成します。このパッケージをインポートし、エクスポートするversionの値を見てください。

編集:例えば:

module Data.Blah where 

import Paths_t 

func :: IO() 
func = print version 

そして例を実行します。

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

が徒党ファイルのあなたのOther-ModulesセクションにPaths_packagenameを置くようにしてください。

+0

これはすべきです:) –

+0

Wow。私は今まで知らなかった。 –

+1

すてきなヒント!どうやってブログを「今週のカブールチップ」にするの?私は確かに購読するだろう。 –

1

よく知られているように、カバールファイルにバージョン番号を入れることをお勧めします。

私はバージョンに関する真実の一点を維持することができますが、カバールとアプリケーションの両方に番号を使用できるようにするための良いプラクティスは認識していません。

私はこれらの内容を元に、単一のファイルVersion.hsをお勧めします:あなたは、その後、あなたが望んだ場合には、この番号で徒党ファイルを更新するためのスクリプトのいくつかの種類を使用することができ

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

が、私ドンキャブ自体の中からこれをどうやって行うのか分かりません。

この戦略はアプリケーションパッケージに対してのみ有効です。ライブラリを構築する場合は、階層モジュールの名前空間のどこにあなたのVersion.hsがあるのか​​を考えなければなりません。

全体として、私はこの試合はろうそくの価値がないと考えています。


P.S.バージョン番号は不変でなければならないので、関数ではなく値が必要です。

+0

ありがとうノルマン、機能によって私は-hまたは-vスイッチが指定されたときに何を呼び出すのかを意味しました。これは初期値です。しかし、この値は最終的に-vまたは-hスイッチを制御する関数によって呼び出されます。右? –

+1

@ r.sendecky、コマンドラインスイッチを使用すると、 'putStrLn $"のようなモナドアクションを実行します。Version: "++ Version.version' –

関連する問題