diff --git a/misc/archive/depfeedback.sh b/misc/archive/depfeedback.sh new file mode 100644 index 000000000..2847b2660 --- /dev/null +++ b/misc/archive/depfeedback.sh @@ -0,0 +1,82 @@ +#!/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 + diff --git a/scripts/Check-Deps-2 b/scripts/Check-Deps-2 index 9887d64fb..25ce3e0b3 100755 --- a/scripts/Check-Deps-2 +++ b/scripts/Check-Deps-2 @@ -55,7 +55,7 @@ while () { next if defined $pkg_redone{$p}; foreach ( split /\s+/, $l ) { - next if $deldeps{$p}{$_}; + next if defined $deldeps{$p}{$_}; push @{$dep{$p}}, $_; push @{$rdp{$_}}, $p; } @@ -138,6 +138,15 @@ for $iteration (1..99) { } print F "}\n"; close F; + + open(F, ">dependencies.dbg") || die $!; + foreach my $p (sort keys %crossdeps) { + foreach my $d (sort keys %{$crossdeps{$p}}) { + print F "$p $d\n"; + } + } + close F; + last; } $lop{$looplog} = $iteration;