From ba8b13c3e8d654f261ff7316e6bb02e6bb92ca15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=BCtt?= Date: Tue, 4 Oct 2022 13:17:40 +0200 Subject: [PATCH] Add spinner when installing package --- Cargo.lock | 45 +++++++++++++++++++++++++++++++++++++---- lib/cli/Cargo.toml | 1 + lib/cli/src/cli.rs | 44 ++++++++++++++++++++++------------------ lib/registry/src/lib.rs | 1 + 4 files changed, 67 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d88ae0fc..ae735875f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ansi_term" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30275ad0ad84ec1c06dde3b3f7d23c6006b7d76d61a85e7060b426b747eff70d" + [[package]] name = "ansi_term" version = "0.12.1" @@ -353,7 +359,7 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "ansi_term", + "ansi_term 0.12.1", "atty", "bitflags", "strsim 0.8.0", @@ -828,6 +834,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" +dependencies = [ + "cfg-if 0.1.10", + "dirs-sys", +] + [[package]] name = "dirs" version = "4.0.0" @@ -2405,6 +2421,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spinner" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3a7cd01625b7e43e62815677d692cb59b221c2fdc2853d1eb86a260ee0c272" +dependencies = [ + "ansi_term 0.7.5", + "term 0.6.1", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -2524,6 +2550,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "term" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5" +dependencies = [ + "dirs 2.0.2", + "winapi", +] + [[package]] name = "term" version = "0.7.0" @@ -2579,7 +2615,7 @@ dependencies = [ "getopts", "libc", "num_cpus", - "term", + "term 0.7.0", ] [[package]] @@ -3118,12 +3154,13 @@ dependencies = [ "cfg-if 1.0.0", "clap 4.0.5", "colored 2.0.0", - "dirs", + "dirs 4.0.0", "distance", "fern", "http_req", "log", "serde_json", + "spinner", "target-lexicon 0.12.4", "tempfile", "unix_mode", @@ -3340,7 +3377,7 @@ dependencies = [ name = "wasmer-registry" version = "3.0.0-beta.2" dependencies = [ - "dirs", + "dirs 4.0.0", ] [[package]] diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index c6b3bd96c..7795d97c2 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -43,6 +43,7 @@ wasmer-vfs = { version = "=3.0.0-beta.2", path = "../vfs", default-features = f atty = "0.2" colored = "2.0" anyhow = "1.0" +spinner = "0.5.0" clap = { version = "4.0.5", features = ["derive"] } # For the function names autosuggestion distance = "0.4" diff --git a/lib/cli/src/cli.rs b/lib/cli/src/cli.rs index 8625cf91e..19946bdc4 100644 --- a/lib/cli/src/cli.rs +++ b/lib/cli/src/cli.rs @@ -39,8 +39,6 @@ fn parse_cli_args() -> Result<(), anyhow::Error> { let firstarg = args.get(1).map(|s| s.as_str()); let secondarg = args.get(2).map(|s| s.as_str()); - println!("{:?}", (firstarg, secondarg)); - match (firstarg, secondarg) { (None, _) | (Some("help"), _) | (Some("--help"), _) => return print_help(), @@ -79,24 +77,32 @@ fn parse_cli_args() -> Result<(), anyhow::Error> { // Try finding the local package let mut args_without_package = args.clone(); args_without_package.remove(1); - println!("args without package: {:#?}", args_without_package); - return RunWithoutFile::try_parse_from(args_without_package.iter())? - .into_run_args(o) - .execute(); - } else if let Ok(o) = - wasmer_registry::install_package(&package, version.as_ref().map(|s| s.as_str())) - { - // Try auto-installing the remote package - let mut args_without_package = args.clone(); - args_without_package.remove(1); return RunWithoutFile::try_parse_from(args_without_package.iter())? .into_run_args(o) .execute(); } else { - // Failed to find the remote package - // - // TODO: print list of similar packages - return print_help(); + let sp = + spinner::SpinnerBuilder::new(format!("Installing package {package} ...")) + .spinner(vec![ + "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷", " ", "⠁", "⠂", "⠄", "⡀", + "⢀", "⠠", "⠐", "⠈", + ]) + .start(); + + let v = version.as_ref().map(|s| s.as_str()); + let result = wasmer_registry::install_package(&package, v); + sp.close(); + print!("\r\n"); + if let Ok(o) = result { + // Try auto-installing the remote package + let mut args_without_package = args.clone(); + args_without_package.remove(1); + return RunWithoutFile::try_parse_from(args_without_package.iter())? + .into_run_args(o) + .execute(); + } else { + return print_help(); + } } } else { return print_help(); @@ -107,13 +113,11 @@ fn parse_cli_args() -> Result<(), anyhow::Error> { fn split_version(s: &str) -> Result<(String, Option), anyhow::Error> { let package_version = s.split("@").collect::>(); - let r = match package_version.as_slice() { + match package_version.as_slice() { &[p, v] => Ok((p.trim().to_string(), Some(v.trim().to_string()))), &[p] => Ok((p.trim().to_string(), None)), _ => Err(anyhow!("Invalid package / version: {s:?}")), - }; - println!("{:?}", r); - r + } } fn print_help() -> Result<(), anyhow::Error> { diff --git a/lib/registry/src/lib.rs b/lib/registry/src/lib.rs index b3da1b15c..216b8d5bb 100644 --- a/lib/registry/src/lib.rs +++ b/lib/registry/src/lib.rs @@ -41,6 +41,7 @@ pub fn download_and_unpack_targz(url: &str, target_path: &Path) -> Result) -> Result { + std::thread::sleep(std::time::Duration::from_secs(4)); Err(format!("unimplemented")) }