版本控制
解析并递增版本字符串
使用 Version::parse
从字符串字面量构造语义化版本 semver::Version
,然后逐个递增补丁(修订)版本号、副(次要)版本号和主版本号。
注意:根据语义化版本控制规范,增加副(次要)版本号时会将补丁(修订)版本号重置为 0,增加主版本号时会将副(次要)版本号和补丁(修订)版本号都重置为 0。
use semver::{Version, SemVerError};
fn main() -> Result<(), SemVerError> {
let mut parsed_version = Version::parse("0.2.6")?;
assert_eq!(
parsed_version,
Version {
major: 0,
minor: 2,
patch: 6,
pre: vec![],
build: vec![],
}
);
parsed_version.increment_patch();
assert_eq!(parsed_version.to_string(), "0.2.7");
println!("New patch release: v{}", parsed_version);
parsed_version.increment_minor();
assert_eq!(parsed_version.to_string(), "0.3.0");
println!("New minor release: v{}", parsed_version);
parsed_version.increment_major();
assert_eq!(parsed_version.to_string(), "1.0.0");
println!("New major release: v{}", parsed_version);
Ok(())
}
解析复杂的版本字符串
使用 Version::parse
从复杂的版本字符串构造语义化版本 semver::Version
。该字符串包含语义化版本控制规范中定义的预发布和构建元数据。
需要注意的是:根据语义化版本控制规范,构建元数据是虽然被解析,但在比较版本时不考虑。换句话说,即使两个版本的构建字符串不同,但它们的版本可能是相等的。
use semver::{Identifier, Version, SemVerError};
fn main() -> Result<(), SemVerError> {
let version_str = "1.0.49-125+g72ee7853";
let parsed_version = Version::parse(version_str)?;
assert_eq!(
parsed_version,
Version {
major: 1,
minor: 0,
patch: 49,
pre: vec![Identifier::Numeric(125)],
build: vec![],
}
);
assert_eq!(
parsed_version.build,
vec![Identifier::AlphaNumeric(String::from("g72ee7853"))]
);
let serialized_version = parsed_version.to_string();
assert_eq!(&serialized_version, version_str);
Ok(())
}
检查给定版本是否为预发布版本
给定两个版本,使用 is_prerelease
断言一个是预发布,另一个不是。
use semver::{Version, SemVerError};
fn main() -> Result<(), SemVerError> {
let version_1 = Version::parse("1.0.0-alpha")?;
let version_2 = Version::parse("1.0.0")?;
assert!(version_1.is_prerelease());
assert!(!version_2.is_prerelease());
Ok(())
}
查询适配给定范围的最新版本
给定一个版本字符串 &str 的列表,查找最新的语义化版本 semver::Version
。semver::VersionReq
用 VersionReq::matches
过滤列表,也可以展示语义化版本 semver
的预发布参数设置。
检查外部命令的版本兼容性
本实例使用 Command
模块运行命令 git --version
,然后使用 Version::parse
将版本号解析为语义化版本 semver::Version
。VersionReq::matches
将 semver::VersionReq
与解析的语义化版本进行比较。最终,命令输出类似于“git version x.y.z”。