]> git.ipfire.org Git - pakfire.git/commitdiff
Fix packaging of symlinks.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Feb 2011 15:08:02 +0000 (16:08 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Feb 2011 15:08:02 +0000 (16:08 +0100)
We could not remove symlinks that point to nowhere.

pakfire/packages/packager.py

index 352ccac60152d5aa4a1fc82a4c3fdfd20a04c176..301e56793ccc90b6316d67e273a3fe97895b1d56 100644 (file)
@@ -286,11 +286,28 @@ class Packager(object):
 
                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)
-                       if not os.path.isdir(file_real):
+
+                       # 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)
 
                # Dump all files that are in the archive.