]> git.ipfire.org Git - pakfire.git/commitdiff
Speed up package extraction.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 15 Oct 2011 16:52:25 +0000 (18:52 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 15 Oct 2011 16:52:25 +0000 (18:52 +0200)
python/pakfire/packages/file.py

index a2bd88c04982a59a8945f25c30ebb1bb1d10d12b..190843b53f99cb5b4d77953f0b8242400d060b88 100644 (file)
@@ -257,27 +257,27 @@ class FilePackage(Package):
                # Get a list of files in the archive.
                members = payload_archive.getmembers()
 
-               i = 0
-               for member in members:
-                       # Update progress.
-                       if pb:
-                               i += 1
-                               pb.update(i)
+               name2file = {}
+               for file in self.filelist:
+                       name = file.name
 
-                       file = None
-                       for f in self.filelist:
-                               m_name = "/%s" % member.name
-                               if f.is_dir():
-                                       m_name = "%s/" % m_name
+                       if file.is_dir():
+                               name = name[:-1]
 
-                               if m_name == f.name:
-                                       file = f
-                                       break
+                       name2file[name] = file
 
+               i = 0
+               for member in members:
+                       file = name2file.get("/%s" % member.name, None)
                        if not file:
                                logging.warning(_("File in archive is missing in file metadata: /%s. Skipping.") % member.name)
                                continue
 
+                       # Update progress.
+                       if pb:
+                               i += 1
+                               pb.update(i)
+
                        target = os.path.join(prefix, member.name)
 
                        # Check if a configuration file is already present. We don't want to