Add orphan in print notice and fix orphan with assets and url
This commit is contained in:
parent
f3edef2640
commit
c989ab607c
|
@ -11,7 +11,12 @@ use gutenberg::Site;
|
|||
use console::warn;
|
||||
|
||||
fn notify_site_size(site: &Site) {
|
||||
println!("-> Creating {} pages and {} sections", site.pages.len(), site.sections.len());
|
||||
println!(
|
||||
"-> Creating {} pages ({} orphan) and {} sections",
|
||||
site.pages.len(),
|
||||
site.get_all_orphan_pages().len(),
|
||||
site.sections.len()
|
||||
);
|
||||
}
|
||||
|
||||
fn warn_about_ignored_pages(site: &Site) {
|
||||
|
|
16
src/page.rs
16
src/page.rs
|
@ -143,23 +143,27 @@ impl Page {
|
|||
|
||||
// 4. Find sections
|
||||
// Pages with custom urls exists outside of sections
|
||||
let mut path_set = false;
|
||||
if let Some(ref u) = page.meta.url {
|
||||
page.path = u.trim().to_string();
|
||||
} else if !page.components.is_empty() {
|
||||
path_set = true;
|
||||
}
|
||||
|
||||
if !page.components.is_empty() {
|
||||
// If we have a folder with an asset, don't consider it as a component
|
||||
if page.file_name == "index" {
|
||||
page.components.pop();
|
||||
// also set parent_path to grandparent instead
|
||||
page.parent_path = page.parent_path.parent().unwrap().to_path_buf();
|
||||
}
|
||||
|
||||
// Don't add a trailing slash to sections
|
||||
page.path = format!("{}/{}", page.components.join("/"), page.slug);
|
||||
} else {
|
||||
if !path_set {
|
||||
// Don't add a trailing slash to sections
|
||||
page.path = format!("{}/{}", page.components.join("/"), page.slug);
|
||||
}
|
||||
} else if !path_set {
|
||||
page.path = page.slug.clone();
|
||||
}
|
||||
|
||||
|
||||
page.permalink = config.make_permalink(&page.path);
|
||||
|
||||
Ok(page)
|
||||
|
|
29
src/site.rs
29
src/site.rs
|
@ -122,6 +122,7 @@ impl Site {
|
|||
self.live_reload = true;
|
||||
}
|
||||
|
||||
/// Gets the path of all ignored pages in the site
|
||||
pub fn get_ignored_pages(&self) -> Vec<PathBuf> {
|
||||
self.sections
|
||||
.values()
|
||||
|
@ -129,6 +130,24 @@ impl Site {
|
|||
.collect()
|
||||
}
|
||||
|
||||
/// Get all the orphan (== without section) pages in the site
|
||||
pub fn get_all_orphan_pages(&self) -> Vec<&Page> {
|
||||
let mut pages_in_sections = vec![];
|
||||
let mut orphans = vec![];
|
||||
|
||||
for s in self.sections.values() {
|
||||
pages_in_sections.extend(s.all_pages_path());
|
||||
}
|
||||
|
||||
for page in self.pages.values() {
|
||||
if !pages_in_sections.contains(&page.file_path) {
|
||||
orphans.push(page);
|
||||
}
|
||||
}
|
||||
|
||||
orphans
|
||||
}
|
||||
|
||||
/// Used by tests to change the output path to a tmp dir
|
||||
#[doc(hidden)]
|
||||
pub fn set_output_path<P: AsRef<Path>>(&mut self, path: P) {
|
||||
|
@ -589,15 +608,9 @@ impl Site {
|
|||
/// Renders all pages that do not belong to any sections
|
||||
fn render_orphan_pages(&self) -> Result<()> {
|
||||
self.ensure_public_directory_exists()?;
|
||||
let mut pages_in_sections = vec![];
|
||||
for s in self.sections.values() {
|
||||
pages_in_sections.extend(s.all_pages_path());
|
||||
}
|
||||
|
||||
for page in self.pages.values() {
|
||||
if !pages_in_sections.contains(&page.file_path) {
|
||||
self.render_page(page)?;
|
||||
}
|
||||
for page in self.get_all_orphan_pages() {
|
||||
self.render_page(page)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -3,7 +3,7 @@ extern crate tera;
|
|||
extern crate tempdir;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::fs::{File, create_dir};
|
||||
use std::path::Path;
|
||||
|
||||
use tempdir::TempDir;
|
||||
|
@ -252,6 +252,29 @@ Hey there
|
|||
assert!(page.content.starts_with("<pre"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_page_with_assets_gets_right_parent_path() {
|
||||
let tmp_dir = TempDir::new("example").expect("create temp dir");
|
||||
let path = tmp_dir.path();
|
||||
create_dir(&path.join("content")).expect("create content temp dir");
|
||||
create_dir(&path.join("content").join("posts")).expect("create posts temp dir");
|
||||
let nested_path = path.join("content").join("posts").join("assets");
|
||||
create_dir(&nested_path).expect("create nested temp dir");
|
||||
File::create(nested_path.join("index.md")).unwrap();
|
||||
File::create(nested_path.join("example.js")).unwrap();
|
||||
File::create(nested_path.join("graph.jpg")).unwrap();
|
||||
File::create(nested_path.join("fail.png")).unwrap();
|
||||
|
||||
let res = Page::parse(
|
||||
&nested_path.join("index.md").as_path(),
|
||||
"+++\nurl=\"hey\"+++\n",
|
||||
&Config::default()
|
||||
);
|
||||
assert!(res.is_ok());
|
||||
let page = res.unwrap();
|
||||
assert_eq!(page.parent_path, path.join("content").join("posts"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_file_not_named_index_with_assets() {
|
||||
let tmp_dir = TempDir::new("example").expect("create temp dir");
|
||||
|
|
Loading…
Reference in a new issue