提交 085cab2d authored 作者: Serhij S's avatar Serhij S

specify locking policy from command line

上级 1c130ec8
......@@ -533,7 +533,7 @@ dependencies = [
[[package]]
name = "roboplc-cli"
version = "0.1.24"
version = "0.1.25"
dependencies = [
"ansi_term",
"clap",
......
[package]
name = "roboplc-cli"
version = "0.1.24"
version = "0.1.25"
edition = "2021"
authors = ["Serhij S. <div@altertech.com>"]
license = "Apache-2.0"
......
use std::path::PathBuf;
use clap::Parser;
use clap::{Parser, ValueEnum};
#[derive(Parser)]
#[clap(author = "Bohemia Automation (https://bma.ai)",
......@@ -56,6 +56,28 @@ pub struct NewCommand {
pub features: Vec<String>,
#[clap(last(true), help = "extra cargo arguments")]
pub extras: Vec<String>,
#[clap(short = 'L', long, help = "Locking policy)", default_value = "rt-safe")]
pub locking: LockingPolicy,
}
#[derive(ValueEnum, Copy, Clone)]
pub enum LockingPolicy {
#[clap(name = "default", help = "Default locking policy")]
Default,
#[clap(name = "rt", help = "Real-time locking policy")]
Rt,
#[clap(name = "rt-safe", help = "Real-time safe locking policy")]
RtSafe,
}
impl LockingPolicy {
pub fn as_feature_str(self) -> &'static str {
match self {
LockingPolicy::Default => "locking-default",
LockingPolicy::Rt => "locking-rt",
LockingPolicy::RtSafe => "locking-rt-safe",
}
}
}
#[derive(Parser)]
......
......@@ -28,14 +28,20 @@ pub fn create(
let mut current_dir = env::current_dir()?;
current_dir.push(&opts.name);
env::set_current_dir(&current_dir)?;
let mut robo_features: Vec<&str> = Vec::new();
let locking_features = vec![opts.locking.as_feature_str()];
let mut robo_features: Vec<&str> = locking_features.clone();
for feature in &opts.features {
for feature in feature.split(',') {
robo_features.push(feature);
}
}
add_dependency("roboplc", &robo_features, env::var("ROBOPLC_PATH").ok())?;
add_dependency("tracing", &["log"], None)?;
add_dependency(
"roboplc",
&robo_features,
env::var("ROBOPLC_PATH").ok(),
true,
)?;
add_dependency("tracing", &["log"], None, false)?;
let robo_toml = Config {
remote: config::Remote {
key: maybe_key,
......@@ -55,6 +61,7 @@ fn add_dependency(
name: &str,
features: &[&str],
path: Option<String>,
disable_defaults: bool,
) -> Result<(), Box<dyn std::error::Error>> {
println!("Adding dependency: {}", name.green().bold());
let mut cmd = std::process::Command::new("cargo");
......@@ -65,6 +72,9 @@ fn add_dependency(
for feature in features {
cmd.arg("--features").arg(feature);
}
if disable_defaults {
cmd.arg("--no-default-features");
}
let result = cmd.status()?;
if !result.success() {
return Err(format!("Failed to add dependency {}", name).into());
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论