Add spinner when installing package

This commit is contained in:
Felix Schütt
2022-10-04 13:17:40 +02:00
parent d74419dfb6
commit ba8b13c3e8
4 changed files with 67 additions and 24 deletions

45
Cargo.lock generated
View File

@@ -46,6 +46,12 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "ansi_term"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30275ad0ad84ec1c06dde3b3f7d23c6006b7d76d61a85e7060b426b747eff70d"
[[package]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.12.1" version = "0.12.1"
@@ -353,7 +359,7 @@ version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [ dependencies = [
"ansi_term", "ansi_term 0.12.1",
"atty", "atty",
"bitflags", "bitflags",
"strsim 0.8.0", "strsim 0.8.0",
@@ -828,6 +834,16 @@ dependencies = [
"subtle", "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]] [[package]]
name = "dirs" name = "dirs"
version = "4.0.0" version = "4.0.0"
@@ -2405,6 +2421,16 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 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]] [[package]]
name = "stable_deref_trait" name = "stable_deref_trait"
version = "1.2.0" version = "1.2.0"
@@ -2524,6 +2550,16 @@ dependencies = [
"winapi", "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]] [[package]]
name = "term" name = "term"
version = "0.7.0" version = "0.7.0"
@@ -2579,7 +2615,7 @@ dependencies = [
"getopts", "getopts",
"libc", "libc",
"num_cpus", "num_cpus",
"term", "term 0.7.0",
] ]
[[package]] [[package]]
@@ -3118,12 +3154,13 @@ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"clap 4.0.5", "clap 4.0.5",
"colored 2.0.0", "colored 2.0.0",
"dirs", "dirs 4.0.0",
"distance", "distance",
"fern", "fern",
"http_req", "http_req",
"log", "log",
"serde_json", "serde_json",
"spinner",
"target-lexicon 0.12.4", "target-lexicon 0.12.4",
"tempfile", "tempfile",
"unix_mode", "unix_mode",
@@ -3340,7 +3377,7 @@ dependencies = [
name = "wasmer-registry" name = "wasmer-registry"
version = "3.0.0-beta.2" version = "3.0.0-beta.2"
dependencies = [ dependencies = [
"dirs", "dirs 4.0.0",
] ]
[[package]] [[package]]

View File

@@ -43,6 +43,7 @@ wasmer-vfs = { version = "=3.0.0-beta.2", path = "../vfs", default-features = f
atty = "0.2" atty = "0.2"
colored = "2.0" colored = "2.0"
anyhow = "1.0" anyhow = "1.0"
spinner = "0.5.0"
clap = { version = "4.0.5", features = ["derive"] } clap = { version = "4.0.5", features = ["derive"] }
# For the function names autosuggestion # For the function names autosuggestion
distance = "0.4" distance = "0.4"

View File

@@ -39,8 +39,6 @@ fn parse_cli_args() -> Result<(), anyhow::Error> {
let firstarg = args.get(1).map(|s| s.as_str()); let firstarg = args.get(1).map(|s| s.as_str());
let secondarg = args.get(2).map(|s| s.as_str()); let secondarg = args.get(2).map(|s| s.as_str());
println!("{:?}", (firstarg, secondarg));
match (firstarg, secondarg) { match (firstarg, secondarg) {
(None, _) | (Some("help"), _) | (Some("--help"), _) => return print_help(), (None, _) | (Some("help"), _) | (Some("--help"), _) => return print_help(),
@@ -79,24 +77,32 @@ fn parse_cli_args() -> Result<(), anyhow::Error> {
// Try finding the local package // Try finding the local package
let mut args_without_package = args.clone(); let mut args_without_package = args.clone();
args_without_package.remove(1); 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())? return RunWithoutFile::try_parse_from(args_without_package.iter())?
.into_run_args(o) .into_run_args(o)
.execute(); .execute();
} else { } else {
// Failed to find the remote package let sp =
// spinner::SpinnerBuilder::new(format!("Installing package {package} ..."))
// TODO: print list of similar packages .spinner(vec![
return print_help(); "", "", "", "", "", "", "", "", " ", "", "", "", "",
"", "", "", "",
])
.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 { } else {
return print_help(); return print_help();
@@ -107,13 +113,11 @@ fn parse_cli_args() -> Result<(), anyhow::Error> {
fn split_version(s: &str) -> Result<(String, Option<String>), anyhow::Error> { fn split_version(s: &str) -> Result<(String, Option<String>), anyhow::Error> {
let package_version = s.split("@").collect::<Vec<_>>(); let package_version = s.split("@").collect::<Vec<_>>();
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, v] => Ok((p.trim().to_string(), Some(v.trim().to_string()))),
&[p] => Ok((p.trim().to_string(), None)), &[p] => Ok((p.trim().to_string(), None)),
_ => Err(anyhow!("Invalid package / version: {s:?}")), _ => Err(anyhow!("Invalid package / version: {s:?}")),
}; }
println!("{:?}", r);
r
} }
fn print_help() -> Result<(), anyhow::Error> { fn print_help() -> Result<(), anyhow::Error> {

View File

@@ -41,6 +41,7 @@ pub fn download_and_unpack_targz(url: &str, target_path: &Path) -> Result<PathBu
} }
pub fn install_package(name: &str, version: Option<&str>) -> Result<PathBuf, String> { pub fn install_package(name: &str, version: Option<&str>) -> Result<PathBuf, String> {
std::thread::sleep(std::time::Duration::from_secs(4));
Err(format!("unimplemented")) Err(format!("unimplemented"))
} }