对于我们拥有本地 git 存储库并进行了一些更改的库,表达对库的依赖关系的最实用方法是什么?

问题描述 投票:0回答:1

用例是我很难测试使用 Xmobar

0.47.4
¹ 提交的修复。

我认为原因是我的

.cabal
文件

executable xmobar
  build-depends: base
               , xmobar

导致拾取

0.47.3
,我认为因为这是目前存储库中最高的标签。确实,

  • 如果我将
    >= 0.47.3
    附加到上面最后一行,
    cabal build
    工作,
  • 但是如果我附加
    > 0.47.3
    ,则
    cabal build
    会失败,因为没有版本满足约束。

现在,我显然可以问作者“你也可以推送标签吗?” (假设这足以让

cabal build
找到新版本),但我想以此困难为契机,进一步了解 Cabal。

  • 我可以表达对在线存储库中特定提交的依赖吗?

    这将允许我使用未附加标签或不在主分支上的最新更改。

  • 更好的是,我可以表达“图书馆不在线,但在

    /home/me/where/I/downloaded/the/repo

    更好的是,这将使我能够轻松测试对其他人存储库的本地更改。


(1) 当使用 xmobar 作为库时并围绕它使用 cabal 项目以允许 与 xmonad 无缝集成(即重新编译一个会重新编译另一个,重新编译时会选择更改任一 .hs 配置,等等;请参阅此处了解更多详情)。如果我放弃所有设置,只保留 xmobar 存储库本地副本中的

~/.config/xmobar/xmobar.hs
cabal install
,并签出最新的提交,我就可以看到修复。

git haskell dependencies cabal
1个回答
0
投票

.cabal
文件不是指定此类信息的正确位置:它与代码存储库的状态相关联,并且不应依赖于其他内容的任何本地签出的存在。

相反,您应该将本地安装的路径放在

cabal.project
文件中,即(与您自己的
.cabal
文件位于同一目录中):

packages: . /home/me/where/I/downloaded/the/repo/Xmobar

然后,当您运行任何

cabal
命令时,它会知道使用
Xmobar
的本地版本,而不是 Hackage 上当前的任何版本。然后,您可以在
> 0.47.3
文件中使用
.cabal
约束,并且仅

如果当前只有您正在处理此项目,则只需将

> 0.47.3
依赖项提交到您自己的 Git,并保持
Xmobar
的本地版本和未添加的
cabal.project
文件即可。然后它对于其他人来说将是不可编译的,但一旦 Xmobar 将新版本推送到 Hackage,它就变得可编译。

或者,您可以将分叉的

Xmobar
作为 Git 子模块 包含到您的存储库中,并添加引用它的
cabal.project
文件。然后任何人都可以查看您的存储库和修补的子模块,将它们一起构建。

© www.soinside.com 2019 - 2024. All rights reserved.