2个版本
0.1.1 | 2019年2月9日 |
---|---|
0.1.0 | 2017年9月12日 |
#739 in 操作系统
每月103次下载
用于 2 crate
10KB
221 行
deb-version
这里有一系列将“Debian版本”比较函数移植到不同语言的例子
rust
(目前只有一个!)
这允许你判断 1.0
是否比 1.0~beta5
新(它不是!)。
实现的规范截至Debian Policy 4.1.0.0的第5.6.12节:版本。以下为(GPL)文本。
规范
软件包的版本号。格式为:[epoch:]upstream_version[-debian_revision]
。
这里有三个组件
-
epoch
:这是一个单个(通常很小)的无符号整数。它可以省略,在这种情况下假设为零。如果省略,则假定upstream_version
中不包含任何冒号。提供它是为了允许旧版本软件包的版本号错误和之前版本的编号方案被保留下来。
-
upstream_version
:这是版本号的主要部分。它通常是创建 .deb 文件的原版(“上游”)软件包的版本号,如果适用的话。通常它将与上游作者指定的格式相同;然而,可能需要重新格式化以适应包管理系统的格式和比较方案。以下将描述包管理系统对
upstream_version
的比较行为。版本号的upstream_version
部分是必须的。upstream_version
可能只包含字母数字(/A-Za-z0-9/
)以及字符 . + - ~(句号、加号、连字符、波浪号)且应从数字开始。如果没有debian_revision
,则不允许使用连字符。 -
debian_revision
:版本号的这部分指定基于上游版本的Debian软件包版本。它可能只包含字母数字以及字符 + . ~(加号、句号、波浪号)且与upstream_version
以相同的方式进行比较。这是可选的;如果不存在,则上游版本可能不包含连字符。这种格式表示的情况是,某件软件是专门为了成为Debian软件包而编写的,其中Debian软件包源必须始终与原始源相同,因此不需要修订指示。
在每次增加上游版本时,都习惯性地将 debian_revision
重置为 1。
包管理系统会在字符串中的最后一个连字符处(如果有)拆分版本号,以确定 upstream_version
和 debian_revision
。没有 debian_revision
等同于 debian_revision
为 0。
在比较两个版本号时,首先比较每个版本的纪元,如果纪元相同,则比较 upstream_version
,如果 upstream_version
也相同,则比较 debian_revision
。 epoch
是按数字比较的。包管理系统使用以下算法比较 upstream_version
和 debian_revision
部分
从左到右比较字符串。
首先确定每个字符串中完全由非数字字符组成的初始部分。这两个部分(其中之一可能为空)按字典顺序比较。如果发现差异,则返回该差异。字典比较是将ASCII值修改后比较,使得所有字母都比所有非字母字符排序得早,并且波浪号排序在所有其他字符之前,甚至在部分的末尾。例如,以下部分按从早到晚的顺序排序:~~
、~~a
、~
、空部分、a
。
然后确定每个字符串剩余部分的初始部分,该部分完全由数字字符组成。比较这两个部分的数值,并将找到的任何差异作为比较的结果返回。为此目的,空字符串(只能发生在比较的两个版本字符串的末尾)计为零。
重复这两个步骤(比较和删除初始非数字字符串和初始数字字符串),直到找到差异或两个字符串都耗尽。
许可证
这里的代码可在MIT许可证下使用。上述规范和针对 libapt
的测试需要GPL组件,但实际代码全部可在MIT许可证下使用:您可以在没有任何限制的情况下自由使用它。