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::Site;

use console;

pub fn build(config_file: &str) -> Result<()> {
let mut site = Site::new(env::current_dir().unwrap(), config_file)?;
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()
}

+ 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::build::build;
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::errors::{Result, ResultExt};


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


#[derive(Debug, PartialEq)]
enum ChangeKind {
Content,
@@ -47,7 +44,7 @@ fn rebuild_done_handling(broadcaster: &Sender, res: Result<()>, reload_path: &st
}}"#, reload_path)
).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.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()?;
report_elapsed_time(start);
console::report_elapsed_time(start);

// Setup watchers
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::Color::*;

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


pub fn info(message: &str) {
println!("{}", NotSet.bold().paint(message));
@@ -17,3 +23,48 @@ pub fn success(message: &str) {
pub fn error(message: &str) {
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 ws;


use std::time::Instant;

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

mod cmd;
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() {
let matches = clap_app!(Gutenberg =>
(version: crate_version!())
@@ -74,15 +45,21 @@ fn main() {
("init", Some(matches)) => {
match cmd::create_new_project(matches.value_of("name").unwrap()) {
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(_)) => {
console::info("Building site...");
let start = Instant::now();
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)) => {
@@ -91,7 +68,10 @@ fn main() {
console::info("Building site...");
match cmd::serve(interface, port, config_file) {
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!(),


Loading…
Cancel
Save