1个不稳定版本
使用旧的Rust 2015
0.11.0 | 2020年12月10日 |
---|
#2996在解析器实现
146每月下载量
76KB
1.5K SLoC
semver
语义版本解析和比较。是semver crate的分支,增加了对semver规范之外版本解析的支持,但非常流行。
具体来说,我们扩展了父crate以支持
"x.y" => "x.y.0"
"x" => "x.0.0"
有关其他方面的更多信息,请参阅父crate。
安装
要使用forgiving_semver
,将其添加到你的[dependencies]
部分
forgiving_semver = "0.11.0"
lib.rs
:
语义版本解析和比较。
语义版本控制(参见http://semver.org/)是一组用于分配版本号的规则。
SemVer概述
给定一个版本号MAJOR.MINOR.PATCH,增加MAJOR版本当您进行不兼容的API更改时,增加MINOR版本当您以向后兼容的方式添加功能时,增加PATCH版本当您进行向后兼容的错误修复时。
- MAJOR版本
- MINOR版本
- PATCH版本
MAJOR.MINOR.PATCH格式可以作为扩展提供预发布和构建元数据。
本文档中任何关于“规范”的引用均指SemVer规范的2.0版本。
SemVer和Rust生态系统
Rust本身遵循SemVer规范,其标准库也是如此。这两个不是绑定在一起的。
Cargo,Rust的包管理器,使用SemVer来确定需要安装的包的版本。
版本
在最简单的情况下,semver
crate允许您使用parse
方法构建Version
对象
use forgiving_semver::Version;
assert!(Version::parse("1.2.3") == Ok(Version {
major: 1,
minor: 2,
patch: 3,
pre: vec!(),
build: vec!(),
}));
如果您有多个Version
,您可以使用通常的比较运算符来比较它们
use forgiving_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"));
如果您明确需要修改一个Version
,SemVer还允许您根据规范增加主版本、次版本和修订号。
请注意,为了执行此操作,您必须使用可变版本
use forgiving_semver::Version;
let mut bugfix_release = Version::parse("1.0.0")?;
bugfix_release.increment_patch();
assert_eq!(Ok(bugfix_release), Version::parse("1.0.1"));
当增加次要版本号时,补丁号重置为零(根据规范第7节所述)
use forgiving_semver::Version;
let mut feature_release = Version::parse("1.4.6")?;
feature_release.increment_minor();
assert_eq!(Ok(feature_release), Version::parse("1.5.0"));
同样,当增加主版本号时,补丁号和次要号都重置为零(根据规范第8节所述)
use forgiving_semver::Version;
let mut chrome_release = Version::parse("41.5.5377")?;
chrome_release.increment_major();
assert_eq!(Ok(chrome_release), Version::parse("42.0.0"));
需求
semver
包还提供了比较需求的函数,这些比较更复杂。
例如,创建一个仅匹配大于或等于1.0.0的版本的需求
use forgiving_semver::Version;
use forgiving_semver::VersionReq;
let r = VersionReq::parse(">=1.0.0")?;
let v = Version::parse("1.0.0")?;
assert!(r.to_string() == ">=1.0.0".to_string());
assert!(r.matches(&v));
它还允许解析~x.y.z
和^x.y.z
需求,这些需求在https://npmjs.net.cn/package/semver中定义
波浪线需求指定了带有一些更新的最小版本
~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.x
和0.x+1
不被认为是兼容的,但1.x
和1.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
通配符需求允许解析以下格式的版本需求:*
、x.*
和x.y.*
。
* := >=0.0.0
1.* := >=1.0.0 <2.0.0
1.2.* := >=1.2.0 <1.3.0
依赖
~1.6–5.5MB
~104K SLoC