8 Stimmen

Haskell: Testen eines Pakets gegen mehrere Versionen von Base für Hackage

Ich versuche gerade, mein erstes Paket auf Hackage hochzuladen (juhu!), und ich habe diese Fehlermeldung erhalten:

Die Abhängigkeit "build-depends: base" gibt keine Obergrenze für die Versionsnummer an. Jede größere Veröffentlichung des 'base'-Pakets ändert die API auf verschiedene Weise und die meisten Pakete benötigen einige Änderungen, um damit kompilieren zu können. Es wird empfohlen, eine Obergrenze für die Version des 'base'-Pakets anzugeben. Dies stellt sicher, dass Ihr Paket weiterhin gebaut werden kann, wenn eine neue Hauptversion des Basispakets veröffentlicht wird. Wenn Sie nicht sicher sind, welche Obergrenze Sie verwenden sollen, verwenden Sie die nächste Hauptversion. Wenn Sie Ihr Paket zum Beispiel mit der "Basis"-Version 2 und 3 getestet haben, verwenden Sie "build-depends: base >= 2 && < 4".

Das scheint ein durchaus akzeptabler Grund zu sein, mein Paket abzulehnen.

Gibt es ein gutes Werkzeug zum Testen meines Pakets gegen verschiedene Versionen von base damit ich sehen kann, wo die Grenzen liegen (und nicht nur raten muss)? Das Beste, was mir einfällt, ist, ein Shell-Skript zu verwenden, um etwas zu tun wie:

% for v in $BASE_VERSIONS
do
  cabal install base-$v &&\
  cabal configure --enable-tests &&\
  cabal build &&\
  cabal test && echo "$v ok" || echo "$v fail"
done

Aber ich habe das Gefühl, dass es etwas Besseres geben sollte.

9voto

ehird Punkte 40404

Das ist eine sehr schlechte Idee! Sie müssen no Basis aktualisieren oder alle anderen Pakete, die mit GHC geliefert werden (die mit - in der Tag-Spalte), oder alles wird furchtbar kaputt gehen.

Die einzige Möglichkeit, mit einer älteren Version von Base zu testen, besteht darin, einen älteren GHC zu installieren und mit diesem zu testen. Ich würde vorschlagen, es nur mit 7.0.4 und 7.2.2 zu versuchen; die Unterstützung älterer Versionen ist heutzutage wahrscheinlich Zeitverschwendung.

Andernfalls geben Sie einfach an base >= VERSION && < 5 donde VERSION ist die Version, die Ihr GHC hat. Oder base == 4.* und hoffen auf das Beste :)

Ganz im Ernst, die API von Base ändert sich nicht wirklich, so dass Sie wahrscheinlich nicht auf viele Probleme stoßen werden.

Um Ihr Programm mit verschiedenen Versionen von Paketen zu testen, ohne Ihr Hauptprogramm zu stören ~/.cabal Repository, empfehle ich dringend cabal-dev etwas wie

$ cabal-dev install 'pkg==VERSION'
$ cabal-dev install
$ cabal-dev test

sollte es tun.

Übrigens, Sie können Folgendes tun cabal check um vor Problemen wie diesen gewarnt zu werden, bevor Sie Ihr Paket auf Hackage hochladen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X