From: Michael Tremer Date: Sun, 20 Feb 2011 15:08:02 +0000 (+0100) Subject: Fix packaging of symlinks. X-Git-Tag: 0.9.3~154 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9a588a99c084b5caaf25ef429bf07005bbcc8bc0;p=pakfire.git Fix packaging of symlinks. We could not remove symlinks that point to nowhere. --- diff --git a/pakfire/packages/packager.py b/pakfire/packages/packager.py index 352ccac60..301e56793 100644 --- a/pakfire/packages/packager.py +++ b/pakfire/packages/packager.py @@ -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.