Существует ли инструмент для обновления верхних границ зависимостей до последних версий каждой зависимости?
Я пытаюсь обновить зависимости pipes-files
пакет, так что он может быть включен в последнюю stack
LTS. pipes-files
пакет не содержит stack.yaml
файл, а pipes-files.cabal
Файл содержит довольно много верхних и нижних границ его зависимостей, например:
base >=4.7 && <4.10
, transformers >=0.3 && <0.6
, transformers-base >=0.3 && <0.6
-- and quite some more ...
Есть ли инструмент, который я могу запустить, чтобы получить последние версии каждой из этих зависимостей? Самая близкая вещь, которую я мог найти, была packdeps
но это потребует от меня поиска зависимостей по очереди.
1 ответ
Предварительные замечания:
- Иерархия, зависимость от pipe-файлов, имеет ту же проблему, которую вы пытаетесь обойти - она не в Stackage и имеет ограничения версий по сравнению с последней LTS. Это означает, что сначала вам нужно будет заставить его успешно строить, а затем добавить свою измененную версию в дополнительные разделы
stack.yaml
трубы-файлы. cabal gen-bounds
, который "предлагает [s] границы версий зависимостей, которые соответствуют политике управления версиями пакетов", в принципе, является правильным инструментом для работы. Однако заставить поведение cabal-установки вести себя в соответствии с ограничениями стековой среды не всегда просто. Пока этого кажется достаточно для запускаcabal gen-bounds
из оболочки bash при отсутствии независимой от стека установки GHC...PATH=$PATH:$(stack path --compiler-bin) cabal gen-bounds
... Я не мог понять, как заставить его следовать ограничениям версии снимка стека (возраста) - в частности,
--package-db
опция, которая может быть полезна с такими командами, какcabal configure
, кажется, не принимаетсяgen-bounds
,
Как я не знаю, как сделать cabal gen-bounds
Сотрудничество со стеком, я предложу несколько более сложный метод, но не требующий непосредственного использования cabal-install. Он использует Jenga, инструмент, который может извлекать информацию о версии, оставленную неявной при выборе снимка стека. Дженга не в стеке; чтобы установить его с помощью стека, скачайте исходники из GitHub (или с помощью stack unpack jenga
), а затем запустить stack init --solver
с последующим stack install
,
Удалить все границы версий из
hierarchy.cabal
файл (или любой другой соответствующий файл.cabal).stack init --solver
, чтобы создатьstack.yaml
файл с любыми дополнительными дополнениями, которые могут быть необходимы. (Ты можешь использовать--resolver
явно выбрать снимок, который будет использоваться.)stack build
в качестве здравомыслия проверьте, что пакет является сборочным.В сгенерированном
stack.yaml
проверьте, есть лиextra-deps
поле закомментировано; если так, раскомментируйте это. Это необходимо для работы шага № 6.jenga -i hierarchy.cabal
, которая будет печатать точные версии зависимостей, которые Stack будет использовать для сборки пакета.Вставьте версии, которые Дженга дала вам в
build-depends
файла.cabal, затем настройте его при необходимости (как минимум, вы, вероятно, захотите уменьшить второстепенные границы версии для соответствия PVP - например, изменениеbase == 4.9.1.0
вbase == 4.9.*
).