Merge pull request #66 from mgattozzi/lazy-static

feat(pbar): Add global progress bar to write to
master
ashley williams 7 years ago committed by GitHub
commit ff3566ed79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      Cargo.lock
  2. 1
      Cargo.toml
  3. 20
      src/bindgen.rs
  4. 6
      src/build.rs
  5. 9
      src/lib.rs
  6. 11
      src/main.rs
  7. 23
      src/manifest.rs
  8. 74
      src/progressbar.rs
  9. 15
      src/readme.rs

1
Cargo.lock generated

@ -638,6 +638,7 @@ dependencies = [
"console 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "console 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"indicatif 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "indicatif 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"quicli 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quicli 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",

@ -16,3 +16,4 @@ serde = "1.0"
serde_derive = "1.0" serde_derive = "1.0"
serde_json = "1.0" serde_json = "1.0"
toml = "0.4" toml = "0.4"
lazy_static = "1.0.0"

@ -1,6 +1,6 @@
use PBAR;
use console::style; use console::style;
use emoji; use emoji;
use progressbar;
use std::process::Command; use std::process::Command;
pub fn cargo_install_wasm_bindgen() { pub fn cargo_install_wasm_bindgen() {
@ -9,22 +9,13 @@ pub fn cargo_install_wasm_bindgen() {
style("[6/7]").bold().dim(), style("[6/7]").bold().dim(),
emoji::DOWN_ARROW emoji::DOWN_ARROW
); );
let pb = progressbar::new(step); let pb = PBAR.message(&step);
let _output = Command::new("cargo") let _output = Command::new("cargo")
.arg("install") .arg("install")
.arg("wasm-bindgen") .arg("wasm-bindgen")
.output() .output()
.unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e));
pb.finish(); pb.finish();
//if !output.status.success() {
// let s = String::from_utf8_lossy(&output.stderr);
// print!(
// "{} cargo_install_wasm_bindgen failed and stderr was:\n{}",
// emoji::ERROR,
// s
// );
// }
} }
pub fn wasm_bindgen_build(path: &str, name: &str) { pub fn wasm_bindgen_build(path: &str, name: &str) {
@ -33,7 +24,7 @@ pub fn wasm_bindgen_build(path: &str, name: &str) {
style("[7/7]").bold().dim(), style("[7/7]").bold().dim(),
emoji::RUNNER emoji::RUNNER
); );
let pb = progressbar::new(step); let pb = PBAR.message(&step);
let binary_name = name.replace("-", "_"); let binary_name = name.replace("-", "_");
let wasm_path = format!("target/wasm32-unknown-unknown/release/{}.wasm", binary_name); let wasm_path = format!("target/wasm32-unknown-unknown/release/{}.wasm", binary_name);
let _output = Command::new("wasm-bindgen") let _output = Command::new("wasm-bindgen")
@ -44,9 +35,4 @@ pub fn wasm_bindgen_build(path: &str, name: &str) {
.output() .output()
.unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e));
pb.finish(); pb.finish();
//if !output.status.success() {
// let s = String::from_utf8_lossy(&output.stderr);
// print!(" wasm_bindgen_build failed and stderr was:\n{}", emoji::ERROR, s);
//}
} }

@ -1,6 +1,6 @@
use PBAR;
use console::style; use console::style;
use emoji; use emoji;
use progressbar;
use std::process::Command; use std::process::Command;
pub fn rustup_add_wasm_target() { pub fn rustup_add_wasm_target() {
@ -9,7 +9,7 @@ pub fn rustup_add_wasm_target() {
style("[1/7]").bold().dim(), style("[1/7]").bold().dim(),
emoji::TARGET emoji::TARGET
); );
let pb = progressbar::new(step); let pb = PBAR.message(&step);
let output = Command::new("rustup") let output = Command::new("rustup")
.arg("target") .arg("target")
.arg("add") .arg("add")
@ -34,7 +34,7 @@ pub fn cargo_build_wasm(path: &str) {
style("[2/7]").bold().dim(), style("[2/7]").bold().dim(),
emoji::CYCLONE emoji::CYCLONE
); );
let pb = progressbar::new(step); let pb = PBAR.message(&step);
let output = Command::new("cargo") let output = Command::new("cargo")
.current_dir(path) .current_dir(path)
.arg("build") .arg("build")

