Browse Source

Move all printing in cli to the console file

index-subcmd
Vincent Prouillet 7 years ago
parent
commit
2fb4e2b01d
5 changed files with 72 additions and 69 deletions
  1. +3
    -2
      src/bin/cmd/build.rs
  2. +0
    -26
      src/bin/cmd/mod.rs
  3. +5
    -8
      src/bin/cmd/serve.rs
  4. +51
    -0
      src/bin/console.rs
  5. +13
    -33
      src/bin/gutenberg.rs

+ 3
- 2
src/bin/cmd/build.rs View File

@@ -3,11 +3,12 @@ use std::env;
use gutenberg::errors::Result; use gutenberg::errors::Result;
use gutenberg::Site; use gutenberg::Site;


use console;


pub fn build(config_file: &str) -> Result<()> { pub fn build(config_file: &str) -> Result<()> {
let mut site = Site::new(env::current_dir().unwrap(), config_file)?; let mut site = Site::new(env::current_dir().unwrap(), config_file)?;
site.load()?; site.load()?;
super::notify_site_size(&site);
super::warn_about_ignored_pages(&site);
console::notify_site_size(&site);
console::warn_about_ignored_pages(&site);
site.build() site.build()
} }

+ 0
- 26
src/bin/cmd/mod.rs View File

@@ -5,29 +5,3 @@ mod serve;
pub use self::init::create_new_project; pub use self::init::create_new_project;
pub use self::build::build; pub use self::build::build;
pub use self::serve::serve; pub use self::serve::serve;

use gutenberg::Site;

use console::warn;

fn notify_site_size(site: &Site) {
println!(
"-> Creating {} pages ({} orphan) and {} sections",
site.pages.len(),
site.get_all_orphan_pages().len(),
site.sections.len() - 1, // -1 since we do not the index as a section
);
}

fn warn_about_ignored_pages(site: &Site) {
let ignored_pages = site.get_ignored_pages();
if !ignored_pages.is_empty() {
warn(&format!(
"{} page(s) ignored (missing date or order in a sorted section):",
ignored_pages.len()
));
for path in site.get_ignored_pages() {
warn(&format!("- {}", path.display()));
}
}
}

+ 5
- 8
src/bin/cmd/serve.rs View File

@@ -13,11 +13,8 @@ use ws::{WebSocket, Sender, Message};
use gutenberg::Site; use gutenberg::Site;
use gutenberg::errors::{Result, ResultExt}; use gutenberg::errors::{Result, ResultExt};



use ::{report_elapsed_time, unravel_errors};
use console; use console;



#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
enum ChangeKind { enum ChangeKind {
Content, Content,
@@ -47,7 +44,7 @@ fn rebuild_done_handling(broadcaster: &Sender, res: Result<()>, reload_path: &st
}}"#, reload_path) }}"#, reload_path)
).unwrap(); ).unwrap();
}, },
Err(e) => unravel_errors("Failed to build the site", &e, false)
Err(e) => console::unravel_errors("Failed to build the site", &e)
} }
} }


@@ -67,10 +64,10 @@ pub fn serve(interface: &str, port: &str, config_file: &str) -> Result<()> {


site.load()?; site.load()?;
site.enable_live_reload(); site.enable_live_reload();
super::notify_site_size(&site);
super::warn_about_ignored_pages(&site);
console::notify_site_size(&site);
console::warn_about_ignored_pages(&site);
site.build()?; site.build()?;
report_elapsed_time(start);
console::report_elapsed_time(start);


// Setup watchers // Setup watchers
let (tx, rx) = channel(); let (tx, rx) = channel();
@@ -154,7 +151,7 @@ pub fn serve(interface: &str, port: &str, config_file: &str) -> Result<()> {
} }
}, },
}; };
report_elapsed_time(start);
console::report_elapsed_time(start);
} }
_ => {} _ => {}
} }


+ 51
- 0
src/bin/console.rs View File

@@ -1,6 +1,12 @@
use std::time::Instant;

use chrono::Duration;
use term_painter::ToStyle; use term_painter::ToStyle;
use term_painter::Color::*; use term_painter::Color::*;


use gutenberg::errors::Error;
use gutenberg::Site;



