Haskell: тестирование пакета на нескольких версиях базы для Hackage - PullRequest
8 голосов
/ 27 декабря 2011

Я пытаюсь загрузить свой первый пакет в Hackage (ууу!), И я получил эту ошибку:

Зависимость 'build-зависящий: база' не определяет верхнюю границу дляномер версии.Каждый основной выпуск базового пакета изменяет API различными способами, и большинству пакетов потребуются некоторые изменения для его компиляции.Рекомендуемая практика - указывать верхнюю границу версии базового пакета.Это гарантирует, что ваш пакет будет продолжать собираться после выпуска новой основной версии базового пакета.Если вы не уверены, какую верхнюю границу использовать, используйте следующую основную версию.Например, если вы проверили свой пакет с «базовой» версией 2 и 3, используйте «build-зависящий: базовый> = 2 && <4». </p>

, что кажется вполне приемлемой причиной отклонениямой пакет.

Есть ли хороший инструмент для проверки моего пакета на различные версии base, чтобы я мог видеть границы (а не просто догадываться)?Лучшее, что я могу придумать, - это использовать некоторые сценарии оболочки, чтобы сделать что-то вроде:

% 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

Но я чувствую, что должно быть что-то лучшее.

1 Ответ

9 голосов
/ 27 декабря 2011

Это очень плохая идея! Вы должны не обновить базу или любые другие пакеты, которые поставляются с GHC (те, которые имеют - в столбце тега), иначе все будет ужасно сломано.

Единственный способ проверить более старую версию базы - это установить более старую версию GHC и протестировать ее. Я бы предложил просто попробовать это на 7.0.4 и 7.2.2; поддержка старых версий в наши дни, вероятно, пустая трата времени.

В противном случае просто укажите base >= VERSION && < 5, где VERSION - версия вашего GHC. Или base == 4.* и надежда на лучшее :)

На полном серьезе, API базы на самом деле не так уж сильно меняет, так что вы вряд ли столкнетесь со многими проблемами с этим.

Для тестирования вашей программы с различными версиями пакетов в целом, не нарушая ваш основной ~/.cabal репозиторий, я настоятельно рекомендую cabal-dev ; что-то вроде

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

должен это сделать.

Кстати, вы можете сделать cabal check, чтобы получить предупреждение о подобных проблемах перед загрузкой вашего пакета в Hackage.

...