#版本控制 #标签 #git #mercurial #数字 #辅助 #构建

构建 vcs_version

从版本控制系统获取版本信息的辅助函数

1 个不稳定版本

0.1.0 2024年3月7日

#279构建工具

MIT 许可证

12KB
161

README

Docs

可以从 build.rs 中调用的辅助函数,用于从 Git 或 Mercurial 标签中提取版本号。

版本号主要遵循 Python PEP440 规范。如果当前目录对应一个版本标签,则返回该标签。否则,识别最近的标签,并返回形式为 tag.dev_N_+_hash_ 的字符串,其中 N 是标签和当前版本之间的修订次数。在两种情况下,如果当前目录已被修改,则将当前日期作为 YYYYMMDD 添加到本地版本标签中。

如果当前目录不是 Git 或 Mercurial 检出,则尝试从由 hg archive 生成的 .hg_archival.txt 文件中获取标签、距离和哈希,然后回退到 Cargo.toml 中定义的版本。由于无法检查代码是否已修改,vcs_version 将始终将日期后缀添加到 .hg_archival.txtCargo.toml 中的版本。

示例用法

将此放在您的 build.rs

use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;

fn main()
{
   let out_dir = env::var ("OUT_DIR").unwrap();
   let mut f = File::create (Path::new (&out_dir).join ("build_info.rs")).unwrap();
   let version = vcs_version::get_version();
   writeln!(f, "pub const PKG_NAME: &'static str = \"{} {} {}\";",
            env::var ("CARGO_PKG_NAME").unwrap(),
            version,
            env::var ("PROFILE").unwrap_or ("".into()))
      .unwrap();
   writeln!(f, "pub const PKG_VERSION: &'static str = \"{}\";",
            version)
      .unwrap();
}

然后在您的 main.rslib.rs

include!(concat!(env!("OUT_DIR"), "/build_info.rs"));

这将定义两个公共字符串常量

  • PKG_NAME 包含包括版本号的完整包名,
  • PKG_VERSION 只包含版本号。

依赖项

~4–14MB
~185K SLoC