我是第一次使用Ruby,我正在写一个脚本,通过检查Github存储库中的标签,该脚本应该返回可用的最新版本。该脚本应该只考虑格式为0.0.0
、0.0
或v0.0.0
的标签,排除所有其他标签,删除v
(如果存在)。并只返回最近的标签。到目前为止,这是我工作的代码,在我的正则表达式中或者在我对版本排序的方式中(或者可能两者都有)有一些错误。我应该改变什么来达到预期的结果?
def find_latest_version(package_url)
latest_version = ""
version = `git ls-remote --tags --refs #{package_url} "*\.*\.*"`
regex = /[vV]?[0-9][0-9.]*$|\/[0-9][0-9.]*$/
split = version.split("\n")
split.map {|s|
a = s.split("/").last
b = a.scan(regex).map {|a| a.gsub(/[vV]/, '')}
latest_version = b.max_by{ |s| Gem::Version.new(s) }
}
latest_version
end
1条答案
按热度按时间2wnc66cl1#
split
是一个包含多个值的数组。然后调用split.map
,它将遍历数组并对每个元素执行操作。其中一个操作是
latest_version = ...
,这意味着对于数组中的每一个元素,你都在 * 重置 *latest_version
的值,无论数组中的最后一个元素是什么,它最终都会定义latest_version
的最终值,而这不是你想要的。你也许可以使用类似这样的方法来实现你的目标:
这段代码可以缩小很多,限制为数组的三次迭代,但从可读性的Angular 来看,这段代码并不出色: