Use run function for commands where possible

This commit is contained in:
Leonard Steppy 2025-01-08 10:24:15 +01:00
parent 0c56e837d4
commit fefdffe1e9
2 changed files with 21 additions and 31 deletions

View File

@ -7,6 +7,7 @@ use std::iter::once;
use std::process::{Command, ExitStatus, Stdio};
pub trait LogRunnable {
//TODO add function to query output on success, could further improve code readability
fn run(&mut self, logger: &Logger) -> Result<(), SpecificExecutionError>;
}

View File

@ -1,11 +1,12 @@
mod action;
mod command;
mod file;
mod logger;
mod os_string_builder;
mod server;
mod command;
use crate::action::{Action, FileAction, ServerActions};
use crate::command::LogRunnable;
use crate::file::{FileMatcher, FileNameInfo};
use crate::logger::{LogLevel, Logger};
use crate::os_string_builder::ReplaceWithOsStr;
@ -160,7 +161,7 @@ fn main() -> Result<(), String> {
file_name,
} => {
require_non_empty_servers(&servers)?;
start_ssh_agent()?;
start_ssh_agent(&logger)?;
let file_name_info =
FileNameInfo::try_from(file.clone()).map_err(|e| format!("bad file: {e}"))?;
@ -275,19 +276,15 @@ fn main() -> Result<(), String> {
ShellCmd::new("scp")
.arg(file.clone())
.arg(osf!(&server.ssh_name) + ":" + &server_actions.working_directory)
.spawn()
.map_err(|e| format!("failed to upload file: {e}"))?
.wait()
.map_err(|e| format!("failed to wait for upload: {e}"))?;
.run(&logger)
.map_err(|e| format!("upload failure: {e}"))?;
}
Action::Delete => {
ShellCmd::new("ssh")
.arg(&server.ssh_name)
.arg(osf!("cd ") + &server_actions.working_directory + "; rm " + &file_action.file)
.spawn()
.map_err(|e| format!("failed to send delete command: {e}"))?
.wait()
.map_err(|e| format!("failed to wait for delete command: {e}"))?;
.run(&logger)
.map_err(|e| format!("failed to delete old version: {e}"))?;
}
Action::Rename { new_name } => {
ShellCmd::new("ssh")
@ -300,10 +297,8 @@ fn main() -> Result<(), String> {
+ " "
+ new_name,
)
.spawn()
.map_err(|e| format!("failed to send rename command: {e}"))?
.wait()
.map_err(|e| format!("failed to wait for rename command: {e}"))?;
.run(&logger)
.map_err(|e| format!("failed to rename: {e}"))?;
}
}
}
@ -312,17 +307,15 @@ fn main() -> Result<(), String> {
log!(logger, "Done!");
}
Command::Command { command } => {
start_ssh_agent()?;
start_ssh_agent(&logger)?;
require_non_empty_servers(&servers)?;
for server in servers {
log!(logger, "Running command on '{}'...", server.ssh_name);
ShellCmd::new("ssh")
.arg(server.ssh_name)
.arg(osf!("cd ") + server.server_directory_path + "; " + &command)
.spawn()
.map_err(|_| "failed to start ssh command".to_string())?
.wait()
.map_err(|e| format!("failed to wait for ssh command completion: {e}"))?;
.run(&logger)
.map_err(|e| format!("{e}"))?;
}
log!(logger, "Done!");
}
@ -358,15 +351,15 @@ fn main() -> Result<(), String> {
}
require_non_empty_servers(&servers)?;
start_ssh_agent()?;
start_ssh_agent(&logger)?;
for server in servers {
log!(logger, "Downloading file from {}...", server.ssh_name);
ShellCmd::new("scp")
.arg(osf!(&server.ssh_name) + ":" + server.server_directory_path.join(&file))
.arg(&working_directory)
.status()
.map_err(|e| format!("failed to download file: {e}"))?;
.run(&logger)
.map_err(|e| format!("download failure: {e}"))?;
//open file in editor
let mut shell_args = shell_words::split(&editor)
@ -378,15 +371,15 @@ fn main() -> Result<(), String> {
let command = shell_args.remove(0);
ShellCmd::new(command)
.args(shell_args)
.status()
.run(&logger)
.map_err(|e| format!("failed to open file in editor: {e}"))?;
//upload file again
ShellCmd::new("scp")
.arg(working_directory.join(file_name))
.arg(osf!(&server.ssh_name) + ":" + server.server_directory_path.join(&file))
.status()
.map_err(|e| format!("failed to upload file again: {e}"))?;
.run(&logger)
.map_err(|e| format!("failed to re-upload file: {e}"))?;
}
log!(logger, "Done!");
@ -404,7 +397,7 @@ fn require_non_empty_servers(servers: &[Server]) -> Result<(), String> {
}
}
fn start_ssh_agent() -> Result<(), String> {
fn start_ssh_agent(logger: &Logger) -> Result<(), String> {
//start the ssh agent
let agent_output = ShellCmd::new("ssh-agent")
.arg("-s")
@ -424,11 +417,7 @@ fn start_ssh_agent() -> Result<(), String> {
}
//add the ssh key
ShellCmd::new("ssh-add")
.spawn()
.map_err(|e| format!("failed to add ssh key: {}", e))?
.wait()
.expect("failed to wait on ssh-add");
ShellCmd::new("ssh-add").run(logger).map_err(|e| format!("failed to add ssh-key: {e}"))?;
Ok(())
}