Commit d07de5a5 authored by Berker Peksag's avatar Berker Peksag

Issue #22182: Use e.args to unpack exceptions correctly in distutils.file_util.move_file.

Patch by Claudiu Popa.
parents 0d72c5da 83b03cdd
...@@ -194,7 +194,7 @@ def move_file (src, dst, ...@@ -194,7 +194,7 @@ def move_file (src, dst,
try: try:
os.rename(src, dst) os.rename(src, dst)
except OSError as e: except OSError as e:
(num, msg) = e (num, msg) = e.args
if num == errno.EXDEV: if num == errno.EXDEV:
copy_it = True copy_it = True
else: else:
...@@ -206,7 +206,7 @@ def move_file (src, dst, ...@@ -206,7 +206,7 @@ def move_file (src, dst,
try: try:
os.unlink(src) os.unlink(src)
except OSError as e: except OSError as e:
(num, msg) = e (num, msg) = e.args
try: try:
os.unlink(dst) os.unlink(dst)
except OSError: except OSError:
......
...@@ -2,10 +2,13 @@ ...@@ -2,10 +2,13 @@
import unittest import unittest
import os import os
import shutil import shutil
import errno
from unittest.mock import patch
from distutils.file_util import move_file from distutils.file_util import move_file
from distutils import log from distutils import log
from distutils.tests import support from distutils.tests import support
from distutils.errors import DistutilsFileError
from test.support import run_unittest from test.support import run_unittest
class FileUtilTestCase(support.TempdirManager, unittest.TestCase): class FileUtilTestCase(support.TempdirManager, unittest.TestCase):
...@@ -58,6 +61,23 @@ class FileUtilTestCase(support.TempdirManager, unittest.TestCase): ...@@ -58,6 +61,23 @@ class FileUtilTestCase(support.TempdirManager, unittest.TestCase):
wanted = ['moving %s -> %s' % (self.source, self.target_dir)] wanted = ['moving %s -> %s' % (self.source, self.target_dir)]
self.assertEqual(self._logs, wanted) self.assertEqual(self._logs, wanted)
@patch('os.rename', side_effect=OSError('wrong', 1))
def test_move_file_exception_unpacking_rename(self, _):
# see issue 22182
with self.assertRaises(DistutilsFileError):
with open(self.source, 'w') as fobj:
fobj.write('spam eggs')
move_file(self.source, self.target, verbose=0)
@patch('os.rename', side_effect=OSError(errno.EXDEV, 'wrong'))
@patch('os.unlink', side_effect=OSError('wrong', 1))
def test_move_file_exception_unpacking_unlink(self, rename, unlink):
# see issue 22182
with self.assertRaises(DistutilsFileError):
with open(self.source, 'w') as fobj:
fobj.write('spam eggs')
move_file(self.source, self.target, verbose=0)
def test_suite(): def test_suite():
return unittest.makeSuite(FileUtilTestCase) return unittest.makeSuite(FileUtilTestCase)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment