[issue33935] shutil.copyfile throws incorrect SameFileError
Deniz Bozyigit
report at bugs.python.org
Thu Jun 21 20:38:26 EDT 2018
New submission from Deniz Bozyigit <deniz195 at gmail.com>:
When using shutil.copyfile on the Google Drive File Stream file system, a incorrect SameFileError can occur.
MWE (assuming foo.txt exists in your google drive G:\\):
>>> f1 = 'G:\\My Drive\\foo.txt'
>>> f2 = 'G:\\My Drive\\foo2.txt'
>>> import shutil
>>> shutil.copyfile(f1, f2)
>>> shutil.copyfile(f1, f2)
--> Last line throws incorrect SameFileError. In comparison, executing the same code on a different file system (e.g. local hard drive) will result in no errors.
More details described here: https://github.com/jupyter/notebook/issues/3615
The error originates in the library in generalpath.py in the function samestat: Google Drive File Stream reports inode==0 which makes os.path.samefile(f1, f2) == True for any files f1 and f2 on Google File Stream.
I propose the following patch, which currently works for me:
--- genericpath.py 2018-06-22 02:14:27.145744900 +0200
+++ genericpath_new.py 2018-06-22 02:10:44.485961100 +0200
@@ -86,8 +86,11 @@
# describing the same file?
def samestat(s1, s2):
"""Test whether two stat buffers reference the same file"""
- return (s1.st_ino == s2.st_ino and
- s1.st_dev == s2.st_dev)
+ return (s1.st_ino != 0 and
+ s2.st_ino != 0 and
+ s1.st_ino == s2.st_ino and
+ s1.st_dev == s2.st_dev)
+
# Are two filenames really pointing to the same file?
----------
components: Library (Lib), Windows
messages: 320199
nosy: Deniz Bozyigit, paul.moore, steve.dower, tim.golden, zach.ware
priority: normal
severity: normal
status: open
title: shutil.copyfile throws incorrect SameFileError
type: crash
versions: Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue33935>
_______________________________________
More information about the Python-bugs-list
mailing list