diff options
Diffstat (limited to 'src/command')
| -rw-r--r-- | src/command/generate.rs | 8 | ||||
| -rw-r--r-- | src/command/publish.rs | 25 | ||||
| -rw-r--r-- | src/command/publish_archive.rs | 25 |
3 files changed, 53 insertions, 5 deletions
diff --git a/src/command/generate.rs b/src/command/generate.rs index c8c5673..cc9e401 100644 --- a/src/command/generate.rs +++ b/src/command/generate.rs @@ -5,6 +5,7 @@ use crate::configuration::Configuration; use crate::constants::METADATA_FILENAME; use crate::gemini_parser::parse; use crate::generator::generate; +use crate::archiver::archive; use crate::metadata::Metadata; use crate::post::Post; @@ -18,7 +19,7 @@ impl Generate { fn read_posts(&self, posts_directory: &PathBuf, max_posts: u8) -> Vec<Post> { let mut posts = Vec::new(); - for i in 0..max_posts - 1 { + for i in 0..max_posts { let post_directory = posts_directory.join(i.to_string()); match self.read_post(&post_directory, i) { Some(post) => posts.push(post), @@ -82,6 +83,11 @@ impl super::Command for Generate { let _ = remove_dir_all(&configuration.archive_output_directory); create_dir_all(&configuration.archive_output_directory)?; + archive( + &configuration.archive_directory, + &configuration.templates_directory, + &configuration.archive_output_directory + )?; return Ok(()) } diff --git a/src/command/publish.rs b/src/command/publish.rs index 881c987..207b45d 100644 --- a/src/command/publish.rs +++ b/src/command/publish.rs @@ -1,5 +1,8 @@ use std::io::Result; use crate::configuration::Configuration; +use std::process::{Command, Stdio}; + +const COMMAND: &str = "rsync"; pub struct Publish; @@ -14,8 +17,26 @@ impl super::Command for Publish { vec![] } - fn execute(&self, input: Option<&String>, _: &Configuration, _: &String) -> Result<()> { - println!("Publish: {:?}!", input); + fn execute(&self, input: Option<&String>, configuration: &Configuration, _: &String) -> Result<()> { + + let input = input.expect("You must provide a location to publish the blog"); + + Command::new(COMMAND) + .arg("--version") + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .expect("Publishing requires rsync"); + + + Command::new(COMMAND) + .arg("-r") + .arg(format!("{}/", &configuration.blog_output_directory.display())) + .arg(input.as_str()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .expect("Publishing requires rsync"); return Ok(()) } diff --git a/src/command/publish_archive.rs b/src/command/publish_archive.rs index f5f114a..075421f 100644 --- a/src/command/publish_archive.rs +++ b/src/command/publish_archive.rs @@ -1,5 +1,8 @@ use std::io::Result; use crate::configuration::Configuration; +use std::process::{Command, Stdio}; + +const COMMAND: &str = "rsync"; pub struct PublishArchive; @@ -14,8 +17,26 @@ impl super::Command for PublishArchive { vec![] } - fn execute(&self, input: Option<&String>, _: &Configuration, _: &String) -> Result<()> { - println!("Publish Archive: {:?}!", input); + fn execute(&self, input: Option<&String>, configuration: &Configuration, _: &String) -> Result<()> { + + let input = input.expect("You must provide a location to publish the archive"); + + Command::new(COMMAND) + .arg("--version") + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .expect("Publishing requires rsync"); + + + Command::new(COMMAND) + .arg("-r") + .arg(format!("{}/", &configuration.archive_output_directory.display())) + .arg(input.as_str()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .expect("Publishing requires rsync"); return Ok(()) } |