Skip to content

Commit b4779a2

Browse files
fix: escaped dollar signs
1 parent b5e94bc commit b4779a2

1 file changed

Lines changed: 30 additions & 20 deletions

File tree

crates/stackable-operator/src/v2/builder/pod/container.rs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ use crate::{
1919
},
2020
};
2121

22-
/// Pattern for an escaped environment variable reference, e.g. `$$(ESCAPED_REFERENCE)`
23-
static ESCAPED_ENV_VARS_PATTERN: LazyLock<Regex> =
24-
LazyLock::new(|| Regex::new(r"\$\$\([^\)]*\)").expect("should be a valid regular expression"));
22+
/// Pattern for an escaped dollar sign, e.g. `$$`
23+
static ESCAPED_DOLLAR_SIGN_PATTERN: LazyLock<Regex> =
24+
LazyLock::new(|| Regex::new(r"\$\$").expect("should be a valid regular expression"));
2525

2626
/// Pattern for a referenced environment variable, e.g. `$(ENV_VAR)`
2727
static REFERENCED_ENV_VARS_PATTERN: LazyLock<Regex> =
@@ -170,10 +170,10 @@ impl EnvVarSet {
170170

171171
impl From<EnvVarSet> for Vec<EnvVar> {
172172
fn from(value: EnvVarSet) -> Self {
173-
let mut env_var_closure = EnvVarDependencyResolver::new(&value, 10);
173+
let env_var_closure = EnvVarDependencyResolver::new(&value, 10);
174174

175175
let mut vec: Self = value.0.values().cloned().collect();
176-
vec.sort_by_cached_key(|env_var| env_var_closure.sort_key(env_var));
176+
vec.sort_by_key(|env_var| env_var_closure.sort_key(env_var));
177177
vec
178178
}
179179
}
@@ -222,7 +222,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
222222
/// # EnvVar, EnvVarSource, ObjectFieldSelector
223223
/// # },
224224
/// # v2::builder::pod::container::{
225-
/// # EnvVarDependencyResolver, EnvVarName, EnvVarSet
225+
/// # EnvVarDependencyResolver, EnvVarSet
226226
/// # },
227227
/// # };
228228
///
@@ -270,7 +270,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
270270
/// .with_env_var(env_var5.clone())
271271
/// .unwrap();
272272
///
273-
/// let mut resolver = EnvVarDependencyResolver::new(&env_vars, 2);
273+
/// let resolver = EnvVarDependencyResolver::new(&env_vars, 2);
274274
/// assert_eq!(
275275
/// vec!["ENV4".to_owned(), "ENV2".to_owned(), "ENV1".to_owned()],
276276
/// resolver.sort_key(&env_var1)
@@ -286,7 +286,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
286286
/// assert_eq!(vec!["ENV4".to_owned()], resolver.sort_key(&env_var4));
287287
/// assert_eq!(vec!["ENV5".to_owned()], resolver.sort_key(&env_var5));
288288
/// ```
289-
pub fn sort_key(&mut self, env_var: &EnvVar) -> Vec<String> {
289+
pub fn sort_key(&self, env_var: &EnvVar) -> Vec<String> {
290290
if let Some(mut closure) = self.calculate_closure(env_var) {
291291
// Add the name of the variable to its closure to make the set unique for every
292292
// variable.
@@ -315,7 +315,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
315315
/// # EnvVar, EnvVarSource, ObjectFieldSelector
316316
/// # },
317317
/// # v2::builder::pod::container::{
318-
/// # EnvVarDependencyResolver, EnvVarName, EnvVarSet
318+
/// # EnvVarDependencyResolver, EnvVarSet
319319
/// # },
320320
/// # };
321321
///
@@ -384,7 +384,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
384384
/// .with_env_var(env_var8.clone())
385385
/// .unwrap();
386386
///
387-
/// let mut resolver = EnvVarDependencyResolver::new(&env_vars, 2);
387+
/// let resolver = EnvVarDependencyResolver::new(&env_vars, 2);
388388
/// assert_eq!(
389389
/// Some(BTreeSet::from(["ENV2".to_owned(), "ENV4".to_owned()])),
390390
/// resolver.calculate_closure(&env_var1)
@@ -403,12 +403,12 @@ impl<'a> EnvVarDependencyResolver<'a> {
403403
/// assert_eq!(None, resolver.calculate_closure(&env_var7));
404404
/// assert_eq!(None, resolver.calculate_closure(&env_var8));
405405
/// ```
406-
pub fn calculate_closure(&mut self, env_var: &EnvVar) -> Option<BTreeSet<String>> {
406+
pub fn calculate_closure(&self, env_var: &EnvVar) -> Option<BTreeSet<String>> {
407407
self.calculate_closure_rec(env_var, self.max_recursion_depth)
408408
}
409409

410410
fn calculate_closure_rec(
411-
&mut self,
411+
&self,
412412
env_var: &EnvVar,
413413
remaining_recursion_depth: usize,
414414
) -> Option<BTreeSet<String>> {
@@ -449,6 +449,7 @@ impl<'a> EnvVarDependencyResolver<'a> {
449449
/// (EnvVarName::from_str("ENV1").unwrap(), "value 1"),
450450
/// (EnvVarName::from_str("ENV2").unwrap(), "value 2"),
451451
/// (EnvVarName::from_str("ENV3").unwrap(), "value 3"),
452+
/// (EnvVarName::from_str("ENV4").unwrap(), "value 4"),
452453
/// ]);
453454
///
454455
/// let resolver = EnvVarDependencyResolver::new(&env_vars, 10);
@@ -473,24 +474,33 @@ impl<'a> EnvVarDependencyResolver<'a> {
473474
/// resolver.referenced_env_vars("references to $(ENV2) and $(ENV3)")
474475
/// );
475476
/// assert_eq!(
476-
/// vec![&EnvVar {
477-
/// name: "ENV1".to_owned(),
478-
/// value: Some("value 1".to_owned()),
479-
/// value_from: None
480-
/// }],
481-
/// resolver.referenced_env_vars("reference to $(ENV1) and escaped reference to $$(ENV2)")
477+
/// vec![
478+
/// &EnvVar {
479+
/// name: "ENV1".to_owned(),
480+
/// value: Some("value 1".to_owned()),
481+
/// value_from: None
482+
/// },
483+
/// &EnvVar {
484+
/// name: "ENV2".to_owned(),
485+
/// value: Some("value 2".to_owned()),
486+
/// value_from: None
487+
/// },
488+
/// ],
489+
/// resolver.referenced_env_vars(
490+
/// "references to $(ENV1) and $$$(ENV2) and escaped references to $$(ENV3) and $$$$(ENV4)"
491+
/// )
482492
/// );
483493
/// assert_eq!(
484494
/// vec![&EnvVar {
485495
/// name: "ENV1".to_owned(),
486496
/// value: Some("value 1".to_owned()),
487497
/// value_from: None
488498
/// }],
489-
/// resolver.referenced_env_vars("reference to $(ENV1) and invalid reference to $(ENV4)")
499+
/// resolver.referenced_env_vars("reference to $(ENV1) and invalid reference to $(ENV5)")
490500
/// );
491501
/// ```
492502
pub fn referenced_env_vars(&self, value: &str) -> Vec<&'a EnvVar> {
493-
let value_without_escapes = ESCAPED_ENV_VARS_PATTERN.replace_all(value, "");
503+
let value_without_escapes = ESCAPED_DOLLAR_SIGN_PATTERN.replace_all(value, "");
494504

495505
REFERENCED_ENV_VARS_PATTERN
496506
.captures_iter(&value_without_escapes)

0 commit comments

Comments
 (0)