public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: bin/postinst-qa-check.d/
Date: Sat, 26 Aug 2017 21:16:33 +0000 (UTC)	[thread overview]
Message-ID: <1503782172.5e153472ee6c2f9514e20a6a6434804e46292e68.mgorny@gentoo> (raw)

commit:     5e153472ee6c2f9514e20a6a6434804e46292e68
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 15 09:10:06 2017 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> 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 <zmedico <AT> 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


             reply	other threads:[~2017-08-26 21:16 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-26 21:16 Michał Górny [this message]
  -- strict thread matches above, loose matches on Subject: below --
2017-08-26 21:16 [gentoo-commits] proj/portage:master commit in: bin/postinst-qa-check.d/ Michał Górny
2017-08-26 21:16 Michał Górny
2017-08-29 16:38 Michał Górny
2017-09-19 23:38 Zac Medico
2017-09-19 23:38 Zac Medico
2017-09-20  4:28 Zac Medico
2017-09-20 18:14 Zac Medico
2017-10-02 16:56 Michał Górny
2017-10-02 17:28 Zac Medico
2017-10-27 19:11 Zac Medico
2018-03-16  9:27 Zac Medico
2019-02-12 23:38 Zac Medico
2019-02-12 23:38 Zac Medico

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1503782172.5e153472ee6c2f9514e20a6a6434804e46292e68.mgorny@gentoo \
    --to=mgorny@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox