Исключен ли пакет из Stackage LTS из-за пропущенной зависимости?
Я немного озадачен тем, как влияет зависимость от пакета, включая его в Stackage LTS; в частности, если
- пакет A требует пакет B, и
- пакет A работает, когда пакет B установлен как extra-dep поверх LTS-XY, но
- сам пакет B не находится в LTS-XY,
должен ли пакет А быть исключен из LTS-XY, особенно если
- единственная причина, по которой B исключается, заключается в зависимости набора тестов, а не в самой библиотеке?
2 ответа
Я скопирую / вставлю свой ответ на github
пакет А должен быть исключен?
Нет, это не должно быть исключено. Вот почему:
даже если исключена только одна причина B, это зависимость от набора тестов
В этом случае мы можем добавить B к плану сборки и отметить его под skipped-tests
раздел, чтобы избежать вытягивания в его зависимости набора тестов. Это верно как для LTS, так и для ночных снимков.
(Тем не менее, предпочтительным вариантом действий будет устранение проблемы зависимости B, чтобы можно было запустить набор тестов.)
Чтобы уточнить, в ответ на ответ @bergey:
пакеты включаются только в том случае, если сопровождающий пакета согласен обновлять его в зависимости от его зависимостей
Это верно только для пакетов, включенных явно. Некоторые пакеты являются транзитивными зависимостями, которые включены неявно и не обязательно соответствуют таким строгим стандартам. (Однако в будущем мы можем исключить концепцию неявного включения и вместо этого включать все пакеты явно.)
Исключения также могут быть сделаны для включения пакета, даже если его набор тестов или его тесты имеют несовместимые ограничения зависимостей с snapsnot.
Конечно, предпочтительный способ - не делать таких исключений, и мы призываем всех сопровождающих поддерживать все свои цели сборки в актуальном состоянии.
Наконец, позвольте мне отметить, что этот вопрос, вероятно, был бы более подходящим для списка рассылки стека, который, по общему признанию, недостаточно хорошо опубликован или использован.
Да, для каждого пакета в данном снимке стека все его переходные зависимости также находятся в снимке. Кроме того, пакеты включаются только в том случае, если сопровождающий пакета согласен обновлять его в зависимости от его зависимостей. Подробнее об этом читайте в README на github. Выдержка:
- Все пакеты являются сборочными и тестируемыми из Hackage. Мы рекомендуем скрипт Stack Travis, который гарантирует, что пакет не будет случайно неполным.
- Все пакеты совместимы с новейшими версиями всех зависимостей (Вы можете найти ограничительные верхние границы, посетив http://packdeps.haskellers.com/feed?needle=PACKAGENAME).
- Все пакеты в снимке совместимы с версиями библиотек, которые поставляются с GHC, используемым в снимке (дополнительная информация о мягких нижних границах).