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

specify locking policy from command line

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