Browse Source

Fixed #22681 -- Made TarArchive recognize leading directories properly.

Alexandr Shurigin 11 years ago
parent
commit
083d285b82

+ 1 - 1
django/utils/archive.py

@@ -144,7 +144,7 @@ class TarArchive(BaseArchive):
         # note: python<=2.5 doesn't seem to know about pax headers, filter them
         members = [member for member in self._archive.getmembers()
                    if member.name != 'pax_global_header']
-        leading = self.has_leading_dir(members)
+        leading = self.has_leading_dir(x.name for x in members)
         for member in members:
             name = member.name
             if leading:

BIN
tests/utils_tests/archives/leadpath_foobar.tar


BIN
tests/utils_tests/archives/leadpath_foobar.tar.bz2


BIN
tests/utils_tests/archives/leadpath_foobar.tar.gz


BIN
tests/utils_tests/archives/leadpath_foobar.zip


+ 5 - 0
tests/utils_tests/test_archive.py

@@ -21,6 +21,7 @@ class ArchiveTester(object):
         self.tmpdir = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, self.tmpdir)
         self.archive_path = os.path.join(TEST_DIR, self.archive)
+        self.archive_lead_path = os.path.join(TEST_DIR, "leadpath_%s" % self.archive)
         # Always start off in TEST_DIR.
         os.chdir(TEST_DIR)
 
@@ -42,6 +43,10 @@ class ArchiveTester(object):
         extract(self.archive_path, self.tmpdir)
         self.check_files(self.tmpdir)
 
+    def test_extract_function_with_leadpath(self):
+        extract(self.archive_lead_path, self.tmpdir)
+        self.check_files(self.tmpdir)
+
     def test_extract_function_no_to_path(self):
         os.chdir(self.tmpdir)
         extract(self.archive_path)