ruby - 如何在 ruby 中自动增加多个表单“xyz”
问题描述
我有一个值为 的变量x.x.x
,我需要一个函数,该函数首先将最右边的值增加到10
,然后当它达到 时11
,增加最左边的值。相同的规则适用于所有值;当它们达到 时11
,它们将增加立即左值。我需要这个用于 fastlane 中的自动内部版本号。
解决方案
简单的拆分、递增、比较和重新加入::
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
推荐阅读
- asp.net - 端口 454 和 455 上的 Azure HSTS 安全性
- python-3.x - Python中的文件路径和文件
- java - PrematureCloseException 的原因是什么?
- azure - 从 Azure 函数配置中删除机密
- python-3.x - 如何解决行/列的熊猫长度错误
- javalite - Maven Central 上 javalite 包 2.3.3 版的目标发布日期是什么?
- c - 长方体中的立方体
- bokeh - 如何在 Bokeh 中显示或隐藏图形线
- laravel - 将 laravel/Homestead 从“7.2.1”更新到“10.1.0”的问题
- oracle - 逻辑应用程序 oracle 获取行选择查询为列提供别名