362362mod dep_info;
363363mod dirty_reason;
364364
365- use std:: cell:: OnceCell ;
366365use std:: collections:: hash_map:: { Entry , HashMap } ;
367366use std:: env;
368- use std:: ffi:: OsString ;
369367use std:: fs;
370368use std:: fs:: File ;
371369use std:: hash:: { self , Hash , Hasher } ;
@@ -382,10 +380,12 @@ use serde::de;
382380use serde:: ser;
383381use serde:: { Deserialize , Serialize } ;
384382use tracing:: { debug, info} ;
383+ use unicase:: Ascii as UncasedAscii ;
385384
386385use crate :: core:: compiler:: unit_graph:: UnitDep ;
387386use crate :: core:: Package ;
388387use crate :: util;
388+ use crate :: util:: context:: EnvConfigResolved ;
389389use crate :: util:: errors:: CargoResult ;
390390use crate :: util:: interning:: InternedString ;
391391use crate :: util:: { internal, path_args, StableHasher } ;
@@ -799,25 +799,19 @@ impl LocalFingerprint {
799799 /// Read the environment variable of the given env `key`, and creates a new
800800 /// [`LocalFingerprint::RerunIfEnvChanged`] for it.
801801 #[ allow( clippy:: disallowed_methods) ]
802- fn from_env < K : AsRef < str > > (
803- key : K ,
804- env_config : & Arc < HashMap < String , OsString > > ,
805- env_config_insensitive : & Arc < OnceCell < HashMap < String , OsString > > > ,
806- ) -> LocalFingerprint {
802+ fn from_env < K : AsRef < str > > ( key : K , env_config : & Arc < EnvConfigResolved > ) -> LocalFingerprint {
807803 let key = key. as_ref ( ) ;
808804 let var = key. to_owned ( ) ;
809- let val = if let Some ( val) = match env_config. get ( key) {
805+ let val = if let Some ( val) = match env_config. env . get ( key) {
810806 Some ( value) => value. to_str ( ) . map ( |s| s. to_owned ( ) ) ,
811807 None => {
812808 if cfg ! ( windows) {
813- env_config_insensitive
814- . get_or_init ( || {
815- env_config
816- . iter ( )
817- . map ( |( k, v) | ( k. to_uppercase ( ) . clone ( ) , v. clone ( ) ) )
818- . collect ( )
809+ env_config
810+ . case_insensitive_env
811+ . as_ref ( )
812+ . and_then ( |case_insensitive_env| {
813+ case_insensitive_env. get ( & UncasedAscii :: new ( key. to_owned ( ) ) )
819814 } )
820- . get ( & key. to_uppercase ( ) )
821815 . and_then ( |s| s. to_str ( ) . map ( |s| s. to_owned ( ) ) )
822816 } else {
823817 None
@@ -872,7 +866,7 @@ impl LocalFingerprint {
872866 )
873867 } ) ?)
874868 } else {
875- if let Some ( value) = gctx. env_config ( ) ?. get ( key) {
869+ if let Some ( value) = gctx. env_config ( ) ?. env . get ( key) {
876870 value. to_str ( )
877871 } else {
878872 gctx. get_env ( key) . ok ( )
@@ -1795,7 +1789,7 @@ fn local_fingerprints_deps(
17951789 deps : & BuildDeps ,
17961790 target_root : & Path ,
17971791 pkg_root : & Path ,
1798- env_config : & Arc < HashMap < String , OsString > > ,
1792+ env_config : & Arc < EnvConfigResolved > ,
17991793) -> Vec < LocalFingerprint > {
18001794 debug ! ( "new local fingerprints deps {:?}" , pkg_root) ;
18011795 let mut local = Vec :: new ( ) ;
@@ -1816,11 +1810,10 @@ fn local_fingerprints_deps(
18161810 . collect ( ) ;
18171811 local. push ( LocalFingerprint :: RerunIfChanged { output, paths } ) ;
18181812 }
1819- let env_config_insensitive = Arc :: new ( OnceCell :: new ( ) ) ;
18201813 local. extend (
18211814 deps. rerun_if_env_changed
18221815 . iter ( )
1823- . map ( |s| LocalFingerprint :: from_env ( s, env_config, & env_config_insensitive ) ) ,
1816+ . map ( |s| LocalFingerprint :: from_env ( s, env_config) ) ,
18241817 ) ;
18251818
18261819 local
0 commit comments