From: Michael Tremer Date: Mon, 21 Feb 2011 21:34:18 +0000 (+0100) Subject: Fix symlink handling on packager. X-Git-Tag: 0.9.3~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58d47ee676b840db4a12089449554dc47ca552b4;p=pakfire.git Fix symlink handling on packager. Symlinks did not get packages properly and it was possible to archive (and remove!) files more than one time. --- diff --git a/pakfire/packages/packager.py b/pakfire/packages/packager.py index 301e56793..1fdc3f941 100644 --- a/pakfire/packages/packager.py +++ b/pakfire/packages/packager.py @@ -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()