Существует ли инструмент для обновления верхних границ зависимостей до последних версий каждой зависимости?

Я пытаюсь обновить зависимости 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,

  1. Удалить все границы версий из hierarchy.cabal файл (или любой другой соответствующий файл.cabal).

  2. stack init --solver, чтобы создать stack.yaml файл с любыми дополнительными дополнениями, которые могут быть необходимы. (Ты можешь использовать --resolver явно выбрать снимок, который будет использоваться.)

  3. stack buildв качестве здравомыслия проверьте, что пакет является сборочным.

  4. В сгенерированном stack.yamlпроверьте, есть ли extra-deps поле закомментировано; если так, раскомментируйте это. Это необходимо для работы шага № 6.

  5. jenga -i hierarchy.cabal, которая будет печатать точные версии зависимостей, которые Stack будет использовать для сборки пакета.

  6. Вставьте версии, которые Дженга дала вам в build-depends файла.cabal, затем настройте его при необходимости (как минимум, вы, вероятно, захотите уменьшить второстепенные границы версии для соответствия PVP - например, изменение base == 4.9.1.0 в base == 4.9.*).

Другие вопросы по тегам