diff options
| author | Alexandr Shurigin <ya@helldude.ru> | 2014-05-22 19:12:22 +0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-06-03 15:03:32 -0400 |
| commit | 8d6e0d45882444cf528b10832811fa19613f184a (patch) | |
| tree | da61d7a1e232eed8d55a66001bf9ff223b17102b | |
| parent | c8382f4c6578104a21263c865485d60f3d64965b (diff) | |
[1.7.x] Fixed #22681 -- Made TarArchive recognize leading directories properly.
Backport of 083d285b82 from master
| -rw-r--r-- | django/utils/archive.py | 2 | ||||
| -rw-r--r-- | tests/utils_tests/archives/leadpath_foobar.tar | bin | 0 -> 5632 bytes | |||
| -rw-r--r-- | tests/utils_tests/archives/leadpath_foobar.tar.bz2 | bin | 0 -> 265 bytes | |||
| -rw-r--r-- | tests/utils_tests/archives/leadpath_foobar.tar.gz | bin | 0 -> 265 bytes | |||
| -rw-r--r-- | tests/utils_tests/archives/leadpath_foobar.zip | bin | 0 -> 1402 bytes | |||
| -rw-r--r-- | tests/utils_tests/test_archive.py | 5 |
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 Binary files differnew file mode 100644 index 0000000000..3ff38d72f5 --- /dev/null +++ b/tests/utils_tests/archives/leadpath_foobar.tar diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.bz2 b/tests/utils_tests/archives/leadpath_foobar.tar.bz2 Binary files differnew file mode 100644 index 0000000000..15f47ca179 --- /dev/null +++ b/tests/utils_tests/archives/leadpath_foobar.tar.bz2 diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.gz b/tests/utils_tests/archives/leadpath_foobar.tar.gz Binary files differnew file mode 100644 index 0000000000..7b5ba7eda4 --- /dev/null +++ b/tests/utils_tests/archives/leadpath_foobar.tar.gz diff --git a/tests/utils_tests/archives/leadpath_foobar.zip b/tests/utils_tests/archives/leadpath_foobar.zip Binary files differnew file mode 100644 index 0000000000..8437c1ac03 --- /dev/null +++ b/tests/utils_tests/archives/leadpath_foobar.zip 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) |
