@@ -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)`
2727static REFERENCED_ENV_VARS_PATTERN : LazyLock < Regex > =
@@ -170,10 +170,10 @@ impl EnvVarSet {
170170
171171impl 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