From bd08b37b8bd429e0e5c5817fb912fbc22566dcbf Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 25 Jul 2022 08:13:52 +0300 Subject: feat: "riki list" to list source files for a site Sponsored-by: author --- riki.md | 24 ++++++++++++++++++++++++ src/bin/riki.rs | 21 +++++++++++++++++++++ src/site.rs | 7 +++++++ 3 files changed, 52 insertions(+) diff --git a/riki.md b/riki.md index fa982b2..00637dc 100644 --- a/riki.md +++ b/riki.md @@ -445,3 +445,27 @@ then file output/index.html contains " Result<(), SiteError> { let args = Args::parse(); match args.command { Command::Build(cmd) => cmd.run()?, + Command::List(cmd) => cmd.run()?, } info!("riki ends OK"); @@ -47,6 +48,7 @@ struct Args { #[derive(Parser)] enum Command { Build(Build), + List(List) } #[derive(Parser)] @@ -92,3 +94,22 @@ impl Build { Ok(()) } } + +#[derive(Parser)] +struct List { + srcdir: PathBuf, +} + +impl List { + fn run(&self) -> Result<(), SiteError> { + let srcdir = canonicalize(&self.srcdir)?; + let mut site = Site::new(&srcdir, &srcdir); + site.scan()?; + let mut filenames = site.included_files().to_vec(); + filenames.sort_unstable(); + for filename in filenames { + println!("{}", filename.display()); + } + Ok(()) + } +} diff --git a/src/site.rs b/src/site.rs index 1a58801..1d1de60 100644 --- a/src/site.rs +++ b/src/site.rs @@ -13,6 +13,7 @@ pub struct Site { unprocessed_pages: Vec, markdown_pages: Vec, files: Vec, + included_files: Vec, patterns: TokenPatterns, srcdir: PathBuf, destdir: PathBuf, @@ -29,6 +30,7 @@ impl Site { unprocessed_pages: vec![], markdown_pages: vec![], files: vec![], + included_files: vec![], patterns: TokenPatterns::default(), srcdir: srcdir.as_ref().into(), destdir: destdir.as_ref().into(), @@ -38,6 +40,7 @@ impl Site { pub fn scan(&mut self) -> Result<(), SiteError> { for filename in Self::all_files(&self.srcdir)? { + self.included_files.push(make_path_relative_to(&self.srcdir, &filename)); if Self::is_markdown(&filename) { let page = WikitextPage::read(&self.srcdir, &filename)?; self.add_wikitextpage(page); @@ -104,6 +107,10 @@ impl Site { &self.files } + pub fn included_files(&self) -> &[PathBuf] { + &self.included_files + } + pub fn input_filename(&self, filename: &Path) -> Result { Ok(join_subpath(&self.srcdir, filename)) } -- cgit v1.2.1