]> granicus.if.org Git - python/commitdiff
In copy() don't try to obtain an FSSpec until we know the destination
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 5 Aug 2002 21:53:57 +0000 (21:53 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 5 Aug 2002 21:53:57 +0000 (21:53 +0000)
exists. Partial fix for #585923.

Mac/Lib/macostools.py

index ca0c7c6dfd9afa1031978b9c05eb4123e28ab8a6..5b94ee20dd16ed8268a6e4109db4d7ca4a1fe649 100644 (file)
@@ -27,6 +27,8 @@ BUFSIZ=0x80000                # Copy in 0.5Mb chunks
 def mkalias(src, dst, relative=None):
        """Create a finder alias"""
        srcfss = macfs.FSSpec(src)
+       # The next line will fail under unix-Python if the destination
+       # doesn't exist yet. We should change this code to be fsref-based.
        dstfss = macfs.FSSpec(dst)
        if relative:
                relativefss = macfs.FSSpec(relative)
@@ -82,13 +84,15 @@ def touched_ae(dst):
        
 def copy(src, dst, createpath=0, copydates=1, forcetype=None):
        """Copy a file, including finder info, resource fork, etc"""
+       if hasattr(src, 'as_pathname'):
+               src = src.as_pathname()
+       if hasattr(dst, 'as_pathname'):
+               dst = dst.as_pathname()
        if createpath:
                mkdirs(os.path.split(dst)[0])
-       srcfss = macfs.FSSpec(src)
-       dstfss = macfs.FSSpec(dst)
        
-       ifp = open(srcfss.as_pathname(), 'rb')
-       ofp = open(dstfss.as_pathname(), 'wb')
+       ifp = open(src, 'rb')
+       ofp = open(dst, 'wb')
        d = ifp.read(BUFSIZ)
        while d:
                ofp.write(d)
@@ -96,8 +100,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
        ifp.close()
        ofp.close()
        
-       ifp = openrf(srcfss.as_pathname(), '*rb')
-       ofp = openrf(dstfss.as_pathname(), '*wb')
+       ifp = openrf(src, '*rb')
+       ofp = openrf(dst, '*wb')
        d = ifp.read(BUFSIZ)
        while d:
                ofp.write(d)
@@ -105,6 +109,8 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None):
        ifp.close()
        ofp.close()
        
+       srcfss = macfs.FSSpec(src)
+       dstfss = macfs.FSSpec(dst)
        sf = srcfss.GetFInfo()
        df = dstfss.GetFInfo()
        df.Creator, df.Type = sf.Creator, sf.Type