Skip to content

Commit 2ce2465

Browse files
authored
feat: exit 1 for running an invalid argc script (#364)
1 parent 3bec9ce commit 2ce2465

File tree

1 file changed

+44
-31
lines changed

1 file changed

+44
-31
lines changed

src/bin/argc/main.rs

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -50,38 +50,17 @@ fn run() -> Result<i32> {
5050

5151
if let Some(argc_cmd) = argc_cmd {
5252
match argc_cmd {
53-
"--argc-eval" => {
54-
let (source, _script_path, cmd_args) = parse_script_args(&args[2..])?;
55-
if cmd_args
56-
.get(1)
57-
.map(|v| v == parallel::PARALLEL_SYMBOL)
58-
.unwrap_or_default()
59-
{
60-
let cmd_args_len = cmd_args.len();
61-
if cmd_args_len < 3 {
62-
bail!("No parallel command")
63-
}
64-
let bash_options = get_bash_options();
65-
let mut code = retrieve_argc_variables().unwrap_or_default();
66-
let mut cmds = vec![cmd_args[2].to_string()];
67-
cmds.extend(cmd_args[3..].iter().map(|v| escape_shell_words(v)));
68-
code.push_str(&cmds.join(" "));
69-
println!("{bash_options}{code}")
70-
} else {
71-
let values = argc::eval(
72-
runtime,
73-
&source,
74-
&cmd_args,
75-
Some(&args[2]),
76-
get_term_width(),
77-
)?;
78-
let bash_options = get_bash_options();
79-
let dir_vars = export_dir_vars(&args[2]);
80-
let code = argc::ArgcValue::to_bash(&values);
81-
let export_vars = export_argc_variables(&code);
82-
println!("{bash_options}{dir_vars}{export_vars}{code}")
53+
"--argc-eval" => match run_eval(runtime, args) {
54+
Ok(output) => {
55+
println!("{}", output);
8356
}
84-
}
57+
Err(err) => {
58+
println!(
59+
"echo {}\nexit 1",
60+
escape_shell_words(&format!("Error: {err}"))
61+
);
62+
}
63+
},
8564
"--argc-run" => {
8665
if args.len() < 3 {
8766
bail!("No script file provided");
@@ -222,6 +201,40 @@ fn run() -> Result<i32> {
222201
}
223202
}
224203

204+
fn run_eval(runtime: NativeRuntime, args: Vec<String>) -> Result<String> {
205+
let (source, _script_path, cmd_args) = parse_script_args(&args[2..])?;
206+
let output = if cmd_args
207+
.get(1)
208+
.map(|v| v == parallel::PARALLEL_SYMBOL)
209+
.unwrap_or_default()
210+
{
211+
let cmd_args_len = cmd_args.len();
212+
if cmd_args_len < 3 {
213+
bail!("No parallel command")
214+
}
215+
let bash_options = get_bash_options();
216+
let mut code = retrieve_argc_variables().unwrap_or_default();
217+
let mut cmds = vec![cmd_args[2].to_string()];
218+
cmds.extend(cmd_args[3..].iter().map(|v| escape_shell_words(v)));
219+
code.push_str(&cmds.join(" "));
220+
format!("{bash_options}{code}")
221+
} else {
222+
let values = argc::eval(
223+
runtime,
224+
&source,
225+
&cmd_args,
226+
Some(&args[2]),
227+
get_term_width(),
228+
)?;
229+
let bash_options = get_bash_options();
230+
let dir_vars = export_dir_vars(&args[2]);
231+
let code = argc::ArgcValue::to_bash(&values);
232+
let export_vars = export_argc_variables(&code);
233+
format!("{bash_options}{dir_vars}{export_vars}{code}")
234+
};
235+
Ok(output)
236+
}
237+
225238
fn run_command<T: AsRef<OsStr>>(
226239
script_path: &str,
227240
prog: &str,

0 commit comments

Comments
 (0)