添加 auto 子命令,用于 cuavrs 系统自动转换,专用,尚未完成
Signed-off-by: Jia Chao <jiac13@chinaunicom.cn>
This commit is contained in:
parent
653c68b30f
commit
6a75014e83
|
@ -8,4 +8,5 @@ edition = "2021"
|
|||
[dependencies]
|
||||
clap = { version = "4.0", features = ["derive"] }
|
||||
cvrf-xmlparser = { git = "https://git.zhgsun.com:8089/jiachao2130/cvrf-xmlparser.git", version = "0.1.0" }
|
||||
serde = { version = "1", features = ["serde_derive"] }
|
||||
serde_json = { version = "1.0" }
|
||||
|
|
|
@ -17,6 +17,10 @@ pub enum CliSub {
|
|||
|
||||
/// 创建并生成新的 CUSA 数据文件
|
||||
Db(SaDbCli),
|
||||
|
||||
/// CUVAS 定制化自动操作,通过读取配置文件中指定的源、目标目录,执行 CUVARS
|
||||
/// 数据库更新操作,配置文件为 `/etc/cuvars/cvrf2cusa.json`
|
||||
Auto(AutoCli),
|
||||
}
|
||||
|
||||
/// ConvertCli 用于将指定的 cvrf 格式 xml 文件转换为 cusa 格式
|
||||
|
@ -67,3 +71,7 @@ pub struct SaDbCli {
|
|||
pub fn parse() -> Cli {
|
||||
Cli::parse()
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
pub struct AutoCli;
|
||||
|
|
56
src/config.rs
Normal file
56
src/config.rs
Normal file
|
@ -0,0 +1,56 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// cvrf2cusa 自动化执行所需的配置
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub(crate) struct AutoConfig {
|
||||
// 对应cuavrs-db-cvrf
|
||||
source: String,
|
||||
|
||||
// cuavrs-db-sa
|
||||
target: String,
|
||||
}
|
||||
|
||||
impl AutoConfig {
|
||||
pub fn from(path: &str) -> crate::Result<Self> {
|
||||
let data = std::fs::read_to_string(path)?;
|
||||
|
||||
Ok(serde_json::from_str::<Self>(&data)?)
|
||||
}
|
||||
}
|
||||
|
||||
/// cuvars 中,关于源码追踪,自动修复相关的配置项,一般位于组件最底层的目录,`config.json`
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub(crate) struct RepairConfig {
|
||||
// 对应了 openEuelr 的上游版本
|
||||
upstream: String,
|
||||
|
||||
// 此组件是否支持自动修复
|
||||
autobuild: bool,
|
||||
|
||||
// 当前已修复的最新版本号
|
||||
fixed_version: String,
|
||||
}
|
||||
|
||||
impl RepairConfig {
|
||||
/// 从指定的路径读取文件并将之转换为 `RepairConfig`
|
||||
pub fn read(path: &str) -> crate::Result<Self> {
|
||||
let data = std::fs::read_to_string(path)?;
|
||||
|
||||
Ok(serde_json::from_str::<Self>(&data)?)
|
||||
}
|
||||
|
||||
/// 获取对应的上游代码分支
|
||||
pub fn upstream(&self) -> &str {
|
||||
&self.upstream
|
||||
}
|
||||
|
||||
/// 此组件是否支持自动构建发布
|
||||
pub fn autobuild(&self) -> bool {
|
||||
self.autobuild
|
||||
}
|
||||
|
||||
/// 已修复的最新代码版本
|
||||
pub fn fixed_version(&self) -> &str {
|
||||
&self.fixed_version
|
||||
}
|
||||
}
|
21
src/lib.rs
21
src/lib.rs
|
@ -11,6 +11,8 @@ use cvrf_xmlparser::{
|
|||
|
||||
pub mod cli;
|
||||
|
||||
mod config;
|
||||
|
||||
/// 定义 crate::Error
|
||||
/// 大部分函数返回的错误
|
||||
pub type Error = Box<dyn std::error::Error + Send + Sync>;
|
||||
|
@ -24,6 +26,7 @@ pub fn cumain() -> Result<()> {
|
|||
match cli.subcommand {
|
||||
cli::CliSub::Convert(cli) => covert(&cli),
|
||||
cli::CliSub::Db(cli) => sadb(&cli),
|
||||
cli::CliSub::Auto(_) => auto(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,3 +166,21 @@ fn walk_dir<P: AsRef<Path>>(path: P, nodir: bool) -> Vec<PathBuf>
|
|||
|
||||
res
|
||||
}
|
||||
|
||||
/// 从配置文件中读取 cvrf 和 cusa 数据库的路径,并执行自动转换操作
|
||||
pub fn auto() -> Result<()> {
|
||||
// 默认配置为,但也可读取执行命令路径下的配置
|
||||
let config = {
|
||||
let default = Path::new("/etc/cuvars/cvrf2cusa.json");
|
||||
if default.is_file() {
|
||||
default.to_str().unwrap()
|
||||
} else {
|
||||
"cvrf2cusa.json"
|
||||
}
|
||||
};
|
||||
|
||||
let auto = config::AutoConfig::from(config)?;
|
||||
|
||||
todo!();
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user