10

假设我有 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 的第二个版本应该有什么版本号?

4

1 回答 1

6

这取决于您从 libbar 重新导出的内容。

您是否重新导出 libbar?

不太可能,但是....

鉴于 libbar 已将其主编号从 0.1 更改为 0.2,因此更改中可能会破坏代码,如果您将其批发重新导出,您的主编号必须更改:0.2.0.0

libbar 0.2 是否声明新实例?

这是需要注意的。

您无法阻止实例跨模块边界泄漏,并且新实例可能会破坏现有代码。这就是版本控制政策说的原因

请注意,修改导入或依赖另一个包的较新版本可能会导致导出额外的实例,从而强制更改主要版本。

如果 libbar 2.0 中有新实例,则必须有一个新的主要版本:0.2.0.0

否则

在这种情况下,您的代码不会更改。软件包版本控制政策的第 2 点不适用:

  1. 否则,如果只有新的绑定、类型、类或模块(但见下文)被添加到接口中,那么 AB 可能保持不变,但新的 C 必须大于旧的 C。

一个基本原则是:

ABC 唯一标识 API。

您没有添加任何内容或更改任何导出的内容,因此您不需要从 0.1.0 更改主要次要编号,但应该更改最后一部分:0.1.0.1是正确的。

于 2013-05-30T08:34:09.603 回答