summaryrefslogtreecommitdiff
path: root/libmat2/archive.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmat2/archive.py')
-rw-r--r--libmat2/archive.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/libmat2/archive.py b/libmat2/archive.py
index d155664..1ae3b45 100644
--- a/libmat2/archive.py
+++ b/libmat2/archive.py
@@ -4,13 +4,14 @@ import tempfile
4import os 4import os
5import logging 5import logging
6import shutil 6import shutil
7from typing import Dict, Set, Pattern, Union, Any 7from typing import Dict, Set, Pattern, Union, Any, List
8 8
9from . import abstract, UnknownMemberPolicy, parser_factory 9from . import abstract, UnknownMemberPolicy, parser_factory
10 10
11# Make pyflakes happy 11# Make pyflakes happy
12assert Set 12assert Set
13assert Pattern 13assert Pattern
14assert List
14assert Union 15assert Union
15 16
16 17
@@ -115,9 +116,16 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
115 temp_folder = tempfile.mkdtemp() 116 temp_folder = tempfile.mkdtemp()
116 abort = False 117 abort = False
117 118
119 items = list() # type: List[zipfile.ZipInfo]
120 for item in sorted(zin.infolist(), key=lambda z: z.filename):
121 if item.filename == 'mimetype':
122 items = [item] + items
123 else:
124 items.append(item)
125
118 # Since files order is a fingerprint factor, 126 # Since files order is a fingerprint factor,
119 # we're iterating (and thus inserting) them in lexicographic order. 127 # we're iterating (and thus inserting) them in lexicographic order.
120 for item in sorted(zin.infolist(), key=lambda z: z.filename): 128 for item in items:
121 if item.filename[-1] == '/': # `is_dir` is added in Python3.6 129 if item.filename[-1] == '/': # `is_dir` is added in Python3.6
122 continue # don't keep empty folders 130 continue # don't keep empty folders
123 131