我正在尝试升级pipes-files
包的依赖关系,以便它可以是included in the latest 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
,但它需要我逐个搜索依赖项。
答案 0 :(得分:1)
初步说明:
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
。
从hierarchy.cabal
文件中删除所有版本范围(或任何相关的.cabal文件)。
stack init --solver
,创建一个stack.yaml
文件,其中包含可能需要的任何额外代码。 (您可以使用--resolver
明确选择要使用的快照。)
stack build
,作为一个完整性检查包,可以构建。
在生成的stack.yaml
中,检查extra-deps
字段是否已注释掉;如果是这样,取消注释。这是步骤#6工作所必需的。
jenga -i hierarchy.cabal
,它将打印Stack用于构建程序包的确切依赖版本。
将Jenga提供的版本粘贴到.cabal文件的build-depends
中,然后根据需要进行调整(至少,您可能希望放宽PVP合规性的次要版本范围 - 例如,将base == 4.9.1.0
更改为base == 4.9.*
)。