1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年8月30日 |
---|
#11 in #tarball
被include-repo使用
5KB
74 行
include-repo
include_repo
rust crate提供了一个宏,可以将项目git仓库中的所有文件嵌入到最终的可执行文件中。它不会嵌入git历史记录或元数据,而是包含一个类似于git archive
产生的tarball。
为什么你可能需要这个?我想到的主要用例(实际上我就是这样用它)是提供一个AGPL合规的端点。
如果你的源代码被编译进二进制文件中,那么提供源代码是非常简单的。
用法
这个crate使用起来非常简单。只需在代码的某个位置包含以下内容
use include_repo::include_repo;
const SOURCE_CODE: &[u8] = include_repo!();
// Expands to:
// const SOURCE_CODE: &[u8] = [128, 80, ...];
// The bag of bytes is a tarball, so serve it with a .tar extension please!
如果你不想包含所有文件,这也是可能的。例如,如果你不想包含'img'和'third_party'文件夹的内容,可以这样做
use include_repo::include_repo;
const SOURCE_CODE: &[u8] = include_repo!(".", ":!/img/", ":!/third_party");
// Any valid pathspec (see
// https://git-scm.cn/docs/gitglossary#gitglossary-aiddefpathspecapathspec) may
// be used. Pathspecs *must* be string literals. Any number may be provided to
// the macro.
// The "." portion is optional on newer versions of git, but for backwards
// compatibility it's best to add it if all other pathspecs are exclusions.
如果你想让tarball被gzip压缩,请使用include_repo_gz!
宏。如果你在二进制文件中没有包含gzip解压缩,你可能需要在请求源代码时使用tar -xzv -f -
,或者为用户提供.tar.gz
文件。
假设
以下假设必须成立,此crate才能正常工作
- 你使用
git
进行版本控制,并且在你的PATH
中有一个现代版本的git
- 你希望以tarball(可选gzip压缩)的形式提供你的源代码,而不是zip或其他格式
- 你希望你的代码作为一个巨大的const嵌入到你的二进制文件中(例如,而不是磁盘上的静态文件)
- 你不在意进程宏在构建过程中运行'git'
许可证
此代码在AGPL下方便地可用。
依赖关系
~2MB
~52K SLoC