@@ -869,7 +869,7 @@ impl<'a> Drop for Env<'a> {
869
869
mod tests {
870
870
use super :: * ;
871
871
use std:: fs:: File ;
872
- use std:: io:: Write ;
872
+ use std:: io:: { Read , Write } ;
873
873
874
874
#[ test]
875
875
fn parse_version ( ) {
@@ -885,27 +885,44 @@ mod tests {
885
885
assert_eq ! ( git_version_from_bytes( b"git version 2.37.2\n " ) . unwrap( ) , ( 2 , 37 , 2 ) ) ;
886
886
}
887
887
888
- fn check_configure_clears_scope ( scope_env_key : & str , scope_option : & str ) {
889
- let scope_env_value = "gitconfig" ;
890
- let temp = tempfile :: TempDir :: new ( ) . expect ( "can create temp dir" ) ;
891
- let dir = temp . path ( ) ;
888
+ const SCOPE_ENV_VALUE : & str = "gitconfig" ;
889
+
890
+ fn populate_ad_hoc_config_files ( dir : & Path ) {
891
+ const CONFIG_DATA : & [ u8 ] = b"[foo] \n \t bar = baz \n " ;
892
892
893
893
let paths: & [ PathBuf ] = if cfg ! ( windows) {
894
894
let unc_literal_nul = dir. canonicalize ( ) . expect ( "directory exists" ) . join ( "NUL" ) ;
895
- & [ dir. join ( scope_env_value ) , dir. join ( "-" ) , unc_literal_nul]
895
+ & [ dir. join ( SCOPE_ENV_VALUE ) , dir. join ( "-" ) , unc_literal_nul]
896
896
} else {
897
- & [ dir. join ( scope_env_value ) , dir. join ( "-" ) , dir. join ( ":" ) ]
897
+ & [ dir. join ( SCOPE_ENV_VALUE ) , dir. join ( "-" ) , dir. join ( ":" ) ]
898
898
} ;
899
899
900
+ // Create the files.
900
901
for path in paths {
901
902
File :: create_new ( path)
902
903
. expect ( "can create file" )
903
- . write_all ( b"[foo] \n \t bar = baz \n " )
904
+ . write_all ( CONFIG_DATA )
904
905
. expect ( "can write contents" ) ;
905
906
}
906
907
908
+ // Verify the files. This is mostly to show we really made a `\\?\...\NUL` on Windows.
909
+ for path in paths {
910
+ let mut buf = Vec :: with_capacity ( CONFIG_DATA . len ( ) ) ;
911
+ File :: open ( path)
912
+ . expect ( "the file really exists" )
913
+ . read_to_end ( & mut buf)
914
+ . expect ( "can read contents" ) ;
915
+ assert_eq ! ( buf, CONFIG_DATA , "File {:?} should be created" , path) ;
916
+ }
917
+ }
918
+
919
+ fn check_configure_clears_scope ( scope_env_key : & str , scope_option : & str ) {
920
+ let temp = tempfile:: TempDir :: new ( ) . expect ( "can create temp dir" ) ;
921
+ let dir = temp. path ( ) ;
922
+ populate_ad_hoc_config_files ( dir) ;
923
+
907
924
let mut cmd = std:: process:: Command :: new ( "git" ) ;
908
- cmd. env ( scope_env_key, scope_env_value ) ; // configure_command() should override it.
925
+ cmd. env ( scope_env_key, SCOPE_ENV_VALUE ) ; // configure_command() should override it.
909
926
let args = [ "config" , "-l" , "--show-origin" , scope_option] . map ( String :: from) ;
910
927
configure_command ( & mut cmd, & args, dir) ;
911
928
0 commit comments