Issue17076
Created on 2013-01-29 18:18 by twouters, last changed 2022-04-11 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| shutil.patch | twouters, 2013-01-31 21:44 | shutil._coypxattr patch with test | review | |
| Messages (6) | |||
|---|---|---|---|
| msg180920 - (view) | Author: Thomas Wouters (twouters) * ![]() |
Date: 2013-01-29 18:18 | |
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.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.)
|
|||
| msg180947 - (view) | Author: Hynek Schlawack (hynek) * ![]() |
Date: 2013-01-29 21:01 | |
Could you add regression tests to your patch please? |
|||
| msg181046 - (view) | Author: Thomas Wouters (twouters) * ![]() |
Date: 2013-01-31 21:42 | |
Updated patch with test. |
|||
| msg181047 - (view) | Author: Thomas Wouters (twouters) * ![]() |
Date: 2013-01-31 21:44 | |
Now really updated the patch. |
|||
| msg181423 - (view) | Author: Roundup Robot (python-dev) ![]() |
Date: 2013-02-05 07:26 | |
New changeset 47c65639390d by Hynek Schlawack in branch '3.3': #17076: Make copying of xattrs more permissive of missing FS support http://hg.python.org/cpython/rev/47c65639390d New changeset 7ccdbd1cd213 by Hynek Schlawack in branch 'default': #17076: Make copying of xattrs more permissive of missing FS support http://hg.python.org/cpython/rev/7ccdbd1cd213 |
|||
| msg181424 - (view) | Author: Hynek Schlawack (hynek) * ![]() |
Date: 2013-02-05 08:16 | |
The buildbots look happy, thank you for spotting & the patch Thomas! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:57:41 | admin | set | github: 61278 |
| 2013-02-05 08:16:53 | hynek | set | status: open -> closed resolution: fixed messages: + msg181424 |
| 2013-02-05 07:26:20 | python-dev | set | nosy:
+ python-dev messages: + msg181423 |
| 2013-02-05 07:24:50 | hynek | set | versions: + Python 3.4 |
| 2013-01-31 21:44:16 | twouters | set | files:
+ shutil.patch messages: + msg181047 |
| 2013-01-31 21:43:37 | twouters | set | files: - shutil.patch |
| 2013-01-31 21:43:16 | twouters | set | files: - shutil.patch |
| 2013-01-31 21:42:58 | twouters | set | files:
+ shutil.patch messages: + msg181046 |
| 2013-01-29 21:01:20 | hynek | set | priority: high -> normal assignee: hynek type: crash -> behavior messages: + msg180947 |
| 2013-01-29 18:57:02 | pitrou | set | nosy:
+ hynek |
| 2013-01-29 18:18:12 | twouters | create | |

