summaryrefslogtreecommitdiff
path: root/src/site.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.rs')
-rw-r--r--src/site.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/site.rs b/src/site.rs
index 2d1368d..3200b58 100644
--- a/src/site.rs
+++ b/src/site.rs
@@ -1,4 +1,5 @@
use crate::error::SiteError;
+use crate::git::git_whatchanged;
use crate::name::{Name, NameBuilder, Names};
use crate::page::{MarkdownPage, UnprocessedPage, WikitextPage};
use crate::parser::WikitextParser;
@@ -7,6 +8,7 @@ use crate::util::make_relative_link;
use log::{debug, info, trace};
use std::collections::HashMap;
use std::path::{Path, PathBuf};
+use std::time::SystemTime;
use walkdir::WalkDir;
pub struct Site {
@@ -18,6 +20,7 @@ pub struct Site {
patterns: TokenPatterns,
name_queue: Vec<Name>,
page_queue: PageSet,
+ whatchanged: HashMap<PathBuf, SystemTime>,
}
impl Site {
@@ -37,10 +40,12 @@ impl Site {
patterns: TokenPatterns::default(),
name_queue: vec![],
page_queue: PageSet::default(),
+ whatchanged: HashMap::new(),
}
}
pub fn scan(&mut self) -> Result<(), SiteError> {
+ self.whatchanged = git_whatchanged(self.builder.srcdir())?;
for name in self.all_files()? {
trace!("scan: name={}", name);
if name.is_wikitext_page() {
@@ -85,7 +90,10 @@ impl Site {
fn process_name(&mut self) -> Result<bool, SiteError> {
if let Some(name) = self.name_queue.pop() {
debug!("loading wikitext page {}", name.source_path().display());
- let page = WikitextPage::read(&name)?;
+ let mut page = WikitextPage::read(&name)?;
+ if let Some(mtime) = self.git_commit_timestamp(&name) {
+ page.meta_mut().set_mtime(mtime);
+ }
self.files.insert(name);
self.add_wikitextpage(page);
Ok(true)
@@ -95,6 +103,11 @@ impl Site {
}
}
+ fn git_commit_timestamp(&self, name: &Name) -> Option<SystemTime> {
+ let relative = name.source_path().strip_prefix(&self.builder.srcdir()).unwrap();
+ self.whatchanged.get(relative).copied()
+ }
+
fn process_wikipage(&mut self) -> Result<bool, SiteError> {
if let Some(page) = self.wikitext_pages.pop() {
debug!("processing wikitext page {}", page.meta().path().display());