summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2011-03-16 17:52:20 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2011-03-16 17:52:20 (GMT)
commitabf202d798fec4cbe90a46d3fdba761ef6be0b85 (patch)
tree4110c5c84b926cad729c01639bb42f07b72e8d2a
parenta78e4e6daf0b5623ce71966ef32a275ebce708fc (diff)
downloadcpython-abf202d798fec4cbe90a46d3fdba761ef6be0b85.zip
cpython-abf202d798fec4cbe90a46d3fdba761ef6be0b85.tar.gz
cpython-abf202d798fec4cbe90a46d3fdba761ef6be0b85.tar.bz2
Close #11548: Correctly handle format argument in shutil.unpack_archive
-rw-r--r--Lib/shutil.py4
-rw-r--r--Lib/test/test_shutil.py8
2 files changed, 10 insertions, 2 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py
index d47c67c..aafe04e 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -737,8 +737,8 @@ def unpack_archive(filename, extract_dir=None, format=None):
except KeyError:
raise ValueError("Unknown unpack format '{0}'".format(format))
- func = format_info[0]
- func(filename, extract_dir, **dict(format_info[1]))
+ func = format_info[1]
+ func(filename, extract_dir, **dict(format_info[2]))
else:
# we need to look at the registered unpackers supported extensions
format = _find_unpack_format(filename)
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 30d9e07..8d003a8 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -645,6 +645,14 @@ class TestShutil(unittest.TestCase):
diff = self._compare_dirs(tmpdir, tmpdir2)
self.assertEqual(diff, [])
+ # and again, this time with the format specified
+ tmpdir3 = self.mkdtemp()
+ unpack_archive(filename, tmpdir3, format=format)
+ diff = self._compare_dirs(tmpdir, tmpdir3)
+ self.assertEqual(diff, [])
+ self.assertRaises(shutil.ReadError, unpack_archive, TESTFN)
+ self.assertRaises(ValueError, unpack_archive, TESTFN, format='xxx')
+
def test_unpack_registery(self):
formats = get_unpack_formats()