#!/bin/bash PORTDIR=$(portageq portdir) DISTDIR=$(portageq envvar DISTDIR) cd "${PORTDIR}" [[ $# -le 0 ]] \ && SEARCH_PATHS=$(ls -d *-*) \ || SEARCH_PATHS="${@}" # Broken digest (wrong SHA256 on some $DISTFILES files) find ${SEARCH_PATHS} -name "digest-*" | \ while read digest ; do pkgdir="${digest%%/files/*}" ebuild="${pkgdir}/${digest##*/files/digest-}.ebuild" sed -n 's:^SHA256 \([0-9a-f]\+\) \([^ ]\+\) .*:\2 \1:p' "${digest}" | \ while read digest_file digest_sha ; do [[ -f ${DISTDIR}/${digest_file} ]] || continue good_sha=$(sha256deep "${DISTDIR}/${digest_file}") good_sha="${good_sha%% *}" [[ ${good_sha} == ${digest_sha} ]] && continue echo "Wrong digest for ${ebuild} on ${digest_file}" #fix: ebuild "${ebuild}" digest done done # Broken Manifest (wrong SHA256 on some $PORTDIR files) find ${SEARCH_PATHS} -name "Manifest" | \ while read manifest ; do pkgdir="${manifest%%/Manifest}" ebuild=$(ls -1 ${pkgdir}/*.ebuild 2>/dev/null | head -n 1) || continue sed -n 's:^SHA256 \([0-9a-f]\+\) \([^ ]\+\) .*:\2 \1:p' "${manifest}" | \ while read manifest_file manifest_sha ; do [[ -f ${pkgdir}/${manifest_file} ]] || continue good_sha=$(sha256deep "${pkgdir}/${manifest_file}") good_sha="${good_sha%% *}" [[ ${good_sha} == ${manifest_sha} ]] && continue echo "Wrong Manifest in ${pkgdir} on ${manifest_file}" #fix: ebuild "${ebuild}" digest done done