Support output_dir
in config.toml
This commit is contained in:
parent
4f5d9bd8b0
commit
575c38f9c8
|
@ -96,6 +96,8 @@ pub struct Config {
|
||||||
#[serde(skip_serializing, skip_deserializing)] // not a typo, 2 are need
|
#[serde(skip_serializing, skip_deserializing)] // not a typo, 2 are need
|
||||||
pub extra_syntax_set: Option<SyntaxSet>,
|
pub extra_syntax_set: Option<SyntaxSet>,
|
||||||
|
|
||||||
|
pub output_dir: String,
|
||||||
|
|
||||||
pub link_checker: link_checker::LinkChecker,
|
pub link_checker: link_checker::LinkChecker,
|
||||||
|
|
||||||
/// The setup for which slugification strategies to use for paths, taxonomies and anchors
|
/// The setup for which slugification strategies to use for paths, taxonomies and anchors
|
||||||
|
@ -333,6 +335,7 @@ impl Default for Config {
|
||||||
translations: HashMap::new(),
|
translations: HashMap::new(),
|
||||||
extra_syntaxes: Vec::new(),
|
extra_syntaxes: Vec::new(),
|
||||||
extra_syntax_set: None,
|
extra_syntax_set: None,
|
||||||
|
output_dir: "public".to_string(),
|
||||||
link_checker: link_checker::LinkChecker::default(),
|
link_checker: link_checker::LinkChecker::default(),
|
||||||
slugify: slugify::Slugify::default(),
|
slugify: slugify::Slugify::default(),
|
||||||
search: search::Search::default(),
|
search: search::Search::default(),
|
||||||
|
@ -654,4 +657,27 @@ bar = "baz"
|
||||||
// We expect an error here
|
// We expect an error here
|
||||||
assert_eq!(false, config.add_theme_extra(&theme).is_ok());
|
assert_eq!(false, config.add_theme_extra(&theme).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn default_output_dir() {
|
||||||
|
let config = r#"
|
||||||
|
title = "My site"
|
||||||
|
base_url = "https://replace-this-with-your-url.com"
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let config = Config::parse(config).unwrap();
|
||||||
|
assert_eq!(config.output_dir, "public".to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_add_output_dir() {
|
||||||
|
let config = r#"
|
||||||
|
title = "My site"
|
||||||
|
base_url = "https://replace-this-with-your-url.com"
|
||||||
|
output_dir = "docs"
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let config = Config::parse(config).unwrap();
|
||||||
|
assert_eq!(config.output_dir, "docs".to_string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,7 @@ impl Site {
|
||||||
let static_path = path.join("static");
|
let static_path = path.join("static");
|
||||||
let imageproc =
|
let imageproc =
|
||||||
imageproc::Processor::new(content_path.clone(), &static_path, &config.base_url);
|
imageproc::Processor::new(content_path.clone(), &static_path, &config.base_url);
|
||||||
let output_path = path.join("public");
|
let output_path = path.join(config.output_dir.clone());
|
||||||
|
|
||||||
let site = Site {
|
let site = Site {
|
||||||
base_path: path.to_path_buf(),
|
base_path: path.to_path_buf(),
|
||||||
|
|
|
@ -96,6 +96,9 @@ ignored_content = []
|
||||||
# A list of directories used to search for additional `.sublime-syntax` files.
|
# A list of directories used to search for additional `.sublime-syntax` files.
|
||||||
extra_syntaxes = []
|
extra_syntaxes = []
|
||||||
|
|
||||||
|
# You can override the default output directory `public` by setting an another value.
|
||||||
|
# output_dir = "docs"
|
||||||
|
|
||||||
# Configuration of the link checker.
|
# Configuration of the link checker.
|
||||||
[link_checker]
|
[link_checker]
|
||||||
# Skip link checking for external URLs that start with these prefixes
|
# Skip link checking for external URLs that start with these prefixes
|
||||||
|
|
|
@ -44,7 +44,6 @@ pub fn build_cli() -> App<'static, 'static> {
|
||||||
Arg::with_name("output_dir")
|
Arg::with_name("output_dir")
|
||||||
.short("o")
|
.short("o")
|
||||||
.long("output-dir")
|
.long("output-dir")
|
||||||
.default_value("public")
|
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("Outputs the generated site in the given path"),
|
.help("Outputs the generated site in the given path"),
|
||||||
Arg::with_name("drafts")
|
Arg::with_name("drafts")
|
||||||
|
@ -68,7 +67,6 @@ pub fn build_cli() -> App<'static, 'static> {
|
||||||
Arg::with_name("output_dir")
|
Arg::with_name("output_dir")
|
||||||
.short("o")
|
.short("o")
|
||||||
.long("output-dir")
|
.long("output-dir")
|
||||||
.default_value("public")
|
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("Outputs the generated site in the given path"),
|
.help("Outputs the generated site in the given path"),
|
||||||
Arg::with_name("base_url")
|
Arg::with_name("base_url")
|
||||||
|
|
|
@ -9,11 +9,13 @@ pub fn build(
|
||||||
root_dir: &Path,
|
root_dir: &Path,
|
||||||
config_file: &Path,
|
config_file: &Path,
|
||||||
base_url: Option<&str>,
|
base_url: Option<&str>,
|
||||||
output_dir: &Path,
|
output_dir: Option<&Path>,
|
||||||
include_drafts: bool,
|
include_drafts: bool,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut site = Site::new(root_dir, config_file)?;
|
let mut site = Site::new(root_dir, config_file)?;
|
||||||
|
if let Some(output_dir) = output_dir {
|
||||||
site.set_output_path(output_dir);
|
site.set_output_path(output_dir);
|
||||||
|
}
|
||||||
if let Some(b) = base_url {
|
if let Some(b) = base_url {
|
||||||
site.set_base_url(b.to_string());
|
site.set_base_url(b.to_string());
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,11 +22,11 @@
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
use std::fs::{read_dir, remove_dir_all};
|
use std::fs::{read_dir, remove_dir_all};
|
||||||
|
use std::net::{SocketAddrV4, TcpListener};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
use std::net::{SocketAddrV4, TcpListener};
|
|
||||||
|
|
||||||
use hyper::header;
|
use hyper::header;
|
||||||
use hyper::service::{make_service_fn, service_fn};
|
use hyper::service::{make_service_fn, service_fn};
|
||||||
|
@ -173,7 +173,7 @@ fn create_new_site(
|
||||||
root_dir: &Path,
|
root_dir: &Path,
|
||||||
interface: &str,
|
interface: &str,
|
||||||
interface_port: u16,
|
interface_port: u16,
|
||||||
output_dir: &Path,
|
output_dir: Option<&Path>,
|
||||||
base_url: &str,
|
base_url: &str,
|
||||||
config_file: &Path,
|
config_file: &Path,
|
||||||
include_drafts: bool,
|
include_drafts: bool,
|
||||||
|
@ -192,7 +192,9 @@ fn create_new_site(
|
||||||
|
|
||||||
site.enable_serve_mode();
|
site.enable_serve_mode();
|
||||||
site.set_base_url(base_url);
|
site.set_base_url(base_url);
|
||||||
|
if let Some(output_dir) = output_dir {
|
||||||
site.set_output_path(output_dir);
|
site.set_output_path(output_dir);
|
||||||
|
}
|
||||||
if include_drafts {
|
if include_drafts {
|
||||||
site.include_drafts();
|
site.include_drafts();
|
||||||
}
|
}
|
||||||
|
@ -212,7 +214,7 @@ pub fn serve(
|
||||||
root_dir: &Path,
|
root_dir: &Path,
|
||||||
interface: &str,
|
interface: &str,
|
||||||
interface_port: u16,
|
interface_port: u16,
|
||||||
output_dir: &Path,
|
output_dir: Option<&Path>,
|
||||||
base_url: &str,
|
base_url: &str,
|
||||||
config_file: &Path,
|
config_file: &Path,
|
||||||
watch_only: bool,
|
watch_only: bool,
|
||||||
|
@ -277,7 +279,7 @@ pub fn serve(
|
||||||
|
|
||||||
let ws_port = site.live_reload;
|
let ws_port = site.live_reload;
|
||||||
let ws_address = format!("{}:{}", interface, ws_port.unwrap());
|
let ws_address = format!("{}:{}", interface, ws_port.unwrap());
|
||||||
let output_path = Path::new(output_dir).to_path_buf();
|
let output_path = site.output_path.clone();
|
||||||
|
|
||||||
// output path is going to need to be moved later on, so clone it for the
|
// output path is going to need to be moved later on, so clone it for the
|
||||||
// http closure to avoid contention.
|
// http closure to avoid contention.
|
||||||
|
|
10
src/main.rs
10
src/main.rs
|
@ -1,5 +1,5 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use utils::net::{get_available_port, port_is_available};
|
use utils::net::{get_available_port, port_is_available};
|
||||||
|
@ -37,12 +37,12 @@ fn main() {
|
||||||
("build", Some(matches)) => {
|
("build", Some(matches)) => {
|
||||||
console::info("Building site...");
|
console::info("Building site...");
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let output_dir = PathBuf::from(matches.value_of("output_dir").unwrap());
|
let output_dir = matches.value_of("output_dir").map(|output_dir| Path::new(output_dir));
|
||||||
match cmd::build(
|
match cmd::build(
|
||||||
&root_dir,
|
&root_dir,
|
||||||
&config_file,
|
&config_file,
|
||||||
matches.value_of("base_url"),
|
matches.value_of("base_url"),
|
||||||
&output_dir,
|
output_dir,
|
||||||
matches.is_present("drafts"),
|
matches.is_present("drafts"),
|
||||||
) {
|
) {
|
||||||
Ok(()) => console::report_elapsed_time(start),
|
Ok(()) => console::report_elapsed_time(start),
|
||||||
|
@ -80,14 +80,14 @@ fn main() {
|
||||||
::std::process::exit(1);
|
::std::process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let output_dir = PathBuf::from(matches.value_of("output_dir").unwrap());
|
let output_dir = matches.value_of("output_dir").map(|output_dir| Path::new(output_dir));
|
||||||
let base_url = matches.value_of("base_url").unwrap();
|
let base_url = matches.value_of("base_url").unwrap();
|
||||||
console::info("Building site...");
|
console::info("Building site...");
|
||||||
match cmd::serve(
|
match cmd::serve(
|
||||||
&root_dir,
|
&root_dir,
|
||||||
interface,
|
interface,
|
||||||
port,
|
port,
|
||||||
&output_dir,
|
output_dir,
|
||||||
base_url,
|
base_url,
|
||||||
&config_file,
|
&config_file,
|
||||||
watch_only,
|
watch_only,
|
||||||
|
|
Loading…
Reference in a new issue