From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id BAFD41396D1 for ; Sat, 26 Aug 2017 21:16:37 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C58CD1FC00F; Sat, 26 Aug 2017 21:16:36 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 956591FC006 for ; Sat, 26 Aug 2017 21:16:36 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 0CF2E341823 for ; Sat, 26 Aug 2017 21:16:35 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id ABD7783AE for ; Sat, 26 Aug 2017 21:16:33 +0000 (UTC) From: "Michał Górny" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Michał Górny" Message-ID: <1503782172.5e153472ee6c2f9514e20a6a6434804e46292e68.mgorny@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: bin/postinst-qa-check.d/ X-VCS-Repository: proj/portage X-VCS-Files: bin/postinst-qa-check.d/50gnome2-utils bin/postinst-qa-check.d/50xdg-utils X-VCS-Directories: bin/postinst-qa-check.d/ X-VCS-Committer: mgorny X-VCS-Committer-Name: Michał Górny X-VCS-Revision: 5e153472ee6c2f9514e20a6a6434804e46292e68 X-VCS-Branch: master Date: Sat, 26 Aug 2017 21:16:33 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 8305fac4-5b10-4c17-be36-163b2424b0cf X-Archives-Hash: 60d12a9f323f0d49b7ab7853a9c83568 commit: 5e153472ee6c2f9514e20a6a6434804e46292e68 Author: Michał Górny gentoo org> AuthorDate: Tue Aug 15 09:10:06 2017 +0000 Commit: Michał Górny gentoo org> CommitDate: Sat Aug 26 21:16:12 2017 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=5e153472 Add post-postinst checks for a few missed cache updates Add postinst-qa-check.d checks for missed desktop, mime-info and GTK+ icon cache updates. In all of the cases the checks simply look for any installed files that are newer than the cache. This check has some limitations: it assumes that mtime is not preserved when copying files to D, it can't distinguish whether the files were installed by the current package (it reports all new files since the last cache update) and it can't distinguish between the update on postinst and postrm. However, it's certainly a step forward and will help find a few bugs. Reviewed-by: Zac Medico gentoo.org> bin/postinst-qa-check.d/50gnome2-utils | 38 ++++++++++++++++++++ bin/postinst-qa-check.d/50xdg-utils | 65 ++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/bin/postinst-qa-check.d/50gnome2-utils b/bin/postinst-qa-check.d/50gnome2-utils new file mode 100644 index 000000000..68e21cb74 --- /dev/null +++ b/bin/postinst-qa-check.d/50gnome2-utils @@ -0,0 +1,38 @@ +# check for missing calls to gnome2-utils regen functions + +gnome2_icon_cache_check() { + local d f files=() find_args + for d in usr/share/icons/*/; do + # gnome2_icon_cache_update updates only themes with an index + [[ -f ${d}/index.theme ]] || continue + + find_args=() + # if the cache does not exist at all, we complain for any file + # otherwise, we look for files newer than the cache + [[ -f ${d}/icon-theme.cache ]] && + find_args+=( -newer "${d}"/icon-theme.cache ) + + # (use -mindepth 2 to easily skip the cache files) + while read -r -d $'\0' f; do + files+=( "${f}" ) + done < <(find "${d}" -mindepth 2 -type f "${find_args[@]}" -print0) + done + + if [[ ${files[@]} ]]; then + eqawarn "QA Notice: new icons were found installed but GTK+ icon cache" + eqawarn "has not been updated:" + eqatag -v gnome2-utils.icon-cache "${files[@]/#//}" + eqawarn "Please make sure to call gnome2_icon_cache_update()" + eqawarn "in pkg_postinst() and pkg_postrm() phases of appropriate pkgs." + fi +} + +gnome2_utils_postinst_check() { + cd "${EROOT}" || die + gnome2_icon_cache_check +} + +gnome2_utils_postinst_check +: # guarantee successful exit + +# vim:ft=sh diff --git a/bin/postinst-qa-check.d/50xdg-utils b/bin/postinst-qa-check.d/50xdg-utils new file mode 100644 index 000000000..4bc7bee9a --- /dev/null +++ b/bin/postinst-qa-check.d/50xdg-utils @@ -0,0 +1,65 @@ +# check for missing calls to xdg-utils regen functions + +xdg_desktop_database_check() { + local d f files=() + for d in usr/share/applications; do + [[ -d ${d} ]] || continue + + find_args=() + # if the cache does not exist at all, we complain for any file + # otherwise, we look for files newer than the cache + [[ -f ${d}/mimeinfo.cache ]] && + find_args+=( -newer "${d}"/mimeinfo.cache ) + + # look for any .desktop files that are newer than the cache + # and that have any mime types defined + while read -r -d $'\0' f; do + files+=( "${f}" ) + done < <(find "${d}" -name '*.desktop' "${find_args[@]}" \ + -exec grep -lZi '^MimeType=' {} +) + done + + if [[ ${files[@]} ]]; then + eqawarn "QA Notice: .desktop files with MimeType= were found installed" + eqawarn "but desktop mimeinfo cache has not been updated:" + eqatag -v xdg-utils.desktop "${files[@]/#//}" + eqawarn "Please make sure to call xdg_desktop_database_update()" + eqawarn "in pkg_postinst() and pkg_postrm() phases of appropriate pkgs." + fi +} + +xdg_mimeinfo_database_check() { + local d f files=() + for d in usr/share/mime; do + [[ -d ${d} ]] || continue + + find_args=() + # if the cache does not exist at all, we complain for any file + # otherwise, we look for files newer than the cache + [[ -f ${d}/mime.cache ]] && + find_args+=( -newer "${d}"/mime.cache ) + + while read -r -d $'\0' f; do + files+=( "${f}" ) + done < <(find "${d}" -name '*.xml' "${find_args[@]}" -print0) + done + + if [[ ${files[@]} ]]; then + eqawarn "QA Notice: mime-info files were found installed but mime-info" + eqawarn "cache has not been updated:" + eqatag -v xdg-utils.mime-info "${files[@]/#//}" + eqawarn "Please make sure to call xdg_mimeinfo_database_update()" + eqawarn "in pkg_postinst() and pkg_postrm() phases of appropriate pkgs." + fi +} + +xdg_utils_postinst_check() { + cd "${EROOT}" || die + xdg_desktop_database_check + xdg_mimeinfo_database_check +} + +xdg_utils_postinst_check +: # guarantee successful exit + +# vim:ft=sh