diff options
author | Lars Wirzenius <liw@liw.fi> | 2022-08-05 14:01:47 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2022-08-05 14:01:47 +0000 |
commit | aacb704f8cc7e227b9a301a74d879957f4af766a (patch) | |
tree | 460752d8e864237774947a3515bcb35435b3dc2e /src/site.rs | |
parent | b45262174d06b15b7a888e6bcad42f6685ba89a2 (diff) | |
parent | d9f66f00a5898b4a3cf2ea8ada9a2d08f34c670e (diff) | |
download | riki-aacb704f8cc7e227b9a301a74d879957f4af766a.tar.gz |
Merge branch 'git-ts' into 'main'
add src/git.rs
Closes #3
See merge request larswirzenius/riki!35
Diffstat (limited to 'src/site.rs')
-rw-r--r-- | src/site.rs | 15 |
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()); |