commit:     d9d822b5a8cb5c982247fb6871eef8b8467a05cb
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Sat Dec 22 07:19:25 2018 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Sun Dec 23 13:15:22 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d9d822b5

sys-kernel/linux-firmware: Fix building with USE="savedconfig".

Replace 'sort' + 'uniq -u' hack with BASH loops.

Fixes: https://bugs.gentoo.org/673494
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../linux-firmware/linux-firmware-20181218.ebuild  | 29 +++++++++++++++++---
 .../linux-firmware/linux-firmware-99999999.ebuild  | 31 ++++++++++++++++++----
 2 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/sys-kernel/linux-firmware/linux-firmware-20181218.ebuild 
b/sys-kernel/linux-firmware/linux-firmware-20181218.ebuild
index ae8305a2c90..d7eafdff4cd 100644
--- a/sys-kernel/linux-firmware/linux-firmware-20181218.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-20181218.ebuild
@@ -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

diff --git a/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild 
b/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
index e7b169ebe51..c158759fb1d 100644
--- a/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
@@ -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

Reply via email to