首页 > 解决方案 > 如何在 ruby​​ 中自动增加多个表单“xyz”

问题描述

我有一个值为 的变量x.x.x,我需要一个函数,该函数首先将最右边的值增加到10,然后当它达到 时11,增加最左边的值。相同的规则适用于所有值;当它们达到 时11,它们将增加立即左值。我需要这个用于 fastlane 中的自动内部版本号。

标签: ruby

解决方案


简单的拆分、递增、比较和重新加入::

def increment_version(version)
  major, minor, patch = version.split('.').map(&:to_i)
  if (patch += 1) > 10
    patch = 0
    if (minor += 1) > 10
      minor = 0
      major += 1
    end
  end
  [major, minor, patch].join('.')
end

并测试它:

{
  '0.0.9' => '0.0.10',
  '0.0.10' => '0.1.0',
  '0.10.9' => '0.10.10',
  '0.10.10' => '1.0.0'
}.each do |version, expected|
  puts "%-10s -> %-10s (should be %s)" % [version, increment_version(version), expected]
end

输出:

0.0.9      -> 0.0.10     (should be 0.0.10)
0.0.10     -> 0.1.0      (should be 0.1.0)
0.10.9     -> 0.10.10    (should be 0.10.10)
0.10.10    -> 1.0.0      (should be 1.0.0)

但正如评论中提到的,这种版本控制与“xyz”类型版本控制的整个想法背道而驰。如semver.org中所述:

给定版本号 MAJOR.MINOR.PATCH,增加:

进行不兼容的 API 更改时的主要版本,

以向后兼容的方式添加功能时的次要版本,以及

进行向后兼容的错误修复时的补丁版本。

如果你只是像上面的方法那样自动增加版本,版本号将毫无意义,你最好只使用一个正在运行的版本号或当前时间,比如build-20180213101500


推荐阅读