From 339f33331850d8d6a740e8cf3886665353924d53 Mon Sep 17 00:00:00 2001 From: Arne Beer Date: Tue, 16 Aug 2022 10:01:13 +0200 Subject: [PATCH] add: Use new shared.alias_file config --- CHANGELOG.md | 1 + daemon/network/message_handler/add.rs | 4 +++ daemon/network/message_handler/edit.rs | 2 +- daemon/network/message_handler/mod.rs | 7 +++-- daemon/network/message_handler/restart.rs | 13 ++++++-- lib/src/aliasing.rs | 37 +++++++++-------------- lib/src/task.rs | 8 ++--- 7 files changed, 37 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d29d9dab..d27ae41f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Show a hint when calling `pueue log` if the task output has been truncated. [#318](https://github.com/Nukesor/pueue/issues/318) +- Add `Settings.shared.alias_file`, which allows to set the location of the `pueue_aliases.yml` file. ### Fixed diff --git a/daemon/network/message_handler/add.rs b/daemon/network/message_handler/add.rs index cfeda5b3..f44a1411 100644 --- a/daemon/network/message_handler/add.rs +++ b/daemon/network/message_handler/add.rs @@ -1,5 +1,6 @@ use crossbeam_channel::Sender; +use pueue_lib::aliasing::insert_alias; use pueue_lib::network::message::*; use pueue_lib::state::{GroupStatus, SharedState}; use pueue_lib::task::{Task, TaskStatus}; @@ -52,6 +53,9 @@ pub fn add_task( message.dependencies, message.label, ); + // Insert the client alias if we applicable. + task.command = insert_alias(settings, task.original_command.clone()); + // Sort and deduplicate dependency id. task.dependencies.sort_unstable(); task.dependencies.dedup(); diff --git a/daemon/network/message_handler/edit.rs b/daemon/network/message_handler/edit.rs index 8343276c..62aee91a 100644 --- a/daemon/network/message_handler/edit.rs +++ b/daemon/network/message_handler/edit.rs @@ -45,7 +45,7 @@ pub fn edit(message: EditMessage, state: &SharedState, settings: &Settings) -> M task.status = task.prev_status.clone(); task.original_command = message.command.clone(); - task.command = insert_alias(message.command.clone()); + task.command = insert_alias(settings, message.command.clone()); task.path = message.path.clone(); ok_or_return_failure_message!(save_state(&state, settings)); diff --git a/daemon/network/message_handler/mod.rs b/daemon/network/message_handler/mod.rs index c903b7ad..bd3afaf7 100644 --- a/daemon/network/message_handler/mod.rs +++ b/daemon/network/message_handler/mod.rs @@ -1,8 +1,9 @@ -use crossbeam_channel::Sender; -use pueue_lib::settings::Settings; use std::fmt::Display; +use crossbeam_channel::Sender; + use pueue_lib::network::message::*; +use pueue_lib::settings::Settings; use pueue_lib::state::SharedState; use crate::network::response_helper::*; @@ -45,7 +46,7 @@ pub fn handle_message( Message::Pause(message) => pause::pause(message, sender, state), Message::Remove(task_ids) => remove::remove(task_ids, state, settings), Message::Reset(message) => reset(message, sender), - Message::Restart(message) => restart::restart_multiple(message, sender, state), + Message::Restart(message) => restart::restart_multiple(message, sender, state, settings), Message::Send(message) => send::send(message, sender, state), Message::Start(message) => start::start(message, sender, state), Message::Stash(task_ids) => stash::stash(task_ids, state), diff --git a/daemon/network/message_handler/restart.rs b/daemon/network/message_handler/restart.rs index 78a319d5..6dd1a0ba 100644 --- a/daemon/network/message_handler/restart.rs +++ b/daemon/network/message_handler/restart.rs @@ -1,4 +1,5 @@ use crossbeam_channel::Sender; +use pueue_lib::settings::Settings; use std::sync::MutexGuard; use pueue_lib::aliasing::insert_alias; @@ -16,6 +17,7 @@ pub fn restart_multiple( message: RestartMessage, sender: &Sender, state: &SharedState, + settings: &Settings, ) -> Message { let task_ids: Vec = message.tasks.iter().map(|task| task.task_id).collect(); let mut state = state.lock().unwrap(); @@ -31,7 +33,7 @@ pub fn restart_multiple( // Actually restart all tasks for task in message.tasks.iter() { - restart(&mut state, task, message.stashed); + restart(&mut state, task, message.stashed, settings); } // Tell the task manager to start the task immediately if requested. @@ -52,7 +54,12 @@ pub fn restart_multiple( /// /// The "not in-place" restart functionality is actually just a copy the finished task + create a /// new task, which is completely handled on the client-side. -fn restart(state: &mut MutexGuard, to_restart: &TasksToRestart, stashed: bool) { +fn restart( + state: &mut MutexGuard, + to_restart: &TasksToRestart, + stashed: bool, + settings: &Settings, +) { // Check if we actually know this task. let task = if let Some(task) = state.tasks.get_mut(&to_restart.task_id) { task @@ -74,7 +81,7 @@ fn restart(state: &mut MutexGuard, to_restart: &TasksToRestart, stashed: // Update command and path. task.original_command = to_restart.command.clone(); - task.command = insert_alias(to_restart.command.clone()); + task.command = insert_alias(settings, to_restart.command.clone()); task.path = to_restart.path.clone(); // Reset all variables of any previous run. diff --git a/lib/src/aliasing.rs b/lib/src/aliasing.rs index eecfbc28..8e4ea455 100644 --- a/lib/src/aliasing.rs +++ b/lib/src/aliasing.rs @@ -2,29 +2,21 @@ use std::collections::HashMap; use std::fs::File; use std::io::prelude::*; -use log::{info, warn}; +use log::info; -use crate::{error::Error, settings::configuration_directories}; +use crate::error::Error; +use crate::settings::Settings; /// Return the contents of the alias file, if it exists and can be parsed. \ /// The file has to be located in `pueue_directory` and named `pueue_aliases.yml`. -pub fn get_aliases() -> Result, Error> { +pub fn get_aliases(settings: &Settings) -> Result, Error> { // Go through all config directories and check for a alias file. - let mut alias_file_path = None; - for directory in configuration_directories() { - let path = directory.join("pueue_aliases.yml"); - if path.exists() { - alias_file_path = Some(path); - } - } + let path = settings.shared.alias_file(); // Return early if we cannot find the file - let path = match alias_file_path { - None => { - info!("Didn't find pueue alias file."); - return Ok(HashMap::new()); - } - Some(alias_file_path) => alias_file_path, + if !path.exists() { + info!("Didn't find pueue alias file at {path:?}."); + return Ok(HashMap::new()); }; // Read the file content @@ -42,24 +34,23 @@ pub fn get_aliases() -> Result, Error> { /// Check if there exists an alias for a given command. /// Only the first word will be replaced. -pub fn insert_alias(command: String) -> String { +pub fn insert_alias(settings: &Settings, command: String) -> String { + // Get the first word of the command. let first = match command.split_whitespace().next() { Some(first) => first, None => return command, }; - let aliases = match get_aliases() { + let aliases = match get_aliases(settings) { Err(err) => { - warn!("Failed to open aliases file: {err}"); + info!("Couldn't read aliases file: {err}"); return command; } Ok(aliases) => aliases, }; - for (original, alias) in aliases.iter() { - if original == first { - return command.replacen(original, alias, 1); - } + if let Some(alias) = aliases.get(first) { + return command.replacen(first, alias, 1); } command diff --git a/lib/src/task.rs b/lib/src/task.rs index 1bcb90c7..e95120fd 100644 --- a/lib/src/task.rs +++ b/lib/src/task.rs @@ -4,7 +4,7 @@ use chrono::prelude::*; use serde_derive::{Deserialize, Serialize}; use strum_macros::Display; -use crate::{aliasing::insert_alias, state::PUEUE_DEFAULT_GROUP}; +use crate::state::PUEUE_DEFAULT_GROUP; /// This enum represents the status of the internal task handling of Pueue. /// They basically represent the internal task life-cycle. @@ -77,12 +77,10 @@ impl Task { dependencies: Vec, label: Option, ) -> Task { - let command = insert_alias(original_command.clone()); - Task { id: 0, - original_command, - command, + original_command: original_command.clone(), + command: original_command, path, envs, group,