#!/bin/bash # # Given are builds without stage 9 in which broken packages # have been rebuilt unless all deps are resolved. # # This script is trying to resolve all cyclic deps causing # troubles in scripts/Check-Deps-2 by looking into the dep # files from the given builds and adding del entries to # scripts/dep_fixes.txt for those of the cyclic deps present # in scripts/dep_db.txt but not in the given builds deps. # # So you can do stuff like: # # while ./depfeedback.sh build/ref06* >> scripts/dep_fixes.txt; do true; done if [ "$1" = "merge" ] then shift perl -e ' my %deps; while (<>) { comp; next unless s/^(\S+)\s+del\s+//; my $p = $1; @_ = split /\s+/; $deps{$p}{$_} = 1 foreach (@_); } foreach (sort keys %deps) { print "$_", length $_ < 8 ? "\t\t" : length $_ >= 16 ? " " : "\t"; print "del\t", join(" ", sort keys %{$deps{$_}}), "\n" } ' "$@" exit 0 fi if [ -z "$1" -o ! -d "$1/var/adm/dependencies" ] then echo "Usage: $0 build/ [ ... ] >> scripts/dep_fixes.txt" echo " $0 merge list1 list2 list3 ..." exit 1 fi rm -f dependencies.dot dependencies.dbg rm -f dependencies.patch dependencies.done ./scripts/Check-Deps-2 > /dev/null if [ -f dependencies.dot ] then echo -n > dependencies.done while read dep pkg; do for x; do if [ -f "$x/var/adm/logs/5-$pkg.log" -a \ -f "$x/var/adm/dependencies/$pkg" ] then if ! grep -qx "$pkg: $dep" "$x/var/adm/dependencies/$pkg"; then echo "$pkg del $dep" >> dependencies.done fi fi done done < dependencies.dbg if [ -s dependencies.done ] then bash $0 merge dependencies.done echo Found $(wc -l < dependencies.done) questionable deps. >&2 else rm -f dependencies.dot dependencies.dbg rm -f dependencies.patch dependencies.done echo "No questionable deps found, still some cyclic deps left." >&2 exit 1 fi else rm -f dependencies.dot dependencies.dbg rm -f dependencies.patch dependencies.done echo "No cyclic deps left." >&2 exit 1 fi rm -f dependencies.dot dependencies.dbg rm -f dependencies.patch dependencies.done exit 0