blob: 7094e75a199561c14181c93ab6b9cc97a1289abd [file] [log] [blame]
# check for missing calls to xdg-utils regen functions
xdg_desktop_database_check() {
type -P update-desktop-database &>/dev/null || return
local d f all_files=() missing
for d in usr/share/applications; do
[[ -d ${d} ]] || continue
local files=() 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+=( -newercm "${d}"/mimeinfo.cache ) || missing=1
# 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=' {} +)
# if any files were found, update the db to avoid repeating
# the warning for subsequent packages
if [[ ${files[@]} ]]; then
all_files+=("${files[@]}")
addwrite "${d}"
update-desktop-database "${d}"
fi
done
# preinst initializes the baseline state for the posinst check
[[ ${PORTAGE_QA_PHASE} == preinst ]] && return
# parallel-install makes it impossible to blame a specific package
has parallel-install ${FEATURES} && return
# The eqatag call is prohibitively expensive if the cache is
# missing and there are a large number of files.
if [[ -z ${missing} && ${all_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 "${all_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() {
type -P update-mime-database &>/dev/null || return
local d f all_files=() missing
for d in usr/share/mime; do
[[ -d ${d} ]] || continue
local files=() 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+=( -newercm "${d}"/mime.cache ) || missing=1
while read -r -d $'\0' f; do
files+=( "${f}" )
done < <(find "${d}" -name '*.xml' "${find_args[@]}" -print0)
# if any files were found, update the db to avoid repeating
# the warning for subsequent packages
if [[ ${files[@]} ]]; then
all_files+=("${files[@]}")
addwrite "${d}"
update-mime-database "${d}"
fi
done
# preinst initializes the baseline state for the posinst check
[[ ${PORTAGE_QA_PHASE} == preinst ]] && return
# parallel-install makes it impossible to blame a specific package
has parallel-install ${FEATURES} && return
# The eqatag call is prohibitively expensive if the cache is
# missing and there are a large number of files.
if [[ -z ${missing} && ${all_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 "${all_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