summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_shutil.py
diff options
context:
space:
mode:
authorOlexa Bilaniuk <obilaniu@users.noreply.github.com>2019-05-10 03:22:06 (GMT)
committerGiampaolo Rodola <g.rodola@gmail.com>2019-05-10 03:22:06 (GMT)
commit79efbb719383386051c72f2ee932eeca8e033e6b (patch)
treeca694616676aaad7de81f41ee5d1b16dd18455be /Lib/test/test_shutil.py
parent948ed8c96b6912541a608591efe3e00fb520429a (diff)
downloadcpython-79efbb719383386051c72f2ee932eeca8e033e6b.zip
cpython-79efbb719383386051c72f2ee932eeca8e033e6b.tar.gz
cpython-79efbb719383386051c72f2ee932eeca8e033e6b.tar.bz2
bpo-24538: Fix bug in shutil involving the copying of xattrs to read-only files. (PR-13212)
Extended attributes can only be set on user-writeable files, but shutil previously first chmod()ed the destination file to the source's permissions and then tried to copy xattrs. This will cause failures if attempting to copy read-only files with xattrs, as occurs with Git clones on Lustre FS.
Diffstat (limited to 'Lib/test/test_shutil.py')
-rw-r--r--Lib/test/test_shutil.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index e709a56..eeebb97 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -531,12 +531,20 @@ class TestShutil(unittest.TestCase):
# test that shutil.copystat copies xattrs
src = os.path.join(tmp_dir, 'the_original')
+ srcro = os.path.join(tmp_dir, 'the_original_ro')
write_file(src, src)
+ write_file(srcro, srcro)
os.setxattr(src, 'user.the_value', b'fiddly')
+ os.setxattr(srcro, 'user.the_value', b'fiddly')
+ os.chmod(srcro, 0o444)
dst = os.path.join(tmp_dir, 'the_copy')
+ dstro = os.path.join(tmp_dir, 'the_copy_ro')
write_file(dst, dst)
+ write_file(dstro, dstro)
shutil.copystat(src, dst)
+ shutil.copystat(srcro, dstro)
self.assertEqual(os.getxattr(dst, 'user.the_value'), b'fiddly')
+ self.assertEqual(os.getxattr(dstro, 'user.the_value'), b'fiddly')
@support.skip_unless_symlink
@support.skip_unless_xattr