#!/bin/bash package_etc_update="/etc/portage/package.etc-update" # remove previously created etc-update temp files rm -rf /var/tmp/etc-update-* # run etc-update with -p, so that it will do trivial merges, and -7 to create tmp files etc-update -p --automode -7 > /dev/null files=$(find /var/tmp/etc-update-*/files/ -type f) for file in $files; do orig_config=$(head -n 1 $file) cfg_list=($(tail -n +2 $file)) IFS=$'\n' RULES=( $(grep ${orig_config} ${package_etc_update}) ) for rule in ${RULES[@]}; do IFS=$' ' rule=(${rule}) if [[ ${#rule[@]} > 2 ]]; then # MD5sums are included in the rule for cfg in ${cfg_list[@]}; do md5sum_cfg=$(md5sum $cfg | cut -d' ' -f1) for md5 in ${rule[@]:3}; do if [[ $md5 == $md5sum_cfg ]]; then if [[ ${rule[0]} == "accept" ]]; then mv $cfg $orig_config rm ${cfg_list[@]} > /dev/null elif [[ ${rule[0]} == "reject" ]]; then rm $cfg > /dev/null fi break fi done done else # No MD5sums are in the rule if [[ ${rule[0]} == "accept" ]]; then mv ${cfg_list[${#cfg_list[@]}-1]} $orig_config rm ${cfg_list[@]} > /dev/null elif [[ ${rule[0]} == "reject" ]]; then rm ${cfg_list[@]} > /dev/null fi fi done unset IFS done