@@ -7897,7 +7897,7 @@ fn test_cp_not_existing_no_preserve_dir() {
78977897
78987898 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
78997899
7900- assert_eq ! ( 0o777 & ! 0o700 , d2_mode & 0o777 ) ;
7900+ assert_eq ! ( ! 0o700 & 0o777 , d2_mode & 0o777 ) ;
79017901}
79027902
79037903#[ test]
@@ -7921,7 +7921,7 @@ fn test_cp_not_existing_default_file() {
79217921
79227922 let f2_mode = at. metadata ( "f2" ) . mode ( ) ;
79237923
7924- assert_eq ! ( 0o770 & ! 0o700 , f2_mode & 0o777 ) ;
7924+ assert_eq ! ( ! 0o700 & 0o770 , f2_mode & 0o777 ) ;
79257925}
79267926
79277927#[ test]
@@ -7946,7 +7946,7 @@ fn test_cp_not_existing_default_dir() {
79467946
79477947 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
79487948
7949- assert_eq ! ( 0o770 & ! 0o700 , d2_mode & 0o777 ) ;
7949+ assert_eq ! ( ! 0o700 & 0o770 , d2_mode & 0o777 ) ;
79507950}
79517951
79527952#[ test]
@@ -8003,3 +8003,39 @@ fn test_cp_not_existing_preserve_dir() {
80038003
80048004 assert_eq ! ( d1_mode, d2_mode) ;
80058005}
8006+
8007+ #[ test]
8008+ #[ cfg( unix) ]
8009+ // adapted from GNU tests/cp/cp-parents
8010+ fn test_cp_not_existing_no_preserve_file_parents ( ) {
8011+ use std:: io;
8012+
8013+ let scene = TestScenario :: new ( util_name ! ( ) ) ;
8014+ let at = & scene. fixtures ;
8015+
8016+ scene. cmd ( "mkdir" ) . arg ( "d1" ) . succeeds ( ) ;
8017+ scene. cmd ( "mkdir" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8018+ scene. cmd ( "touch" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8019+ scene. cmd ( "chmod" ) . arg ( "770" ) . arg ( "d1" ) . succeeds ( ) ;
8020+ scene. cmd ( "chmod" ) . arg ( "700" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8021+ scene. cmd ( "chmod" ) . arg ( "775" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8022+ scene. cmd ( "mkdir" ) . arg ( "d3" ) . succeeds ( ) ;
8023+
8024+ scene
8025+ . ucmd ( )
8026+ . umask ( 0o022 )
8027+ . arg ( "--no-preserve=mode" )
8028+ . arg ( "--parents" )
8029+ . arg ( "d1/d2/f" )
8030+ . arg ( "d3" )
8031+ . set_stdout ( io:: stdout ( ) )
8032+ . succeeds ( ) ;
8033+
8034+ let d1_mode = at. metadata ( "d3/d1" ) . mode ( ) ;
8035+ let d2_mode = at. metadata ( "d3/d1/d2" ) . mode ( ) ;
8036+ let f_mode = at. metadata ( "d3/d1/d2/f" ) . mode ( ) ;
8037+
8038+ assert_eq ! ( !0o022 & 0o777 , d1_mode & 0o777 ) ;
8039+ assert_eq ! ( !0o022 & 0o777 , d2_mode & 0o777 ) ;
8040+ assert_eq ! ( !0o022 & 0o666 , f_mode & 0o777 ) ;
8041+ }
0 commit comments