commit:     abee95677957faab99ba412b96b2da40fb23c133
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 10 18:11:03 2016 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sun Apr 10 18:12:17 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=abee9567

eclass: Improve packlist fixing, based on work by kent\n; bug 579492 and more

 eclass/perl-functions.eclass | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/eclass/perl-functions.eclass b/eclass/perl-functions.eclass
index 7568473..e9c3fcb 100644
--- a/eclass/perl-functions.eclass
+++ b/eclass/perl-functions.eclass
@@ -131,12 +131,31 @@ perl_delete_emptybsdir() {
 # @DESCRIPTION:
 # Look through ${D} for .packlist text files containing the temporary 
installation
 # folder (i.e. ${D}). If the pattern is found, silently replace it with `/'.
+# Remove duplicate entries; then validate all entries in the packlist against 
${D}
+# and prune entries that do not correspond to installed files.
 perl_fix_packlist() {
        debug-print-function $FUNCNAME "$@"
 
+       local packlist_temp="${T}/.gentoo_packlist_temp"
        find "${D}" -type f -name '.packlist' -print0 | while read -rd '' f ; do
                if file "${f}" | grep -q -i " text" ; then
+                        einfo "Fixing packlist file /${f#${D}}"
+
+                       # remove the temporary build dir path
                        sed -i -e "s:${D}:/:g" "${f}"
+
+                       # remove duplicate entries
+                       sort -u "${f}" > "${packlist_temp}"
+                       mv "${packlist_temp}" "${f}"
+
+                       # remove files that dont exist
+                       cat "${f}" | while read -r entry; do
+                               if [ ! -e "${D}/${entry}" ]; then
+                                       einfo "Pruning surplus packlist entry 
${entry}"
+                                       grep -v -x -F "${entry}" "${f}" > 
"${packlist_temp}"
+                                       mv "${packlist_temp}" "${f}"
+                               fi
+                       done
                fi
        done
 }

Reply via email to