aboutsummaryrefslogtreecommitdiff
path: root/src/command
diff options
context:
space:
mode:
Diffstat (limited to 'src/command')
-rw-r--r--src/command/generate.rs8
-rw-r--r--src/command/publish.rs25
-rw-r--r--src/command/publish_archive.rs25
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(())
}