pub fn info(message: &str) { pub fn info(message: &str) {
println!("{}", NotSet.bold().paint(message)); println!("{}", NotSet.bold().paint(message));
@@ -17,3 +23,48 @@ pub fn success(message: &str) {
pub fn error(message: &str) { pub fn error(message: &str) {
println!("{}", Red.bold().paint(message)); println!("{}", Red.bold().paint(message));
} }

/// Display in the console the number of pages/sections in the site
pub fn notify_site_size(site: &Site) {
println!(
"-> Creating {} pages ({} orphan) and {} sections",
site.pages.len(),
site.get_all_orphan_pages().len(),
site.sections.len() - 1, // -1 since we do not the index as a section
);
}

/// Display a warning in the console if there are ignored pages in the site
pub fn warn_about_ignored_pages(site: &Site) {
let ignored_pages = site.get_ignored_pages();
if !ignored_pages.is_empty() {
warn(&format!(
"{} page(s) ignored (missing date or order in a sorted section):",
ignored_pages.len()
));
for path in site.get_ignored_pages() {
warn(&format!("- {}", path.display()));
}
}
}

/// Print the time elapsed rounded to 1 decimal
pub fn report_elapsed_time(instant: Instant) {
let duration_ms = Duration::from_std(instant.elapsed()).unwrap().num_milliseconds() as f64;

if duration_ms < 1000.0 {
success(&format!("Done in {}ms.\n", duration_ms));
} else {
let duration_sec = duration_ms / 1000.0;
success(&format!("Done in {:.1}s.\n", ((duration_sec * 10.0).round() / 10.0)));
}
}

/// Display an error message and the actual error(s)
pub fn unravel_errors(message: &str, error: &Error) {
self::error(message);
self::error(&format!("Error: {}", error));
for e in error.iter().skip(1) {
self::error(&format!("Reason: {}", e));
}
}

+ 13
- 33
src/bin/gutenberg.rs View File

@@ -12,41 +12,12 @@ extern crate mount;
extern crate notify; extern crate notify;
extern crate ws; extern crate ws;



use std::time::Instant; use std::time::Instant;


use chrono::Duration;
use gutenberg::errors::Error;

mod cmd; mod cmd;
mod console; mod console;




/// Print the time elapsed rounded to 1 decimal
fn report_elapsed_time(instant: Instant) {
let duration_ms = Duration::from_std(instant.elapsed()).unwrap().num_milliseconds() as f64;

if duration_ms < 1000.0 {
console::success(&format!("Done in {}ms.\n", duration_ms));
} else {
let duration_sec = duration_ms / 1000.0;
console::success(&format!("Done in {:.1}s.\n", ((duration_sec * 10.0).round() / 10.0)));
}
}

////Display an error message, the actual error and then exits if requested
fn unravel_errors(message: &str, error: &Error, exit: bool) {
console::error(message);
console::error(&format!("Error: {}", error));
for e in error.iter().skip(1) {
console::error(&format!("Reason: {}", e));
}
if exit {
::std::process::exit(1);
}
}


fn main() { fn main() {
let matches = clap_app!(Gutenberg => let matches = clap_app!(Gutenberg =>
(version: crate_version!()) (version: crate_version!())
@@ -74,15 +45,21 @@ fn main() {
("init", Some(matches)) => { ("init", Some(matches)) => {
match cmd::create_new_project(matches.value_of("name").unwrap()) { match cmd::create_new_project(matches.value_of("name").unwrap()) {
Ok(()) => console::success("Project created"), Ok(()) => console::success("Project created"),
Err(e) => unravel_errors("Failed to create the project", &e, true),
Err(e) => {
console::unravel_errors("Failed to create the project", &e);
::std::process::exit(1);
},
}; };
}, },
("build", Some(_)) => { ("build", Some(_)) => {
console::info("Building site..."); console::info("Building site...");
let start = Instant::now(); let start = Instant::now();
match cmd::build(config_file) { match cmd::build(config_file) {
Ok(()) => report_elapsed_time(start),
Err(e) => unravel_errors("Failed to build the site", &e, true),
Ok(()) => console::report_elapsed_time(start),
Err(e) => {
console::unravel_errors("Failed to build the site", &e);
::std::process::exit(1);
},
}; };
}, },
("serve", Some(matches)) => { ("serve", Some(matches)) => {
@@ -91,7 +68,10 @@ fn main() {
console::info("Building site..."); console::info("Building site...");
match cmd::serve(interface, port, config_file) { match cmd::serve(interface, port, config_file) {
Ok(()) => (), Ok(()) => (),
Err(e) => unravel_errors("Failed to build the site", &e, true),
Err(e) => {
console::unravel_errors("Failed to build the site", &e);
::std::process::exit(1);
},
}; };
}, },
_ => unreachable!(), _ => unreachable!(),


Loading…
Cancel
Save