18 个版本
使用旧的 Rust 2015
0.3.36 | 2018年4月28日 |
---|---|
0.3.32 | 2018年4月15日 |
0.3.21 | 2018年3月20日 |
0.3.13 | 2018年2月17日 |
0.3.10 | 2017年12月23日 |
#63 在 #版本化
276 每月下载量
在 27 个 crate 中使用 (通过 reproto-core)
86KB
2K SLoC
semver 分支用于 reproto
这是对 https://github.com/steveklabnik/semver 的分支。
对此进行了多项修改,包括但不限于
- 同一 crate 中的解析。
- 结构化错误处理。
- 没有向后兼容模式。
lib.rs
:
语义版本解析和比较。
语义版本化(见 http://semver.org/)是一组分配版本号的规则。
SemVer 概述
给定版本号 MAJOR.MINOR.PATCH,当你进行不兼容的 API 变更时,增加 MAJOR 版本;当你以向后兼容的方式添加功能时,增加 MINOR 版本;当你进行向后兼容的错误修复时,增加 PATCH 版本。
- MAJOR 版本
- MINOR 版本
- PATCH 版本
预发布和构建元数据标签可作为 MAJOR.MINOR.PATCH 格式的扩展。
在此文档中,任何关于“规范”的引用都指的是 SemVer 规范的 2.0 版本。
SemVer 和 Rust 生态系统
Rust 本身遵循 SemVer 规范,其标准库也是如此。这两者并不相关。
Cargo,Rust 的包管理器,使用 SemVer 来确定你需要安装的包版本。
版本
在最简单的情况下,semver
crate 允许你使用 parse
方法构建 Version
对象。
use reproto_semver::Version;
assert!(Version::parse("1.2.3") == Ok(Version {
major: 1,
minor: 2,
patch: 3,
pre: vec!(),
build: vec!(),
}));
如果你有多个 Version
,你可以使用常规的比较运算符来比较它们。
use reproto_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 还允许你根据规范增加主版本、次要版本和补丁版本号。
请注意,为了执行此操作,你必须使用可变版本
use reproto_semver::Version;
let mut bugfix_release = Version::parse("1.0.0").unwrap();
bugfix_release.increment_patch();
assert_eq!(Ok(bugfix_release), Version::parse("1.0.1"));
当增加次要版本号时,补丁号重置为零(符合规范的第 7 节)
use reproto_semver::Version;
let mut feature_release = Version::parse("1.4.6").unwrap();
feature_release.increment_minor();
assert_eq!(Ok(feature_release), Version::parse("1.5.0"));
同样,当增加主版本号时,补丁号和次要号重置为零(符合规范的第 8 节)
use reproto_semver::Version;
let mut chrome_release = Version::parse("41.5.5377").unwrap();
chrome_release.increment_major();
assert_eq!(Ok(chrome_release), Version::parse("42.0.0"));
需求
《semver》crate 还提供了比较需求的功能,这些是比较复杂的比较。
例如,创建一个只匹配版本大于或等于 1.0.0 的需求
use reproto_semver::Version;
use reproto_semver::Range;
let r = Range::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.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
依赖项
~175KB