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();