Author Deniz Bozyigit
Recipients Deniz Bozyigit, paul.moore, steve.dower, tim.golden, zach.ware
Date 2018-06-22.00:38:24
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1529627906.69.0.56676864532.issue33935@psf.upfronthosting.co.za>
In-reply-to
Content
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?
History
Date User Action Args
2018-06-22 00:38:26Deniz Bozyigitsetrecipients: + Deniz Bozyigit, paul.moore, tim.golden, zach.ware, steve.dower
2018-06-22 00:38:26Deniz Bozyigitsetmessageid: <1529627906.69.0.56676864532.issue33935@psf.upfronthosting.co.za>
2018-06-22 00:38:26Deniz Bozyigitlinkissue33935 messages
2018-06-22 00:38:24Deniz Bozyigitcreate