summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandr Shurigin <ya@helldude.ru>2014-05-22 19:12:22 +0700
committerTim Graham <timograham@gmail.com>2014-06-03 15:03:32 -0400
commit8d6e0d45882444cf528b10832811fa19613f184a (patch)
treeda61d7a1e232eed8d55a66001bf9ff223b17102b
parentc8382f4c6578104a21263c865485d60f3d64965b (diff)
[1.7.x] Fixed #22681 -- Made TarArchive recognize leading directories properly.
Backport of 083d285b82 from master
-rw-r--r--django/utils/archive.py2
-rw-r--r--tests/utils_tests/archives/leadpath_foobar.tarbin0 -> 5632 bytes
-rw-r--r--tests/utils_tests/archives/leadpath_foobar.tar.bz2bin0 -> 265 bytes
-rw-r--r--tests/utils_tests/archives/leadpath_foobar.tar.gzbin0 -> 265 bytes
-rw-r--r--tests/utils_tests/archives/leadpath_foobar.zipbin0 -> 1402 bytes
-rw-r--r--tests/utils_tests/test_archive.py5
6 files changed, 6 insertions, 1 deletions
diff --git a/django/utils/archive.py b/django/utils/archive.py
index 90b72593a9..6a47b00502 100644
--- a/django/utils/archive.py
+++ b/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:
diff --git a/tests/utils_tests/archives/leadpath_foobar.tar b/tests/utils_tests/archives/leadpath_foobar.tar
new file mode 100644
index 0000000000..3ff38d72f5
--- /dev/null
+++ b/tests/utils_tests/archives/leadpath_foobar.tar
Binary files differ
diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.bz2 b/tests/utils_tests/archives/leadpath_foobar.tar.bz2
new file mode 100644
index 0000000000..15f47ca179
--- /dev/null
+++ b/tests/utils_tests/archives/leadpath_foobar.tar.bz2
Binary files differ
diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.gz b/tests/utils_tests/archives/leadpath_foobar.tar.gz
new file mode 100644
index 0000000000..7b5ba7eda4
--- /dev/null
+++ b/tests/utils_tests/archives/leadpath_foobar.tar.gz
Binary files differ
diff --git a/tests/utils_tests/archives/leadpath_foobar.zip b/tests/utils_tests/archives/leadpath_foobar.zip
new file mode 100644
index 0000000000..8437c1ac03
--- /dev/null
+++ b/tests/utils_tests/archives/leadpath_foobar.zip
Binary files differ
diff --git a/tests/utils_tests/test_archive.py b/tests/utils_tests/test_archive.py
index f00f25e855..6f1b66b14b 100644
--- a/tests/utils_tests/test_archive.py
+++ b/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)