| # 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_icon_cache_check() { |
| type -P gtk-update-icon-cache &>/dev/null || return |
| |
| local d f all_files=() missing |
| for d in usr/share/icons/*/; do |
| # xdg_icon_cache_update updates only themes with an index |
| [[ -f ${d}/index.theme ]] || continue |
| |
| local files=() find_args=( |
| # gtk-update-icon-cache supports only specific file |
| # suffixes; match that to avoid false positives |
| '(' -name '*.png' -o -name '*.svg' |
| -o -name '*.xpm' -o -name '*.icon' ')' |
| ) |
| # 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+=( -newercm "${d}"/icon-theme.cache ) || missing=1 |
| |
| # (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) |
| |
| # if any files were found, update the db to avoid repeating |
| # the warning for subsequent packages |
| if [[ ${files[@]} ]]; then |
| all_files+=("${files[@]}") |
| addwrite "${d}" |
| gtk-update-icon-cache -qf "${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 |
| |
| # avoid false-positives on first install (bug 649464) |
| [[ ${PN} == gtk-update-icon-cache ]] && 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: new icons were found installed but icon cache" |
| eqawarn "has not been updated:" |
| eqatag -v xdg-utils.icon-cache "${all_files[@]/#//}" |
| eqawarn "Please make sure to call xdg_icon_cache_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_icon_cache_check |
| xdg_mimeinfo_database_check |
| } |
| |
| xdg_utils_postinst_check |
| : # guarantee successful exit |
| |
| # vim:ft=sh |