Skip to main content

ubt_cli/commands/
alias.rs

1use std::process;
2
3use crate::config::UbtConfig;
4use crate::error::UbtError;
5use crate::executor::spawn_command;
6
7pub fn cmd_alias(ext_args: &[String], config: Option<&UbtConfig>) -> Result<(), UbtError> {
8    let alias_name = &ext_args[0];
9    let remaining = &ext_args[1..];
10
11    let cmd_str = config
12        .and_then(|cfg| cfg.aliases.get(alias_name))
13        .ok_or_else(|| UbtError::UnknownCommand {
14            name: alias_name.clone(),
15        })?;
16
17    let args_str = remaining.join(" ");
18    let expanded = if cmd_str.contains("{{args}}") {
19        cmd_str.replace("{{args}}", &args_str)
20    } else if remaining.is_empty() {
21        cmd_str.clone()
22    } else {
23        format!("{} {}", cmd_str, args_str)
24    };
25
26    let exit_code = spawn_command(&expanded, None)?;
27    process::exit(exit_code);
28}