#semver #version #semantic #compare

alt_semver

语义版本解析和比较

1个不稳定版本

使用旧的Rust 2015

0.9.0 2020年1月8日

#2957 in 解析器实现


用于 alt_cargo_metadata

MIT/Apache

73KB
1.5K SLoC

semver

语义版本解析和比较。

Build Status

文档

语义版本控制(参见 https://semver.org/)是一组用于分配版本号的规则。

SemVer 和 Rust生态系统

Rust 本身遵循 SemVer 规范,其标准库也是如此。这两者并不相互依赖。

Cargo,Rust 的包管理器,使用 SemVer 来确定需要安装的包的版本。

安装

要使用 semver,将其添加到您的 [dependencies] 部分

semver = "0.9.0"

并将其添加到您的crate根目录

extern crate semver;

版本

在 simplest的情况下,semver crate 允许您使用 parse 方法构建 Version 对象

use semver::Version;

assert!(Version::parse("1.2.3") == Ok(Version {
   major: 1,
   minor: 2,
   patch: 3,
   pre: vec!(),
   build: vec!(),
}));

如果您有多个 Version,您可以使用常规的比较运算符来比较它们

use semver::Version;

assert!(Version::parse("1.2.3-alpha")  != Version::parse("1.2.3-beta"));
assert!(Version::parse("1.2.3-alpha2") >  Version::parse("1.2.0"));

需求

semver crate 还提供了比较需求的能力,这是一种更复杂的比较。

例如,创建一个仅匹配版本大于或等于 1.0.0 的需求

use semver::Version;
use semver::VersionReq;

let r = VersionReq::parse(">= 1.0.0").unwrap();
let v = Version::parse("1.0.0").unwrap();

assert!(r.to_string() == ">= 1.0.0".to_string());
assert!(r.matches(&v))

它还允许解析 ~x.y.z^x.y.z 需求,如 https://npmjs.net.cn/doc/misc/semver.html 中定义

波浪号需求 指定一个带有一些更新的最小版本

~1.2.3 := >=1.2.3 <1.3.0
~1.2   := >=1.2.0 <1.3.0
~1     := >=1.0.0 <2.0.0

插入符号需求 允许对指定版本进行 SemVer 兼容的更新,0.x0.x+1 不被视为兼容,但 1.x1.x+1 是。

0.0.x不被视为与任何其他版本兼容。缺少的次要版本和补丁版本将被简化为0,但允许对此值的灵活性。

^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
^0.0   := >=0.0.0 <0.1.0
^0     := >=0.0.0 <1.0.0

依赖项

~0.1–4MB
~75K SLoC