命令行工具的语义版本控制

时间:2018-09-19 19:20:44

标签: command-line-interface versioning semantic-versioning

SemVer specs状态下,您应该增加

  
      
  1. 进行不兼容的API更改时的主要版本,
  2.   
  3. 以向后兼容的方式添加功能时的版本,并且
  4.   
  5. 进行向后兼容的错误修复时的PATCH版本。
  6.   

在命令行界面中什么是向后兼容的?

一个简化的示例:

有一个命令行工具可以分析文本文件中的数字。它将返回最小值和最大值。

版本1.0.0的工作方式如下:

+ (NSString *) platform{
    int mib[2];
    size_t len;
    char *machine;

    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;

    sysctl(mib, 2u, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2u, machine, &len, NULL, 0);

    NSString *platform = @(machine);
    free(machine);
    return platform;
}

现在,我添加了一个有用的功能。该工具现在还将输出平均值:

using (var request = new HttpRequest())
{
      var attempt = request.Post("https://api.zcdn.de/oauth/authorizations").ToString();
}

这是主要更改还是次要更改?输出显然已更改,但是仍带有$ analyzertool numbers.txt min: 12 max: 20 $ analyzertool numbers.txt min: 12 max: 20 avg: 17 的行,所以有人在做

min

仍然会看到相同的输出。

我正在寻找现有的约定或相关示例。

1 个答案:

答案 0 :(得分:1)

在引用的示例中,您添加了一个功能,但没有以向后兼容的方式来实现。您通过在回复中添加更多数据来更改界面。就像更改函数的返回数据类型一样;它肯定是打破。有些用例不会被破坏,这一事实并不会改变其他用例。

除非您在文档中明确指出在添加功能时会在输出流中附加其他数据,否则应该进行主要版本变更。