[Python-Dev] [Python-checkins] r86817 - python/branches/py3k-stat-on-windows/Lib/test/test_shutil.py

Hirokazu Yamamoto ocean-city at m2.ccsnet.ne.jp
Fri Nov 26 20:45:18 CET 2010


On 2010/11/27 3:52, Brian Curtin wrote:
> On Fri, Nov 26, 2010 at 12:44, hirokazu.yamamoto<python-checkins at python.org
>> wrote:
>
>> Author: hirokazu.yamamoto
>> Date: Fri Nov 26 19:44:28 2010
>> New Revision: 86817
>>
>> Log:
>> Now can reproduce the error on AMD64 Windows Server 2008
>> even where os.symlink is not supported.
>>
>>
>> Modified:
>>    python/branches/py3k-stat-on-windows/Lib/test/test_shutil.py
>>
>> Modified: python/branches/py3k-stat-on-windows/Lib/test/test_shutil.py
>>
>> ==============================================================================
>> --- python/branches/py3k-stat-on-windows/Lib/test/test_shutil.py
>>   (original)
>> +++ python/branches/py3k-stat-on-windows/Lib/test/test_shutil.py        Fri
>> Nov 26 19:44:28 2010
>> @@ -271,24 +271,32 @@
>>              shutil.rmtree(src_dir)
>>              shutil.rmtree(os.path.dirname(dst_dir))
>>
>> -    @support.skip_unless_symlink
>> +    @unittest.skipUnless(hasattr(os, 'link'), 'requires os.link')
>>      def test_dont_copy_file_onto_link_to_itself(self):
>>          # bug 851123.
>>          os.mkdir(TESTFN)
>>          src = os.path.join(TESTFN, 'cheese')
>>          dst = os.path.join(TESTFN, 'shop')
>>          try:
>> -            f = open(src, 'w')
>> -            f.write('cheddar')
>> -            f.close()
>> -
>> -            if hasattr(os, "link"):
>> -                os.link(src, dst)
>> -                self.assertRaises(shutil.Error, shutil.copyfile, src, dst)
>> -                with open(src, 'r') as f:
>> -                    self.assertEqual(f.read(), 'cheddar')
>> -                os.remove(dst)
>> +            with open(src, 'w') as f:
>> +                f.write('cheddar')
>> +            os.link(src, dst)
>> +            self.assertRaises(shutil.Error, shutil.copyfile, src, dst)
>> +            with open(src, 'r') as f:
>> +                self.assertEqual(f.read(), 'cheddar')
>> +            os.remove(dst)
>> +        finally:
>> +            shutil.rmtree(TESTFN, ignore_errors=True)
>>
>> +    @support.skip_unless_symlink
>> +    def test_dont_copy_file_onto_symlink_to_itself(self):
>> +        # bug 851123.
>> +        os.mkdir(TESTFN)
>> +        src = os.path.join(TESTFN, 'cheese')
>> +        dst = os.path.join(TESTFN, 'shop')
>> +        try:
>> +            with open(src, 'w') as f:
>> +                f.write('cheddar')
>>              # Using `src` here would mean we end up with a symlink pointing
>>              # to TESTFN/TESTFN/cheese, while it should point at
>>              # TESTFN/cheese.
>> @@ -298,10 +306,7 @@
>>                  self.assertEqual(f.read(), 'cheddar')
>>              os.remove(dst)
>>          finally:
>> -            try:
>> -                shutil.rmtree(TESTFN)
>> -            except OSError:
>> -                pass
>> +            shutil.rmtree(TESTFN, ignore_errors=True)
>>
>>      @support.skip_unless_symlink
>>      def test_rmtree_on_symlink(self):
>
>
> You might be working on something slightly different, but I have an issue
> created for the failure of that test: http://bugs.python.org/issue10540
>
> It slipped past me because I was only running the test suite as a regular
> user without the required symlink privilege, so the test was skipped. That
> Server 2008 build slave runs the test suite as administrator, so it was
> running that test and going into the os.link block, which it didn't do until
> r86733.

I'm not sure, but why does os.path.samefile return False for hard link
on windows? MSDN says,

 > A hard link is the file system representation of a file by which more 
 > than one path references a single file in the same volume.
(http://msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx)

I know st_ino on windows is a bit different from POSIX, so, just I'm not 
sure. ;-)





More information about the Python-Dev mailing list