@ -2,6 +2,8 @@ extern crate console;
extern crate failure; extern crate failure;
extern crate indicatif; extern crate indicatif;
#[macro_use] #[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate serde_derive; extern crate serde_derive;
extern crate serde_json; extern crate serde_json;
extern crate toml; extern crate toml;
@ -18,6 +20,11 @@ use std::fs;
use console::style; use console::style;
use failure::Error; use failure::Error;
use progressbar::ProgressOutput;
lazy_static! {
pub static ref PBAR: ProgressOutput = { ProgressOutput::new() };
}
pub fn create_pkg_dir(path: &str) -> Result<(), Error> { pub fn create_pkg_dir(path: &str) -> Result<(), Error> {
let step = format!( let step = format!(
@ -25,7 +32,7 @@ pub fn create_pkg_dir(path: &str) -> Result<(), Error> {
style("[3/7]").bold().dim(), style("[3/7]").bold().dim(),
emoji::FOLDER emoji::FOLDER
); );
let pb = progressbar::new(step); let pb = PBAR.message(&step);
let pkg_dir_path = format!("{}/pkg", path); let pkg_dir_path = format!("{}/pkg", path);
fs::create_dir_all(pkg_dir_path)?; fs::create_dir_all(pkg_dir_path)?;
pb.finish(); pb.finish();

@ -8,7 +8,7 @@ use std::time::Instant;
use indicatif::HumanDuration; use indicatif::HumanDuration;
use quicli::prelude::*; use quicli::prelude::*;
use wasm_pack::{bindgen, build, emoji, manifest, npm, readme}; use wasm_pack::{bindgen, build, emoji, manifest, npm, readme, PBAR};
/// 📦 ✨ pack and publish your wasm! /// 📦 ✨ pack and publish your wasm!
#[derive(Debug, StructOpt)] #[derive(Debug, StructOpt)]
@ -54,16 +54,17 @@ main!(|args: Cli, log_level: verbosity| match args.cmd {
bindgen::cargo_install_wasm_bindgen(); bindgen::cargo_install_wasm_bindgen();
let name = manifest::get_crate_name(&crate_path)?; let name = manifest::get_crate_name(&crate_path)?;
bindgen::wasm_bindgen_build(&crate_path, &name); bindgen::wasm_bindgen_build(&crate_path, &name);
println!( PBAR.one_off_message(&format!(
"{} Done in {}", "{} Done in {}",
emoji::SPARKLE, emoji::SPARKLE,
HumanDuration(started.elapsed()) HumanDuration(started.elapsed())
); ));
println!( PBAR.one_off_message(&format!(
"{} Your WASM pkg is ready to publish at {}/pkg", "{} Your WASM pkg is ready to publish at {}/pkg",
emoji::PACKAGE, emoji::PACKAGE,
&crate_path &crate_path
) ));
PBAR.done()?;
} }
Command::Pack { path } => { Command::Pack { path } => {
let crate_path = match path { let crate_path = match path {

@ -1,11 +1,10 @@
use std::fs::File; use std::fs::File;
use std::io::prelude::*; use std::io::prelude::*;
use PBAR;
use console::style; use console::style;
use emoji; use emoji;
use failure::Error; use failure::Error;
use indicatif::MultiProgress;
use progressbar;
use serde_json; use serde_json;
use toml; use toml;
@ -82,40 +81,32 @@ pub fn write_package_json(path: &str, scope: Option<String>) -> Result<(), Error
emoji::MEMO emoji::MEMO
); );
let warn = |field| { let warn_fmt = |field| {
format!( format!(
"{} {}: Field {} is missing from Cargo.toml. It is not necessary, but recommended", "Field {} is missing from Cargo.toml. It is not necessary, but recommended",
emoji::WARN,
style("[WARN]").bold().dim(),
field field
) )
}; };
let m = MultiProgress::new(); let pb = PBAR.message(&step);
let pb = m.add(progressbar::new(step));
let pkg_file_path = format!("{}/pkg/package.json", path); let pkg_file_path = format!("{}/pkg/package.json", path);
let mut pkg_file = File::create(pkg_file_path)?; let mut pkg_file = File::create(pkg_file_path)?;
let crate_data = read_cargo_toml(path)?; let crate_data = read_cargo_toml(path)?;
let npm_data = crate_data.into_npm(scope); let npm_data = crate_data.into_npm(scope);
if npm_data.description.is_none() { if npm_data.description.is_none() {
let warn_pb = m.add(progressbar::new(warn("description"))); PBAR.warn(&warn_fmt("description"));
warn_pb.finish();
} }
if npm_data.repository.is_none() { if npm_data.repository.is_none() {
let warn_pb = m.add(progressbar::new(warn("repository"))); PBAR.warn(&warn_fmt("repository"));
warn_pb.finish();
} }
if npm_data.license.is_none() { if npm_data.license.is_none() {
let warn_pb = m.add(progressbar::new(warn("license"))); PBAR.warn(&warn_fmt("license"));
warn_pb.finish();
} }
let npm_json = serde_json::to_string_pretty(&npm_data)?; let npm_json = serde_json::to_string_pretty(&npm_data)?;
pkg_file.write_all(npm_json.as_bytes())?; pkg_file.write_all(npm_json.as_bytes())?;
pb.finish(); pb.finish();
m.join_and_clear()?;
Ok(()) Ok(())
} }

@ -1,13 +1,63 @@
use indicatif::{ProgressBar, ProgressStyle}; use console::style;
use emoji;
pub fn new(msg: String) -> ProgressBar { use failure::Error;
let pb = ProgressBar::new_spinner(); use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
pb.enable_steady_tick(200);
pb.set_style( pub struct ProgressOutput {
ProgressStyle::default_spinner() bar: MultiProgress,
.tick_chars("/|\\- ") }
.template("{spinner:.dim.bold} {wide_msg}"),
); impl ProgressOutput {
pb.set_message(&msg); pub fn new() -> Self {
pb Self {
bar: MultiProgress::new(),
}
}
pub fn message(&self, message: &str) -> ProgressBar {
self.bar.add(Self::progressbar(message))
}
pub fn one_off_message(&self, message: &str) {
let bar = self.bar.add(Self::progressbar(message));
bar.finish();
}
pub fn warn(&self, message: &str) {
let warn = format!(
"{} {}: {}",
style("[WARN]").bold().dim(),
emoji::WARN,
message
);
let bar = self.bar.add(Self::progressbar(&warn));
bar.finish();
}
pub fn error(&self, message: &str) {
let err = format!(
"{} {}: {}",
emoji::ERROR,
style("[Error]").bold().dim(),
message
);
let bar = self.bar.add(Self::progressbar(&err));
bar.finish();
}
fn progressbar(msg: &str) -> ProgressBar {
let pb = ProgressBar::new_spinner();
pb.enable_steady_tick(200);
pb.set_style(
ProgressStyle::default_spinner()
.tick_chars("/|\\- ")
.template("{spinner:.dim.bold} {wide_msg}"),
);
pb.set_message(&msg);
pb
}
pub fn done(&self) -> Result<(), Error> {
self.bar.join_and_clear().map_err(|e| Error::from(e))
}
} }

@ -1,31 +1,22 @@
use console::style; use console::style;
use failure::Error; use failure::Error;
use indicatif::MultiProgress;
use std::fs; use std::fs;
use PBAR;
use emoji; use emoji;
use progressbar;
pub fn copy_from_crate(path: &str) -> Result<(), Error> { pub fn copy_from_crate(path: &str) -> Result<(), Error> {
let m = MultiProgress::new();
let step = format!( let step = format!(
"{} {}Copying over your README...", "{} {}Copying over your README...",
style("[5/7]").bold().dim(), style("[5/7]").bold().dim(),
emoji::DANCERS emoji::DANCERS
); );
let pb = m.add(progressbar::new(step)); let pb = PBAR.message(&step);
let crate_readme_path = format!("{}/README.md", path); let crate_readme_path = format!("{}/README.md", path);
let new_readme_path = format!("{}/pkg/README.md", path); let new_readme_path = format!("{}/pkg/README.md", path);
if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) {
let warn = format!( PBAR.warn("origin crate has no README");
"{} {}: origin crate has no README",
emoji::WARN,
style("[WARN]").bold().dim()
);
let warn_pb = m.add(progressbar::new(warn));
warn_pb.finish();
}; };
pb.finish(); pb.finish();
m.join_and_clear()?;
Ok(()) Ok(())
} }

Loading…
Cancel
Save