Move all printing in cli to the console file
This commit is contained in:
parent
2a150299f3
commit
2fb4e2b01d
|
@ -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);
|
console::notify_site_size(&site);
|
||||||
super::warn_about_ignored_pages(&site);
|
console::warn_about_ignored_pages(&site);
|
||||||
site.build()
|
site.build()
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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);
|
console::notify_site_size(&site);
|
||||||
super::warn_about_ignored_pages(&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);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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),
|
Ok(()) => console::report_elapsed_time(start),
|
||||||
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);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
("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…
Reference in a new issue