mirror of
https://github.com/lune-org/lune.git
synced 2025-04-11 22:10:53 +01:00
feat: disable unneeded CLI args for standalone
This commit is contained in:
parent
2bf68c1e2a
commit
4bb0eba589
1 changed files with 117 additions and 107 deletions
|
@ -85,9 +85,16 @@ impl Cli {
|
|||
|
||||
#[allow(clippy::too_many_lines)]
|
||||
pub async fn run(self) -> Result<ExitCode> {
|
||||
// Signature which is only present in standalone lune binaries
|
||||
let signature: Vec<u8> = vec![0x4f, 0x3e, 0xf8, 0x41, 0xc3, 0x3a, 0x52, 0x16];
|
||||
// Read the current lune binary to memory
|
||||
let bin = read_to_vec(env::current_exe()?).await?;
|
||||
|
||||
let is_standalone = bin[bin.len() - signature.len()..bin.len()] == signature;
|
||||
|
||||
// List files in `lune` and `.lune` directories, if wanted
|
||||
// This will also exit early and not run anything else
|
||||
if self.list {
|
||||
if self.list && !is_standalone {
|
||||
let sorted_relative = find_lune_scripts(false).await.map(sort_lune_scripts);
|
||||
|
||||
let sorted_home_dir = find_lune_scripts(true).await.map(sort_lune_scripts);
|
||||
|
@ -150,12 +157,7 @@ impl Cli {
|
|||
return Ok(ExitCode::SUCCESS);
|
||||
}
|
||||
|
||||
// Signature which is only present in standalone lune binaries
|
||||
let signature: Vec<u8> = vec![0x4f, 0x3e, 0xf8, 0x41, 0xc3, 0x3a, 0x52, 0x16];
|
||||
|
||||
// Read the current lune binary to memory
|
||||
let bin = read_to_vec(env::current_exe()?).await?;
|
||||
|
||||
if is_standalone {
|
||||
let mut bytecode_offset = 0;
|
||||
let mut bytecode_size = 0;
|
||||
|
||||
|
@ -198,7 +200,7 @@ impl Cli {
|
|||
// allow any runner functionality within standalone binaries
|
||||
|
||||
let result = Lune::new()
|
||||
.with_args(self.script_args.clone())
|
||||
.with_args(self.script_args.clone()) // TODO: args should also include lune reserved ones
|
||||
.run(
|
||||
"STANDALONE",
|
||||
&bin[usize::try_from(bytecode_offset).unwrap()
|
||||
|
@ -214,11 +216,14 @@ impl Cli {
|
|||
Ok(code) => code,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// If not in a standalone context and we don't have any arguments
|
||||
// display the interactive REPL interface
|
||||
return repl::show_interface().await;
|
||||
}
|
||||
|
||||
if !is_standalone {
|
||||
// Figure out if we should read from stdin or from a file,
|
||||
// reading from stdin is marked by passing a single "-"
|
||||
// (dash) as the script name to run to the cli
|
||||
|
@ -248,7 +253,9 @@ impl Cli {
|
|||
);
|
||||
|
||||
return Ok(
|
||||
match build_standalone(output_path, strip_shebang(script_contents.clone())).await {
|
||||
match build_standalone(output_path, strip_shebang(script_contents.clone()))
|
||||
.await
|
||||
{
|
||||
Ok(exitcode) => exitcode,
|
||||
Err(err) => {
|
||||
eprintln!("{err}");
|
||||
|
@ -263,12 +270,15 @@ impl Cli {
|
|||
.with_args(self.script_args)
|
||||
.run(&script_display_name, strip_shebang(script_contents))
|
||||
.await;
|
||||
Ok(match result {
|
||||
return Ok(match result {
|
||||
Err(err) => {
|
||||
eprintln!("{err}");
|
||||
ExitCode::FAILURE
|
||||
}
|
||||
Ok(code) => code,
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
Ok(ExitCode::SUCCESS)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue