1 个不稳定版本
0.8.3 | 2024年6月3日 |
---|
#941 在 文件系统
82KB
1.5K SLoC
OSH 目录标准 - Rust 库
- OSH: Open Source Hardware
帮助人类和机器处理 OSH 目录标准的代码。
这包括两个部分
osh_dir_std
- 一个解析规范到易于使用的结构并附带实用工具的 (Rust) 库osh-dir-std
- 一个 CLI 工具,帮助检查给定的项目文件列表是否与一个或多个规范匹配。
注意
这仅检查文件和目录的路径与一组预设(即“标准”)是否匹配。它以任何方式都不检查任何文件的内容。
示例用法
CLI
安装
从源代码
获取并编译
cargo install osh-dir-std
本地源
cargo install --path bin
使用
该工具期望一个由换行符分隔的项目文件(和可选的目录)列表,在 stdin
上,或者作为第一个参数提供的文件中。此列表可能来自 git(或任何其他 版本控制系统(VCS)),文件系统,ZIP 文件,甚至是列出文件的网站。
以下是一些在不同场景下列出文件的方法的示例,以评估项目是否遵守已知的目录标准
git:
git ls-files --recurse-submodules | sed -e 's/^"\(.*\)"$/\1/' | osh-dir-std rate
SVN:
svn ls | osh-dir-std rate
hg status --all | osh-dir-std rate
pijul list | osh-dir-std rate
文件系统
ls -r1 | osh-dir-std rate
示例输出
[
{
"name": "unixish",
"factor": 0.62724684
},
]
因子 1.0
表示项目的文件和目录结构完全符合相应的标准。 unixish
是默认目录标准的名称。
库
设置
Cargo.toml:
[dependencies]
osh_dir_std = "0.7.2"
代码
use osh_dir_std::{self, format::Rec};
fn find_rec(std: &str, record_path: &str) -> Result<&'static Rec<'static>, String> {
for rec in &osh_dir_std::data::STDS.get(std).unwrap().records {
if rec.path == record_path {
return Ok(rec);
}
}
Err(format!(
"Failed to find record with path '{record_path}' in the '{std}' dir standard"
))
}
/// Checks whether the dir std "unixish" contains the record "res/",
/// and whether that record is a _fixed_ one. See [the definition](
/// https://github.com/hoijui/osh-dir-std/blob/main/definition_format.csv)
/// for an explanation of what _fixed_ means.
#[test]
fn unixish_res_fixed() -> Result<(), Error> {
let rec = find_rec("unixish", "res/")?;
assert!(rec.fixed);
Ok(())
}
相关项目
osh
-tool - 检查 OSH 项目是否满足一组预定义的检查,以尝试评估其整体的可读性和开放性。
(也在此工具内部使用)
资助
该项目由欧洲区域发展基金(ERDF)在INTERFACER项目的背景下资助,从2022年11月(项目开始)至2023年3月。
依赖项
~6.5–9MB
~144K SLoC