@@ -8103,7 +8103,7 @@ fn test_cp_not_existing_no_preserve_dir() {
81038103
81048104 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
81058105
8106- assert_eq ! ( 0o777 & ! 0o700 , d2_mode & 0o777 ) ;
8106+ assert_eq ! ( ! 0o700 & 0o777 , d2_mode & 0o777 ) ;
81078107}
81088108
81098109#[ test]
@@ -8127,7 +8127,7 @@ fn test_cp_not_existing_default_file() {
81278127
81288128 let f2_mode = at. metadata ( "f2" ) . mode ( ) ;
81298129
8130- assert_eq ! ( 0o770 & ! 0o700 , f2_mode & 0o777 ) ;
8130+ assert_eq ! ( ! 0o700 & 0o770 , f2_mode & 0o777 ) ;
81318131}
81328132
81338133#[ test]
@@ -8152,7 +8152,7 @@ fn test_cp_not_existing_default_dir() {
81528152
81538153 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
81548154
8155- assert_eq ! ( 0o770 & ! 0o700 , d2_mode & 0o777 ) ;
8155+ assert_eq ! ( ! 0o700 & 0o770 , d2_mode & 0o777 ) ;
81568156}
81578157
81588158#[ test]
@@ -8209,3 +8209,39 @@ fn test_cp_not_existing_preserve_dir() {
82098209
82108210 assert_eq ! ( d1_mode, d2_mode) ;
82118211}
8212+
8213+ #[ test]
8214+ #[ cfg( unix) ]
8215+ // adapted from GNU tests/cp/cp-parents
8216+ fn test_cp_not_existing_no_preserve_file_parents ( ) {
8217+ use std:: io;
8218+
8219+ let scene = TestScenario :: new ( util_name ! ( ) ) ;
8220+ let at = & scene. fixtures ;
8221+
8222+ scene. cmd ( "mkdir" ) . arg ( "d1" ) . succeeds ( ) ;
8223+ scene. cmd ( "mkdir" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8224+ scene. cmd ( "touch" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8225+ scene. cmd ( "chmod" ) . arg ( "770" ) . arg ( "d1" ) . succeeds ( ) ;
8226+ scene. cmd ( "chmod" ) . arg ( "700" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8227+ scene. cmd ( "chmod" ) . arg ( "775" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8228+ scene. cmd ( "mkdir" ) . arg ( "d3" ) . succeeds ( ) ;
8229+
8230+ scene
8231+ . ucmd ( )
8232+ . umask ( 0o022 )
8233+ . arg ( "--no-preserve=mode" )
8234+ . arg ( "--parents" )
8235+ . arg ( "d1/d2/f" )
8236+ . arg ( "d3" )
8237+ . set_stdout ( io:: stdout ( ) )
8238+ . succeeds ( ) ;
8239+
8240+ let d1_mode = at. metadata ( "d3/d1" ) . mode ( ) ;
8241+ let d2_mode = at. metadata ( "d3/d1/d2" ) . mode ( ) ;
8242+ let f_mode = at. metadata ( "d3/d1/d2/f" ) . mode ( ) ;
8243+
8244+ assert_eq ! ( !0o022 & 0o777 , d1_mode & 0o777 ) ;
8245+ assert_eq ! ( !0o022 & 0o777 , d2_mode & 0o777 ) ;
8246+ assert_eq ! ( !0o022 & 0o666 , f_mode & 0o777 ) ;
8247+ }
0 commit comments