diff options
author | Lars Wirzenius <liw@liw.fi> | 2022-07-25 08:13:52 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2022-07-25 08:45:22 +0300 |
commit | bd08b37b8bd429e0e5c5817fb912fbc22566dcbf (patch) | |
tree | dae3a480a633cd4ce8bb5297ab795bae4d7727a7 | |
parent | b08f50789bec1f9f0d7b4aa45177838b3bd2d24c (diff) | |
download | riki-bd08b37b8bd429e0e5c5817fb912fbc22566dcbf.tar.gz |
feat: "riki list" to list source files for a site
Sponsored-by: author
-rw-r--r-- | riki.md | 24 | ||||
-rw-r--r-- | src/bin/riki.rs | 21 | ||||
-rw-r--r-- | src/site.rs | 7 |
3 files changed, 52 insertions, 0 deletions
@@ -445,3 +445,27 @@ then file output/index.html contains "<img src="img.jpg"" ~~~{#jpeg .file} This is a dummy JPEG image. ~~~ + +## Source file tree + +### Listing source files + +_Requirement: source files can be listed._ + +~~~scenario +given an installed riki +given file site/index.mdwn from empty +given file site/img.jpg from empty +when I run riki list site +then stdout contains "img.jpg" +then stdout contains "index.mdwn" +~~~ + +### Exclude unusual files + +_Requirement: files and directories that aren't meant to be part of +the site content should be excluded._ + +~~~scenario +given an installed riki +~~~ diff --git a/src/bin/riki.rs b/src/bin/riki.rs index 9749e3b..1455b45 100644 --- a/src/bin/riki.rs +++ b/src/bin/riki.rs @@ -32,6 +32,7 @@ fn real_main() -> 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<UnprocessedPage>, markdown_pages: Vec<MarkdownPage>, files: Vec<PathBuf>, + included_files: Vec<PathBuf>, 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<PathBuf, SiteError> { Ok(join_subpath(&self.srcdir, filename)) } |