OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-re Date: 17-Nov-2002 13:05:52 Branch: HEAD Handle: 2002111712055200 Modified files: openpkg-re openpkg-build Log: cleaned up upgrade logic. Now shows decisions in output. Ignore openpkg reverse dependencies because thats everything, you can get an all.all update with -z. Summary: Revision Changes Path 1.25 +44 -39 openpkg-re/openpkg-build ____________________________________________________________________________ Index: openpkg-re/openpkg-build ============================================================ $ cvs diff -u -r1.24 -r1.25 openpkg-build --- openpkg-re/openpkg-build 17 Nov 2002 09:20:42 -0000 1.24 +++ openpkg-re/openpkg-build 17 Nov 2002 12:05:52 -0000 1.25 @@ -716,20 +716,21 @@ return; } - if ($env->{zero}) { - $target->{REBUILD} = 1; - } elsif ($env->{installed}->{$target->{name}}) { - if (target_exists($target, $env->{installed})) { - if (target_suitable($target, $env->{with})) { - unless ($env->{upgrade} || - target_newer($target, $env->{installed})) { - print "# $target->{name} is already installed\n"; - return; - } - print "# forced upgrading $target->{name}\n"; - } else { - print "# rebuilding $target->{name}\n"; - } + # + # see if a target is already installed and requires a rebuild + # + if ($env->{installed}->{$target->{name}}) { + if ($target->{REBUILD}) { + print "# rebuilding $target->{name} (dependency)\n"; + } elsif ($env->{zero}) { + print "# rebuilding $target->{name} (zero)\n"; + } elsif ($env->{upgrade} && target_newer($target, $env->{installed})) { + print "# rebuilding $target->{name} (upgrade)\n"; + } elsif (!target_suitable($target, $env->{with})) { + print "# rebuilding $target->{name} (parameter mismatch)\n"; + } else { + print "# $target->{name} is already installed\n"; + return; } $target->{REBUILD} = 1; } @@ -737,33 +738,37 @@ $d = target_depends($target, $env->{repository}); $k = target_keeps($target, $env->{repository}); - %d = map { $_ => 1 } @$d, @$k; - return unless %d; - - %k = map { $_ => 1 } @$k; - - foreach (keys %d) { - - # old index misses a OpenPKG provider in the index... skip it - next if $_ eq 'OpenPKG'; - - ($t,$old) = dep2target($_, $env); - if ($t) { - if ($old) { - print "# $target->{name} uses ".vsn($t)." for $_\n"; - next; - } + # + # recurse over dependencies + # + if (@$d || @$k) { + + %d = map { $_ => 1 } @$d, @$k; + %k = map { $_ => 1 } @$k; + + foreach (keys %d) { + + # old index misses a OpenPKG provider in the index... skip it + next if $_ eq 'OpenPKG'; + + ($t,$old) = dep2target($_, $env); + if ($t) { + if ($old) { + print "# $target->{name} uses ".vsn($t)." for $_\n"; + next; + } - # record which targets to keep in blist - if ($k{$_}) { - push(@$blist,$t); - print "# $target->{name} installs ".vsn($t)." for $_\n"; + # record which targets to keep in blist + if ($k{$_}) { + push(@$blist,$t); + print "# $target->{name} installs ".vsn($t)." for $_\n"; + } else { + print "# $target->{name} requires ".vsn($t)." for $_\n"; + } + make_dep($t,$depth+1,$env,$list,$blist); } else { - print "# $target->{name} requires ".vsn($t)." for $_\n"; + die "FATAL: $target->{name} searches for a frood called '$_'\n"; } - make_dep($t,$depth+1,$env,$list,$blist); - } else { - die "FATAL: $target->{name} searches for a frood called '$_'\n"; } } @@ -771,7 +776,7 @@ push(@$list, $target); push(@{$env->{built}->{$target->{name}}->{vs($target)}}, $target); - if ($target->{REBUILD}) { + if ($target->{name} ne 'openpkg' && $target->{REBUILD}) { unless ($env->{revdep}) { $env->{revdep} = get_revdep($env); ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]