快捷搜索:
来自 67677新澳门手机版 2019-06-23 02:39 的文章
当前位置: 67677新澳门手机版 > 67677新澳门手机版 > 正文

RPM包的版本号相比较

版本号表示格式为 epoch:version-release,例如 1:2-3

题目:比较两个版本号version1和version2。
如果版本 1 > 版本2返回1,则版本 1 < 版本2返回-1,否则返回0。
您可能认为版本字符串不是空的,只包含数字和.字符。
该.字符不代表小数点,用于分隔数字序列。
例如,2.5不是“二分之二”或“三分之一”,是第二次一级修订的第五次修订。
以下是版本号排序的示例:
0.1 <1.1 <1.2 <13.37

第一条原则是 rpm 属性优先级 epoch > version > release
        两个 rpm 包比较时,先看两者的 epoch 哪个新,如果 epoch 相等,再看 version 哪个新,如果 version 还相等,最后看 release 哪个新,要是 release 也相等,那么这两个 rpm 包的版本是相等的。
0:1-2 > 0:1-1
0:2-1 > 0:1-3
1:1-1 > 0:2-2

思路:分别对版本号以.分割,按最大长度对版本号数组循环,按顺序比较。

第二条原则是版本号字段列表分隔模式
        epoch 属性之外,version 和 release 可能不单单包含数字,也可能含有字符串,例如 1.0alpha1、2.0.0 svn12221
        遇到这种情况时,版本号字段会被分隔为列表。分隔策略是数字与字符串分开,形成自然分隔边界,点号/加号/减号/下划线作为分隔符。1.0alpha1 会分为 [ 1、0、alpha、1 ],2.0.0 svn12221 会分为 [ 2、0、0、svn、12221 ]。这样子分隔的目的是为了列表相应分段进行比较,比较的优先级按照列表的下标顺序自然排序,第一位的优先级最高,后面依次降低。如果两个列表可比较的分段经过比较后都相等,那么列表长的比列表短的新,如果列表长度也一样,那么这两个版本号字段相等。
1.2.0 > 1.1.9            ( [1,2,0] 中第2分段的“2” > [1,1,9] 中第2分段的“1” )
1.12.1 > 1.9beta2   ( [1,12,1] 中第2分段的“12” > [1,9,beta,2] 中第2分段的“9” )
3.1.0 > 3.1               ( [3,1,0] 的列表长度3 > [3,1] 的列表长度2 )

代码:

本文由67677新澳门手机版发布于67677新澳门手机版,转载请注明出处:RPM包的版本号相比较

关键词: