From 70f202e982db135a103bf8282b90056dd199ab18 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 24 Jul 2021 01:50:11 +0800 Subject: [PATCH] feat: init commit --- Cargo.lock | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + README.md | 5 +- src/main.rs | 49 +++++++++++++++++- 4 files changed, 198 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe7d8c9..ea91ccf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,151 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" + +[[package]] +name = "redox_syscall" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +dependencies = [ + "getrandom", + "redox_syscall", +] + [[package]] name = "runrs" version = "0.1.0" +dependencies = [ + "rust_util", +] + +[[package]] +name = "rust_util" +version = "0.6.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df24005feacce81f4ae340464b39c380f7e01e7225bfdef62d40cb44cb1c11d7" +dependencies = [ + "lazy_static", + "libc", + "term", + "term_size", +] + +[[package]] +name = "rustversion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "term_size" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index 4611c0f..f9c274e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,4 @@ readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +rust_util = "0.6.41" diff --git a/README.md b/README.md index 44439df..ae6c0ad 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # runrs -Run rust script \ No newline at end of file +Run rust script + + +Simply call `rust-script` (https://github.com/fornwall/rust-script). \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e7a11a9..44df411 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,50 @@ +#[macro_use] +extern crate rust_util; + +use std::process::Command; +use std::path::PathBuf; + fn main() { - println!("Hello, world!"); + 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); + } + } + + 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."); + } + + if let Some(arg1) = copied_args.get(0) { + match arg1.as_str() { + ":::" => { + // TODO + } + _ => {} // IGNORE + } + } + + 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); + } }