Bugs item #1525866, was opened at 2006-07-20 15:00 Message generated for change (Comment added) made by loewis You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1525866&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Python Library Group: Python 2.5 >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Mike Foord (mjfoord) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in shutil.copytree on Windows Initial Comment: The problem is that the call to 'copystat(src, dst)' was added to the shutil.copytree function, in svn r38363 probably. It will fail always on Windows, since os.utime does not work on directories. I guess that a patch similar to this one should fix it: Index: shutil.py =================================================================== --- shutil.py (Revision 50710) +++ shutil.py (Arbeitskopie) @@ -127,7 +127,12 @@ # continue with other files except Error, err: errors.extend(err.args[0]) - copystat(src, dst) + try: + copystat(src, dst) + except WindowsError: + pass + except OSError, err: + errors.extend(err.args[0]) if errors: raise Error, errors ---------------------------------------------------------------------- >Comment By: Martin v. Löwis (loewis) Date: 2006-07-30 15:01 Message: Logged In: YES user_id=21627 Thanks for the patch. Committed as r50977. ---------------------------------------------------------------------- Comment By: Mike Foord (mjfoord) Date: 2006-07-28 16:14 Message: Logged In: YES user_id=1123892 Nope - not quite right. Will fix tonight and upload a proper patch. Michael ---------------------------------------------------------------------- Comment By: Mike Foord (mjfoord) Date: 2006-07-28 16:09 Message: Logged In: YES user_id=1123892 The following should work as a test method for shutil.copytree (Passes on my box against a patched version of shutil) def test_copytree_simple(self): src_dir = tempfile.mkdtemp() dst_dir = os.path.join(tempfile.mkdtemp(), 'destination') open(os.path.join(src_dir, 'test.txt'), 'w').write('123') os.mkdir(os.path.join(src_dir, 'test_dir')) open(os.path.join(src_dir, 'test_dir', 'test.txt'), 'w').write('456') # def testStat(src, dst): st_src = os.stat(src) st_dst = os.stat(dst) if hasattr(os, 'utime'): self.assertEqual((st_src.st_atime, st_src.st_mtime), (st_dst.st_atime, st_dst.st_mtime)) if hasattr(os, 'chmod'): # Should be equal anyway, should we change permissions on one of the source files ? self.assertEqual(stat.S_IMODE(st_src.st_mode), stat.S_IMODE(st_dst.st_mode)) # try: shutil.copytree(src_dir, dst_dir) self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test.txt'))) self.assertTrue(os.path.isdir(os.path.join(dst_dir, 'test_dir'))) self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test_dir', 'test.txt'))) self.assertEqual(open(os.path.join(dst_dir, 'test.txt')).read(), '123') self.assertEqual(open(os.path.join(dst_dir, 'test_dir', 'test.txt')).read(), '456') finally: try: os.remove(os.path.join(src_dir, 'test.txt')) os.remove(os.path.join(dst_dir, 'test.txt')) os.remove(os.path.join(src_dir, 'test_dir', 'test.txt')) os.remove(os.path.join(dst_dir, 'test_dir', 'test.txt')) os.removedirs(src_dir) os.removedirs(dst_dir) except: pass Can turn the above into a patch tonight if needed. ---------------------------------------------------------------------- Comment By: Martin v. Löwis (loewis) Date: 2006-07-20 18:14 Message: Logged In: YES user_id=21627 Can you also come up with a patch to the test suite? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1525866&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com