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,33 +799,25 @@ 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) {
810- Some ( value) => value. to_str ( ) . map ( |s| str:: to_string ( s) ) ,
811- None => {
812- if cfg ! ( windows) {
813- let env_config_insensitive = env_config_insensitive. get_or_init ( || {
814- env_config
815- . iter ( )
816- . map ( |( k, v) | ( k. to_uppercase ( ) . clone ( ) , v. clone ( ) ) )
817- . collect ( )
818- } ) ;
819- let val = env_config_insensitive
820- . get ( & key. to_uppercase ( ) )
821- . and_then ( |s| s. to_str ( ) . map ( |s| str:: to_string ( s) ) ) ;
822-
823- val
824- } else {
825- None
805+ let val = if let Some ( val) =
806+ match env_config. env . get ( key) {
807+ Some ( value) => value. to_str ( ) . map ( |s| str:: to_string ( s) ) ,
808+ None => {
809+ if cfg ! ( windows) {
810+ let val = env_config. case_insensitive_env . as_ref ( ) . and_then (
811+ |case_insensitive_env| {
812+ case_insensitive_env. get ( & UncasedAscii :: new ( str:: to_string ( key) ) )
813+ } ,
814+ ) ;
815+ val. and_then ( |s| s. to_str ( ) . map ( |s| str:: to_string ( s) ) )
816+ } else {
817+ None
818+ }
826819 }
827- }
828- } {
820+ } {
829821 Some ( val)
830822 } else {
831823 env:: var ( key) . ok ( )
@@ -874,7 +866,7 @@ impl LocalFingerprint {
874866 )
875867 } ) ?)
876868 } else {
877- if let Some ( value) = gctx. env_config ( ) ?. get ( key) {
869+ if let Some ( value) = gctx. env_config ( ) ?. env . get ( key) {
878870 value. to_str ( )
879871 } else {
880872 gctx. get_env ( key) . ok ( )
@@ -1797,7 +1789,7 @@ fn local_fingerprints_deps(
17971789 deps : & BuildDeps ,
17981790 target_root : & Path ,
17991791 pkg_root : & Path ,
1800- env_config : & Arc < HashMap < String , OsString > > ,
1792+ env_config : & Arc < EnvConfigResolved > ,
18011793) -> Vec < LocalFingerprint > {
18021794 debug ! ( "new local fingerprints deps {:?}" , pkg_root) ;
18031795 let mut local = Vec :: new ( ) ;
@@ -1818,11 +1810,10 @@ fn local_fingerprints_deps(
18181810 . collect ( ) ;
18191811 local. push ( LocalFingerprint :: RerunIfChanged { output, paths } ) ;
18201812 }
1821- let env_config_insensitive = Arc :: new ( OnceCell :: new ( ) ) ;
18221813 local. extend (
18231814 deps. rerun_if_env_changed
18241815 . iter ( )
1825- . map ( |s| LocalFingerprint :: from_env ( s, env_config, & env_config_insensitive ) ) ,
1816+ . map ( |s| LocalFingerprint :: from_env ( s, env_config) ) ,
18261817 ) ;
18271818
18281819 local
0 commit comments