是否有将依赖项的上限升级到每个依赖项的最新版本的工具?

Is there a tool for upgrading the dependecies' upper bounds to the latest versions of each dependency?

我正在尝试升级 pipes-files package, so that it can be 的依赖项。 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 但它需要我一个一个地搜索依赖项。

初步说明:

  • hierarchypipes-files 的依赖项,与您尝试解决的问题相同——它是不在 Stackage 中,并且版本界限相对于最新的 LTS 已经过时。这意味着您首先必须成功构建它,然后 add your tweaked version of it to the extra-deps in the stack.yaml of pipes-files.
  • cabal gen-bounds,"suggest[s] dependency version bounds that conform to Package Versioning Policy",原则上是适合这项工作的工具。然而,让 cabal-install 根据 Stack-centric 环境的限制进行操作并不总是那么简单。虽然在没有 Stack-independent GHC 安装的情况下,这似乎足以从 bash shell 运行 cabal gen-bounds...

    PATH=$PATH:$(stack path --compiler-bin) cabal gen-bounds
    

    ...我不知道如何让它遵循 Stack(age) 快照的版本限制——特别是 --package-db 选项 which can be helpful with commands such as cabal configure,不' 似乎被 gen-bounds 接受了。

因为我不知道如何让cabal gen-bounds和Stack合作,我会建议一个更复杂的方法,但不需要直接使用cabal-install。它使用 Jenga,一种可以检索您选择的 Stackage 快照留下的隐式版本信息的工具。 Jenga 不在 Stackage 上;要使用 Stack 安装它,请从 GitHub(或 stack unpack jenga)获取源,然后 运行 stack init --solver 然后是 stack install.

  1. hierarchy.cabal 文件(或任何相关的 .cabal 文件)中删除所有版本限制。

  2. stack init --solver,创建一个 stack.yaml 文件,其中包含任何可能需要的 extra-deps。 (您可以使用 --resolver 明确选择要使用的快照。)

  3. stack build,作为包是否可构建的完整性检查。

  4. 在生成的stack.yaml中,查看extra-deps字段是否被注释掉;如果是这样,请取消注释。这是执行步骤 #6 所必需的。

  5. jenga -i hierarchy.cabal,它将打印 Stack 用于构建包的确切依赖版本。

  6. 将 Jenga 给您的版本粘贴到 .cabal 文件的 build-depends 中,然后根据需要进行调整(至少,您可能希望放宽次要版本范围PVP 合规性——例如将 base == 4.9.1.0 更改为 base == 4.9.*).