use anyhow::{Context, Result};
use clap::ValueEnum;
use scv_server::config::ApprovalPolicy;
use std::path::{Path, PathBuf};
#[derive(Clone, Copy, ValueEnum)]
pub(crate) enum ApprovalArg {
OnRisk,
Always,
Never,
}
impl From<ApprovalArg> for ApprovalPolicy {
fn from(value: ApprovalArg) -> Self {
match value {
ApprovalArg::OnRisk => Self::OnRisk,
ApprovalArg::Always => Self::Always,
ApprovalArg::Never => Self::Never,
}
}
}
pub(crate) unsafe fn apply_process_config(
home: Option<&Path>,
config: Option<&Path>,
cwd: &Path,
) -> Result<()> {
if let Some(home) = home {
let home = absolute_path(home, cwd);
std::fs::create_dir_all(&home).context("create SCV instance home")?;
let home = std::fs::canonicalize(home).context("resolve SCV instance home")?;
unsafe { std::env::set_var("SCV_HOME", home) };
}
if let Some(config) = config {
let config = absolute_path(config, cwd);
unsafe { std::env::set_var("SCV_CONFIG", config) };
}
Ok(())
}
pub(crate) fn absolute_path(path: &Path, cwd: &Path) -> PathBuf {
if path.is_absolute() {
path.to_path_buf()
} else {
cwd.join(path)
}
}