sys-kernel/linux-firmware: Fix building with USE="savedconfig".
authorArfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
Sat, 22 Dec 2018 07:19:25 +0000 (08:19 +0100)
committerLars Wendler <polynomial-c@gentoo.org>
Sun, 23 Dec 2018 13:15:22 +0000 (14:15 +0100)
Replace 'sort' + 'uniq -u' hack with BASH loops.

Fixes: https://bugs.gentoo.org/673494
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
sys-kernel/linux-firmware/linux-firmware-20181218.ebuild
sys-kernel/linux-firmware/linux-firmware-99999999.ebuild

index ae8305a2c9018b7c5c8989f960242b67a78deb93..d7eafdff4cd9c379e000940baaacd9788d5c6bc4 100644 (file)
@@ -84,10 +84,31 @@ src_prepare() {
        if use savedconfig; then
                restore_config ${PN}.conf
                ebegin "Removing all files not listed in config"
-               find * \( \! -type d -and \! -name ${PN}.conf \) \
-                       | sort ${PN}.conf ${PN}.conf - \
-                       | uniq -u | xargs -r rm
-               eend $? || die
+
+               local file delete_file preserved_file preserved_files=()
+
+               while IFS= read -r file; do
+                       # Ignore comments.
+                       if [[ ${file} != "#"* ]]; then
+                               preserved_files+=("${file}")
+                       fi
+               done < ${PN}.conf || die
+
+               while IFS= read -d "" -r file; do
+                       delete_file=true
+                       for preserved_file in "${preserved_files[@]}"; do
+                               if [[ "${file}" == "${preserved_file}" ]]; then
+                                       delete_file=false
+                               fi
+                       done
+
+                       if ${delete_file}; then
+                               rm "${file}" || die
+                       fi
+               done < <(find * \( \! -type d -and \! -name ${PN}.conf \) -print0 || die)
+
+               eend || die
+
                # remove empty directories, bug #396073
                find -type d -empty -delete || die
        fi
index e7b169ebe516e49202d7862fffe3175494822e13..c158759fb1da496d55847e856d8f52514ecde3aa 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI="6"
@@ -84,10 +84,31 @@ src_prepare() {
        if use savedconfig; then
                restore_config ${PN}.conf
                ebegin "Removing all files not listed in config"
-               find * \( \! -type d -and \! -name ${PN}.conf \) \
-                       | sort ${PN}.conf ${PN}.conf - \
-                       | uniq -u | xargs -r rm
-               eend $? || die
+
+               local file delete_file preserved_file preserved_files=()
+
+               while IFS= read -r file; do
+                       # Ignore comments.
+                       if [[ ${file} != "#"* ]]; then
+                               preserved_files+=("${file}")
+                       fi
+               done < ${PN}.conf || die
+
+               while IFS= read -d "" -r file; do
+                       delete_file=true
+                       for preserved_file in "${preserved_files[@]}"; do
+                               if [[ "${file}" == "${preserved_file}" ]]; then
+                                       delete_file=false
+                               fi
+                       done
+
+                       if ${delete_file}; then
+                               rm "${file}" || die
+                       fi
+               done < <(find * \( \! -type d -and \! -name ${PN}.conf \) -print0 || die)
+
+               eend || die
+
                # remove empty directories, bug #396073
                find -type d -empty -delete || die
        fi