![](/img/trans.png)
[英]How to reduce duplication in the build-depends fields of a .cabal file?
[英]cabal: how to automatically update the build-depends field in the .cabal file?
有没有办法自动更新.cabal文件中的build-depends字段? 例如,如果我们从以下.cabal
文件开始:
name: HUnit
version: 1.1.1
synopsis: A unit testing framework for Haskell
homepage: http://hunit.sourceforge.net/
category: Testing
author: Dean Herington
license: BSD3
license-file: LICENSE
cabal-version: >= 1.10
build-type: Simple
library
build-depends: base >= 2 && < 4
exposed-modules: Test.HUnit.Base, Test.HUnit.Lang,
Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
default-extensions: CPP
然后,安装一个包:
cabal install warp
现在,我必须将warp >=3.0 && <3.1
到build-depends
字段,以使文件看起来像这样:
name: HUnit
version: 1.1.1
synopsis: A unit testing framework for Haskell
homepage: http://hunit.sourceforge.net/
category: Testing
author: Dean Herington
license: BSD3
license-file: LICENSE
cabal-version: >= 1.10
build-type: Simple
library
build-depends: base >= 2 && < 4, warp >=3.0 && <3.1
exposed-modules: Test.HUnit.Base, Test.HUnit.Lang,
Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
default-extensions: CPP
我的问题是:我们如何自动更新此文件?
现代cabal-install
有两个工具用于帮助管理依赖项的边界。 首先是gen-bounds
,它根据当前安装的版本规范建议包的正确版本范围。 第二个是outdated
,它列出了cabal
文件中的依赖项,其中hackage
存在较新的版本。 两者都记录在cabal手册中: https : //www.haskell.org/cabal/users-guide/developing-packages.html#generating-dependency-version-bounds
一个可能的替代方案是使用hpack,yaml,sponge和jq:
您将需要hpack package.yaml文件。
例如,将aeson
添加为依赖项:
cp package.yaml package.yaml.backup && (yaml2json package.yaml | jq '.dependencies += ["aeson"]' | json2yaml | sponge package.yaml ) && hpack
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.