@@ -877,23 +877,23 @@ def test_copymode_follow_symlinks(self):
877877 shutil .copymode (src , dst )
878878 self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
879879 # On Windows, os.chmod does not follow symlinks (issue #15411)
880- if os .name != 'nt' :
881- # follow src link
882- os .chmod (dst , stat .S_IRWXO )
883- shutil .copymode (src_link , dst )
884- self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
885- # follow dst link
886- os .chmod (dst , stat .S_IRWXO )
887- shutil .copymode (src , dst_link )
888- self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
889- # follow both links
890- os .chmod (dst , stat .S_IRWXO )
891- shutil .copymode (src_link , dst_link )
892- self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
893-
894- @unittest .skipUnless (hasattr (os , 'lchmod' ), 'requires os.lchmod' )
880+ # follow src link
881+ os .chmod (dst , stat .S_IRWXO )
882+ shutil .copymode (src_link , dst )
883+ self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
884+ # follow dst link
885+ os .chmod (dst , stat .S_IRWXO )
886+ shutil .copymode (src , dst_link )
887+ self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
888+ # follow both links
889+ os .chmod (dst , stat .S_IRWXO )
890+ shutil .copymode (src_link , dst_link )
891+ self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
892+
893+ @unittest .skipUnless (hasattr (os , 'lchmod' ) or os .name == 'nt' , 'requires os.lchmod' )
895894 @os_helper .skip_unless_symlink
896895 def test_copymode_symlink_to_symlink (self ):
896+ _lchmod = os .chmod if os .name == 'nt' else os .lchmod
897897 tmp_dir = self .mkdtemp ()
898898 src = os .path .join (tmp_dir , 'foo' )
899899 dst = os .path .join (tmp_dir , 'bar' )
@@ -905,20 +905,20 @@ def test_copymode_symlink_to_symlink(self):
905905 os .symlink (dst , dst_link )
906906 os .chmod (src , stat .S_IRWXU | stat .S_IRWXG )
907907 os .chmod (dst , stat .S_IRWXU )
908- os . lchmod (src_link , stat .S_IRWXO | stat .S_IRWXG )
908+ _lchmod (src_link , stat .S_IRWXO | stat .S_IRWXG )
909909 # link to link
910- os . lchmod (dst_link , stat .S_IRWXO )
910+ _lchmod (dst_link , stat .S_IRWXO )
911911 old_mode = os .stat (dst ).st_mode
912912 shutil .copymode (src_link , dst_link , follow_symlinks = False )
913913 self .assertEqual (os .lstat (src_link ).st_mode ,
914914 os .lstat (dst_link ).st_mode )
915915 self .assertEqual (os .stat (dst ).st_mode , old_mode )
916916 # src link - use chmod
917- os . lchmod (dst_link , stat .S_IRWXO )
917+ _lchmod (dst_link , stat .S_IRWXO )
918918 shutil .copymode (src_link , dst , follow_symlinks = False )
919919 self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
920920 # dst link - use chmod
921- os . lchmod (dst_link , stat .S_IRWXO )
921+ _lchmod (dst_link , stat .S_IRWXO )
922922 shutil .copymode (src , dst_link , follow_symlinks = False )
923923 self .assertEqual (os .stat (src ).st_mode , os .stat (dst ).st_mode )
924924
@@ -955,11 +955,13 @@ def test_copystat_symlinks(self):
955955 os .symlink (dst , dst_link )
956956 if hasattr (os , 'lchmod' ):
957957 os .lchmod (src_link , stat .S_IRWXO )
958+ elif os .name == 'nt' :
959+ os .chmod (src_link , stat .S_IRWXO )
958960 if hasattr (os , 'lchflags' ) and hasattr (stat , 'UF_NODUMP' ):
959961 os .lchflags (src_link , stat .UF_NODUMP )
960962 src_link_stat = os .lstat (src_link )
961963 # follow
962- if hasattr (os , 'lchmod' ):
964+ if hasattr (os , 'lchmod' ) or os . name == 'nt' :
963965 shutil .copystat (src_link , dst_link , follow_symlinks = True )
964966 self .assertNotEqual (src_link_stat .st_mode , os .stat (dst ).st_mode )
965967 # don't follow
@@ -970,7 +972,7 @@ def test_copystat_symlinks(self):
970972 # The modification times may be truncated in the new file.
971973 self .assertLessEqual (getattr (src_link_stat , attr ),
972974 getattr (dst_link_stat , attr ) + 1 )
973- if hasattr (os , 'lchmod' ):
975+ if hasattr (os , 'lchmod' ) or os . name == 'nt' :
974976 self .assertEqual (src_link_stat .st_mode , dst_link_stat .st_mode )
975977 if hasattr (os , 'lchflags' ) and hasattr (src_link_stat , 'st_flags' ):
976978 self .assertEqual (src_link_stat .st_flags , dst_link_stat .st_flags )
0 commit comments