From d66f4773bccaee61c1c998640dcdb048223f8900 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 8 Mar 2022 02:20:04 -0500 Subject: allow recursive aliases --- src/runner/mod.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/runner/mod.rs') diff --git a/src/runner/mod.rs b/src/runner/mod.rs index 6fcd28e..91e268a 100644 --- a/src/runner/mod.rs +++ b/src/runner/mod.rs @@ -263,10 +263,22 @@ async fn run_pipeline( let pipeline = pipeline.eval(env).await?; let mut exes: Vec<_> = pipeline.into_exes().collect(); for exe in &mut exes { - if let Some(alias) = config.alias_for(exe.exe()) { + let mut seen = std::collections::HashSet::new(); + while let Some(alias) = config.alias_for(exe.exe()) { let mut new = alias.clone().eval(env).await?; + let override_self = exe.exe() == new.exe(); + if seen.contains(new.exe()) { + return Err(anyhow!( + "recursive alias found: {}", + new.exe().display() + )); + } + seen.insert(new.exe().to_path_buf()); new.append(exe.clone()); *exe = new; + if override_self { + break; + } } } let cmds = exes -- cgit v1.2.3-54-g00ecf