#17076: Make copying of xattrs more permissive of missing FS support

Patch by Thomas Wouters.
This commit is contained in:
Hynek Schlawack 2013-02-05 08:25:24 +01:00
commit 4cd7b9c3e9
3 changed files with 21 additions and 1 deletions

View File

@ -140,7 +140,13 @@ if hasattr(os, 'listxattr'):
"""
for name in os.listxattr(src, follow_symlinks=follow_symlinks):
try:
names = os.listxattr(src, follow_symlinks=follow_symlinks)
except OSError as e:
if e.errno not in (errno.ENOTSUP, errno.ENODATA):
raise
return
for name in names:
try:
value = os.getxattr(src, name, follow_symlinks=follow_symlinks)
os.setxattr(dst, name, value, follow_symlinks=follow_symlinks)

View File

@ -450,6 +450,17 @@ class TestShutil(unittest.TestCase):
self.assertIn('user.bar', os.listxattr(dst))
finally:
os.setxattr = orig_setxattr
# the source filesystem not supporting xattrs should be ok, too.
def _raise_on_src(fname, *, follow_symlinks=True):
if fname == src:
raise OSError(errno.ENOTSUP, 'Operation not supported')
return orig_listxattr(fname, follow_symlinks=follow_symlinks)
try:
orig_listxattr = os.listxattr
os.listxattr = _raise_on_src
shutil._copyxattr(src, dst)
finally:
os.listxattr = orig_listxattr
# test that shutil.copystat copies xattrs
src = os.path.join(tmp_dir, 'the_original')

View File

@ -235,6 +235,9 @@ Core and Builtins
Library
-------
- Issue #17076: Make copying of xattrs more permissive of missing FS support.
Patch by Thomas Wouters.
- Issue #17089: Expat parser now correctly works with string input not only when
an internal XML encoding is UTF-8 or US-ASCII. It now accepts bytes and
strings larger than 2 GiB.