diff --git a/src/args.rs b/src/args.rs index e94f756..ecc5568 100644 --- a/src/args.rs +++ b/src/args.rs @@ -8,6 +8,7 @@ pub fn get_args() -> clap::ArgMatches { .about("Bootstrap a new repository from base repository") .arg(arg!( "Base repository").required(true)) .arg(arg!( "Repository name").required(true)) + .arg(arg!(--verify "Verify scripts before running them")) .alias("bs"), ) .subcommand( diff --git a/src/bootstrap.rs b/src/bootstrap.rs index 4ab65fb..116543b 100644 --- a/src/bootstrap.rs +++ b/src/bootstrap.rs @@ -152,8 +152,18 @@ pub fn build_script_vars(expose: Option>, vars: &[AskValue]) -> Stri String::new() } -pub fn do_script(action: &ScriptAction, vars: &[AskValue], name: &str) { +pub fn do_script(action: &ScriptAction, vars: &[AskValue], name: &str, verify: bool) { let pre = build_script_vars(action.expose.clone(), &vars); + + if verify { + let script = + std::fs::read_to_string(std::path::Path::new(name).join(&action.script)).unwrap(); + println!("Running script:\n{pre}\n{script}"); + if !inquire::prompt_confirmation("Run this script?").unwrap() { + return; + } + } + println!("Running script '{}'", action.script); Exec::cmd("sh") .arg("-c") @@ -187,7 +197,7 @@ pub fn do_replace(action: &ReplaceAction, name: &str, vars: &[AskValue]) { } /// Bootstrap a git repository using a base template -pub fn bootstrap(base: &str, name: &str) { +pub fn bootstrap(base: &str, name: &str, verify: bool) { Exec::cmd("git") .arg("clone") .arg(base) @@ -281,10 +291,10 @@ pub fn bootstrap(base: &str, name: &str) { }; if eval(&when, &vars) { - do_script(&action, &vars, name); + do_script(&action, &vars, name, verify); } } else { - do_script(&action, &vars, name); + do_script(&action, &vars, name, verify); } } } diff --git a/src/main.rs b/src/main.rs index bcd19d5..156861a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,8 @@ fn main() { Some(("bootstrap", bs_args)) => { let base = bs_args.get_one::("BASE").unwrap(); let repo = bs_args.get_one::("NEW").unwrap(); - bootstrap(base, repo); + let verify = bs_args.get_flag("verify"); + bootstrap(base, repo, verify); } Some(("new", new_args)) => { let branch: &String = new_args.get_one("BRANCH").unwrap();