New submission from Thomas Wouters:

The new xattr support in shutil causes shutil.copytree and shutil.copy2 to fail 
inelegantly on (source) filesystems that do not support xattrs (like NFS):

# /home/twouters does not support xattrs
>>> os.listxattr("/home/twouters/foo")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 95] Operation not supported: '/home/twouters/foo'

>>> shutil.copytree("/home/twouters/spam", "/tmp/spam")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/twouters/gvs-pristine/python/Python-3.3.0/Lib/shutil.py", line 
345, in copytree
    raise Error(errors)
shutil.Error: [('/home/twouters/spam/ham', '/tmp/spam/ham', "[Errno 95] 
Operation not supported: '/home/twouters/spam/ham'"), 
('/home/twouters/spam/eggs', '/tmp/spam/eggs', "[Errno 95] Operation not 
supported: '/home/twouters/spam/eggs'"), ('/home/twouters/spam', '/tmp/spam', 
"[Errno 95] Operation not supported: '/home/twouters/spam'")]

(The actual files will have been copied, since xattr copies are done after 
everything else.)  Interestingly shutil._copyxattr does try to cope with 
unsupported xattrs on the *target* filesystem (which seems like it might be a 
mistake to do, since it loses data), just not the original filesystem (which 
seems like a sensible thing instead):

# /tmp does support xattrs
>>> os.listxattr("/tmp/spam")
[]
>>> shutil.copytree("/tmp/spam", "/home/twouters/spam-new")
'/home/twouters/spam-new'

The attached patch fixes shutil._copyxattr to also ignore unsupported/empty 
xattrs (but not permission errors) on the source. (I'm not certain if 
errno.ENODATA can be expected from os.listxattr(), but internet searches 
suggest that some people think so, and I don't know what other meaning it could 
have.)

----------
files: shutil.patch
keywords: needs review, patch
messages: 180920
nosy: twouters
priority: high
severity: normal
stage: patch review
status: open
title: shutil.copytree failing on xattr-less filesystems (like NFS)
type: crash
versions: Python 3.3
Added file: http://bugs.python.org/file28898/shutil.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17076>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to