From 9c8d0acd254ff9a0a7619af3c8a0521d070eda7d Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 6 Aug 2022 02:05:15 +0800 Subject: [PATCH] feat: v0.1.1 --- Cargo.lock | 87 +++++++++++++++++++++++++++++++- Cargo.toml | 3 +- external/rust-script/src/main.rs | 2 +- src/main.rs | 77 +++++++++++++++------------- 4 files changed, 130 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea91ccf..0392a71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,12 +8,39 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cpufeatures" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +dependencies = [ + "libc", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -35,6 +62,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.3" @@ -46,6 +83,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "lazy_static" version = "1.4.0" @@ -58,6 +101,12 @@ version = "0.2.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + [[package]] name = "redox_syscall" version = "0.2.9" @@ -79,9 +128,10 @@ dependencies = [ [[package]] name = "runrs" -version = "0.1.0" +version = "0.1.1" dependencies = [ "rust_util", + "sha256", ] [[package]] @@ -102,6 +152,29 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "sha256" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e84a7f596c081d359de5e06a83877138bc3c4483591e1af1916e1472e6e146e" +dependencies = [ + "hex", + "sha2", +] + [[package]] name = "term" version = "0.7.0" @@ -123,6 +196,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index f9c274e..ba06df7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "runrs" -version = "0.1.0" +version = "0.1.1" edition = "2018" license = "MIT/Apache-2.0" description = "Run Rust Scripts" @@ -10,3 +10,4 @@ readme = "README.md" [dependencies] rust_util = "0.6.41" +sha256 = "1.0.3" diff --git a/external/rust-script/src/main.rs b/external/rust-script/src/main.rs index 97de59a..355ae5d 100644 --- a/external/rust-script/src/main.rs +++ b/external/rust-script/src/main.rs @@ -319,7 +319,7 @@ fn parse_args() -> Args { } fn is_env_on(env: &str, default: bool) -> bool { - std::env::var("CARGO_OUTPUT").map(|v| { + std::env::var(env).map(|v| { let v = v.to_lowercase(); v == "true" || v == "yes" || v == "1" }).unwrap_or_else(|_| default) diff --git a/src/main.rs b/src/main.rs index 44df411..b4a0b8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,50 +1,55 @@ #[macro_use] extern crate rust_util; - -use std::process::Command; use std::path::PathBuf; - +use std::process::Command; fn main() { let home = std::env::var("HOME").unwrap_or_else(|_| failure_and_exit!("$HOME not found!") ); let rust_script = PathBuf::from(format!("{}/.cargo/bin/rust-script", home)); if !rust_script.exists() { - warning!("rust-script not found, install it..."); - let mut cargo_install_rust_script = Command::new("cargo"); - cargo_install_rust_script.args(&["install", "rust-script"]); - debugging!("Run command: {:?}", cargo_install_rust_script); - let run_result = rust_util::util_cmd::run_command_and_wait(&mut cargo_install_rust_script); - if let Err(e) = run_result { - failure_and_exit!("Install rust-script failed: {}", e); - } + // warning!("rust-script not found, install it..."); + // let mut cargo_install_rust_script = Command::new("cargo"); + // cargo_install_rust_script.args(&["install", "rust-script"]); + // debugging!("Run command: {:?}", cargo_install_rust_script); + // let run_result = rust_util::util_cmd::run_command_and_wait(&mut cargo_install_rust_script); + // if let Err(e) = run_result { + // failure_and_exit!("Install rust-script failed: {}", e); + // } + failure_and_exit!("Need install rust-script tool, https://git.hatter.ink/hatter/runrs/src/branch/master/external/rust-script"); } - - let mut copied_args = vec![]; - std::env::args().skip(1).for_each(|arg| { - copied_args.push(arg); - }); - debugging!("Arguments: {:?}", copied_args); - - if copied_args.is_empty() { - failure_and_exit!("Run `runrs --help` for help."); + let args = std::env::args().skip(1).collect::>(); + if args.is_empty() { + failure_and_exit!("runrs need arguments, e.g.\n\nrunrs [arguments]\n"); } - - if let Some(arg1) = copied_args.get(0) { - match arg1.as_str() { - ":::" => { - // TODO - } - _ => {} // IGNORE - } + let script_file = match args.get(0) { + None => failure_and_exit!("Must assign file name"), + Some(f) => f, + }; + let script_content = match std::fs::read_to_string(script_file) { + Err(e) => failure_and_exit!("Read file: {}, failed: {}", script_file, e), + Ok(c) => c, + }; + let script_sha256 = sha256::digest(script_content); + debugging!("File {} -> sha256: {}", script_file, script_sha256); + let cache_script_bin_name = format!("{}/Library/Caches/rust-script/binaries/release/{}", + home, + script_sha256); + let cache_script_bin_name_exists = std::fs::metadata(&cache_script_bin_name).is_ok(); + debugging!("Bin name: {} {} exists", cache_script_bin_name, iff!(cache_script_bin_name_exists, "", "not")); + let mut run_script_cmd = if cache_script_bin_name_exists { + Command::new(cache_script_bin_name) + } else { + let mut cmd = Command::new(rust_script); + cmd.args(&["--bin-name", &script_sha256, script_file]); + cmd + }; + for arg in args.iter().skip(1) { + run_script_cmd.arg(arg); } - - let mut run_rs = Command::new(rust_script); - for arg in &copied_args { - run_rs.arg(arg); - } - debugging!("Run command: {:?}", run_rs); - if let Err(e) = rust_util::util_cmd::run_command_and_wait(&mut run_rs) { - failure_and_exit!("Run rust-script failed: {}", e); + debugging!("Run command: {:?}", run_script_cmd); + match rust_util::util_cmd::run_command_and_wait(&mut run_script_cmd) { + Err(e) => failure_and_exit!("Run rust-script failed: {}", e), + Ok(exit_status) => std::process::exit(exit_status.code().unwrap_or_else(|| 0)), } }