假设我有 libfoo。这取决于 libbar。根据Package Versioning Policy , 我指定
libbar ==0.1.*
在 Build-depends: 在我的 cabal 文件中。
然后libbar的开发者发布了一个新版本,0.2。我对其进行了测试,没有影响 libfoo 的更改。所以我将我的 Build-depends 更改为
libbar ==0.2.*
或者也许
libbar >= 0.1 && < 0.3
尽管我能想到不采用后一种方式的理由。这是我对 libfoo 所做的唯一更改。
libfoo 导出接受在 libbar 中定义的类型并返回在 libbar 中定义的类型的函数。但是,对 libbar 的更改不会影响任何这些功能。
libfoo 的第一个版本是 0.1.0.0。 libfoo 的第二个版本应该有什么版本号?
最佳答案
这取决于您从 libbar 重新导出的内容。
您是否重新导出 libbar?
不太可能,但是....
鉴于 libbar 已将其主编号从 0.1 更改为 0.2,因此更改中可能会破坏代码,如果您将其批发重新导出,您的主编号也必须更改: 0.2.0.0
libbar 0.2 是否声明新实例?
这是的那个小心为了。
您无法阻止实例跨模块边界泄漏,并且新实例可能会破坏现有代码。这就是版本控制政策说的原因
Note that modifying imports or depending on a newer version of another package may cause extra instances to be exported and thus force a major version change.
如果 libbar 2.0 中有新实例,则必须有一个新的主要版本: 0.2.0.0 .
否则
在这种情况下,您的代码不会改变。软件包版本控制政策的第 2 点不适用:
- Otherwise, if only new bindings, types, classes or modules (but see below) were added to the interface, then A.B may remain the same but the new C must be greater than the old C.
一个基本原则是:
A.B.C uniquely identifies the API.
您没有添加任何内容或更改任何导出的内容,因此您不需要从 0.1.0 更改主要次要编号,但应该更改最后一部分: 0.1.0.1 是正确的。
关于Haskell 包版本控制策略 - 依赖项的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827001/