2012-03-25 8 views
17

Was ist die beste/korrekte Vorgehensweise, um die Version in Ihrem Quelltextbaum anzugeben? Was ich will, ist zum Beispiel, VERSION-Datei in der obersten Ebene des Quellbaums und erhalten Sie die "Version" -Funktion, um es zu lesen.Haskell: Korrekte Vorgehensweise, um die Version in der Quelle anzugeben?

Es gibt einen Versionsabschnitt in der Cabal-Datei. Ist es möglich, es von meiner Quelle durch "Hilfe" oder "Version" -Funktionen zu lesen? Was ist die korrekte Praxis, die Version an einem Ort anzugeben und global verfügbar zu machen?

P.S. Gibt es Funktionen in der Cabal-Bibliothek, die es erlauben, einen beliebigen Abschnitt aus der Cabal-Datei zu ziehen und ihn in Ihrer Quelle zu präsentieren? Dann könnte ich einfach den Versionsabschnitt aus der Cabal-Datei ziehen.

- UPDATE -

Danke Thomas für ein schönes Stück des Wissens über die Pathes_x Modul. Ich wollte nur hinzufügen, dass ich anscheinend nichts in meine Cabal-Datei einfügen muss. Alles funktioniert einfach ohne es. Alles, was ich brauchte, war das Pathes_X zu importieren, wie du es getan hast. Außerdem musste ich Data.Version importieren, um die showVersion-Funktion zum korrekten Formatieren/Drucken des Version-Datentyps zu erhalten. So am Ende ich so etwas wie diese:

import Paths_kvman 
import Data.Version 

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

Nun, alles was ich brauche ist die Versionsnummer in der Clique Datei ändern alles über meine Quelle propagade. Genau das, was ich brauchte. Vielen Dank.

Antwort

22

Cabal generiert automatisch ein Modul für jedes Paket mit dem Namen Paths_packagename. Importieren Sie einfach dieses Paket und schauen Sie sich den version Wert an, den es exportiert.

Edit: Zum Beispiel:

module Data.Blah where 

import Paths_t 

func :: IO() 
func = print version 

Und ein Beispiel laufen:

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

Seien Sie sicher, Paths_packagename in Ihrem Other-Modules Abschnitt der Kabale Datei zu setzen.

+0

Das sollte es tun :) –

+0

Wow. Ich hatte keine Ahnung. –

+1

netter Tipp! Wie wäre es mit einem Blog mit "dem Kabalen-Tipp der Woche"? Ich würde sicher abonnieren. –

1

Best Practice ist, die Versionsnummer in Ihre Cabal-Datei zu legen, wie Sie bereits bemerkt haben.

Ich kenne keine guten Praktiken, mit denen Sie einen einzigen Punkt der Wahrheit über die Version aufrechterhalten können, aber die Nummer sowohl Cabal und Ihrer Anwendung zur Verfügung stellen.

würde ich eine einzelne Datei Version.hs in den Quellen mit diesen Inhalten empfehlen:

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

Sie könnten dann, wenn man will, eine Art von Skript verwenden, um die Kabalen-Datei mit dieser Nummer zu aktualisieren, aber ich don Ich weiß nicht, wie ich das aus der Kabalen selbst heraus tun soll.

Diese Strategie funktioniert nur für Anwendungspakete; Wenn Sie eine Bibliothek erstellen, müssen Sie sich Gedanken darüber machen, wo im Namespace der hierarchischen Module Ihre Version.hs wird.

Insgesamt vermute ich, dass das Spiel die Kerze nicht wert ist.


P.S. Die Versionsnummer sollte unveränderlich sein, also möchten Sie einen Wert, keine Funktion.

+0

Vielen Dank Norman, nach Funktion Ich meinte, was ich anrufe, wenn -h oder -v Schalter angegeben ist. Es ist zunächst ein Wert. Aber dieser Wert wird schließlich von einer Funktion aufgerufen, die die Parameter -v oder -h steuert. Recht? –

+1

@ r.sendecky, wenn Sie einen Befehlszeilenschalter haben, werden Sie eine Art monadische Aktion wie 'putStrLn $" Version: "++ Version.version' –

Verwandte Themen