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

时间:2018-03-07 10:49:44

标签: haskell cabal haskell-stack

我正在尝试升级pipes-files包的依赖关系,以便它可以是included in the latest stack LTSpipes-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 个答案:

答案 0 :(得分:1)

初步说明:

  • 层次结构 pipes-files 的依赖项,与您尝试解决的问题相同 - 它不在Stackage中,并且版本范围过时了到最新的LTS。这意味着您首先必须让它成功构建,然后add your tweaked version of it to the extra-deps in the stack.yaml of pipes-files
  • cabal gen-bounds,其中&#34;建议[s]依赖于包版本控制策略的依赖版本边界&#34;,原则上是该工作的正确工具。但是,让cabal-install按照以堆栈为中心的环境的限制来表现并不总是那么简单。虽然这似乎足以在没有独立于堆栈的GHC安装的情况下从bash shell运行cabal gen-bounds ...

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

    ...我无法弄清楚如何让它遵循Stack(年龄)快照的版本限制 - 特别是--package-db选项,which can be helpful with commands such as cabal configure,没有& {39}似乎被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文件,其中包含可能需要的任何额外代码。 (您可以使用--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.*)。