]> git.ipfire.org Git - pakfire.git/commitdiff
Fix symlink handling on packager.
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Feb 2011 21:34:18 +0000 (22:34 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Feb 2011 21:34:18 +0000 (22:34 +0100)
Symlinks did not get packages properly and it was possible to
archive (and remove!) files more than one time.

pakfire/packages/packager.py

index 301e56793ccc90b6316d67e273a3fe97895b1d56..1fdc3f94159699a26fde941b9a5be7c30b370ac7 100644 (file)
@@ -279,36 +279,20 @@ class Packager(object):
 
                files = []
                for file in includes:
-                       if file in excludes:
+                       # Skip if file is already in the file set or
+                       # marked to be excluded from this archive.
+                       if file in excludes or file in files:
                                continue
 
                        files.append(file)
 
                files.sort()
 
-               # Save files that need to be removed after they were packaged.
-               files_to_be_removed = []
-
                for file_real in files:
                        file_tar = file_real[len(self.env.chrootPath(self.env.buildroot)) + 1:]
 
-                       if not os.path.exists(file_real):
-                               logging.warning("This file has vanished unexpectedly: %s" % file_real)
-                               continue
-
                        tar.add(file_real, arcname=file_tar, recursive=False)
-
-                       # Mark file for deletion, and add symlinks on top of list.
-                       if os.path.islink(file_real):
-                               files_to_be_removed.insert(0, file_real)
-                       elif not os.path.isdir(file_real):
-                               files_to_be_removed.append(file_real)
-
-               # Remove all files afterwards, because tarfile has some kind of trouble
-               # when a symlink points into nirvana.
-               for file_real in files_to_be_removed:
-                       if os.path.exists(file_real):
-                               os.unlink(file_real)
+                       os.unlink(file_real)
 
                # Dump all files that are in the archive.
                tar.list()