X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fwanna-build;h=9cc19c8f77693ca85b776ab0b89c07bacb86f0eb;hb=3d6d4dff99af12ffe90c3b7da9b13c5346039cb9;hp=e76e2f80eadf58eb082b2afdc9c30f67818db872;hpb=124a948d61f50f14b7deac79463cc2f761a91a6d;p=wannabuild.git diff --git a/bin/wanna-build b/bin/wanna-build index e76e2f8..9cc19c8 100755 --- a/bin/wanna-build +++ b/bin/wanna-build @@ -62,6 +62,7 @@ our ($verbose, $mail_logs, $list_order, $list_state, ); our $Pas = '/org/buildd.debian.org/etc/packages-arch-specific/Packages-arch-specific'; our $simulate = 0; +our $api = 0; # allow buildds to specify an different api # global vars $ENV{'PATH'} = "/bin:/usr/bin:/usr/local/bin:/org/wanna-build/bin/"; @@ -108,6 +109,11 @@ elsif ($progname =~ /^list-(.*)$/) { my %options = (# flags simulate => { flag => \$simulate }, # this is not supported by all operations (yet)! + api => { arg => \$api, code => sub { + # official apis are numeric + die "$api isn't numeric" unless int($api) eq $api; + die "$api too large" unless $api <= 1; + } }, verbose => { short => "v", flag => \$verbose }, override => { short => "o", flag => \$opt_override }, "create-db" => { flag => \$opt_create_db }, @@ -491,7 +497,7 @@ sub process { /^merge-v3/ && do { die "This operation is restricted to admin users\n" if (defined @conf::admin_users and !isin( $real_user, @conf::admin_users) and !$simulate); - # call with installed-packages+ . installed-sources+ [ . available-for-build-packages+ ] + # call with installed-packages+ . installed-sources+ [ . available-for-build-packages* [ . consider-as-installed-source* ] ] # in case available-for-build-packages is not specified, installed-packages are used lock_table() unless $simulate; my $replacemap = { '%ARCH%' => $arch, '%SUITE%' => $distribution }; @@ -499,8 +505,18 @@ sub process { my @ipkgs = &parse_argv( \@ARGV, '.'); my @isrcs = &parse_argv( \@ARGV, '.'); my @bpkgs = &parse_argv( \@ARGV, '.'); + my @psrcs = &parse_argv( \@ARGV, '.'); use WB::QD; my $srcs = WB::QD::readsourcebins($arch, $Pas, \@isrcs, \@ipkgs); + if (@psrcs) { + my $psrcs = WB::QD::readsourcebins($arch, $Pas, \@psrcs, []); + foreach my $k (keys %$$psrcs) { + next if $$srcs->{$k}; + my $pkg = $$psrcs->{$k}; + $pkg->{'status'} = 'related'; + $$srcs->{$k} = $pkg; + } + } parse_all_v3($$srcs); @bpkgs = @ipkgs unless @bpkgs; call_edos_depcheck( {'arch' => $arch, 'pkgs' => @bpkgs, 'srcs' => $$srcs, 'depwait' => 1 }); @@ -710,6 +726,7 @@ sub add_one_building { } } if ($ok) { + if ($api < 1) { my $ok = 'ok'; if ($pkg->{'binary_nmu_version'}) { print "$name: Warning: needs binary NMU $pkg->{'binary_nmu_version'}\n" . @@ -720,16 +737,29 @@ sub add_one_building { if $pkg->{'previous_state'} =~ /^Failed/ || $pkg->{'state'} =~ /^Failed/; } + print "$name: $ok\n" if $verbose; + } else { + print "- $name:\n"; + print " - status: ok\n"; + if ($pkg->{'binary_nmu_version'}) { + print " - binNMU:\n"; + print " - version: $pkg->{'binary_nmu_version'}\n"; + print " - changelog: $pkg->{'binary_nmu_changelog'}\n"; + } + } change_state( \$pkg, 'Building' ); $pkg->{'package'} = $name; $pkg->{'version'} = $version; $pkg->{'builder'} = $user; log_ta( $pkg, "--take" ); update_source_info($pkg); - print "$name: $ok\n" if $verbose; } else { + if ($api < 1) { print "$name: NOT OK!\n $reason\n"; + } else { + print "- $name:\n - status: not ok\n - reason: \"$reason\"\n"; + } } } @@ -2276,6 +2306,13 @@ sub log_ta { "changed from $prevstate to $pkg->{'state'} ". "by $real_user as $user"; + if ($simulate) { + printf "update transactions: %s %s %s %s %s %s %s %s\n", + $pkg->{'package'}, $distribution, + $pkg->{'version'}, $action, $prevstate, $pkg->{'state'}, + $real_user, $user; + return; + } $dbh->do('INSERT INTO ' . transactions_table_name() . ' (package, distribution, version, action, ' . ' prevstate, state, real_user, set_user, time) ' . @@ -2702,6 +2739,7 @@ sub get_readonly_source_info { sub get_source_info { my $name = shift; + return get_readonly_source_info($name) if $simulate; my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change)) as state_days FROM ' . table_name() . ' WHERE package = ? AND distribution = ?' . ' FOR UPDATE', @@ -2765,6 +2803,7 @@ sub get_all_source_info { sub update_source_info { my $pkg = shift; + return if $simulate; my $pkg2 = get_source_info($pkg->{'package'}); if (! defined $pkg2) @@ -2817,6 +2856,7 @@ sub update_source_info { } sub add_source_info { + return if $simulate; my $pkg = shift; $dbh->do('INSERT INTO ' . table_name() . ' (package, distribution) values (?, ?)', @@ -2824,6 +2864,7 @@ sub add_source_info { } sub del_source_info { + return if $simulate; my $name = shift; $dbh->do('DELETE FROM ' . table_name() . ' WHERE package = ? AND distribution = ?', @@ -2839,6 +2880,7 @@ sub get_user_info { } sub update_user_info { + return if $simulate; my $user = shift; $dbh->do('UPDATE ' . user_table_name() . ' SET last_seen = now() WHERE username = ?' . @@ -2849,6 +2891,7 @@ sub update_user_info { sub add_user_info { + return if $simulate; my $user = shift; $dbh->do('INSERT INTO ' . user_table_name() . ' (username, distribution, last_seen)' . @@ -2859,6 +2902,7 @@ sub add_user_info { sub lock_table() { + return if $simulate; $dbh->do('LOCK TABLE ' . table_name() . ' IN EXCLUSIVE MODE', undef) or die $dbh->errstr; } @@ -2882,7 +2926,7 @@ sub parse_all_v3() { SRCS: foreach my $name (keys %$srcs) { - next if $name eq '_binaries'; + next if $name eq '_binary'; # state = installed, out-of-date, uncompiled, not-for-us my $pkgs = $srcs->{$name}; @@ -2890,21 +2934,23 @@ sub parse_all_v3() { unless ($pkg) { next SRCS if $pkgs->{'status'} eq 'not-for-us'; + my $logstr = "merge-v3 ".$name." ($arch):"; # does at least one binary exist in the database and is more recent - if so, we're probably just outdated, ignore the source package for my $bin (@{$pkgs->{'binary'}}) { if ($binary->{$bin} and vercmp($pkgs->{'version'}, $binary->{$bin}) < 0) { - print "merge-v3: skiping $name ($arch)\n" if $verbose || $simulate; + print "$logstr skipped because binaries (assumed to be) overwritten\n" if $verbose || $simulate; next SRCS; } } $pkg->{'package'} = $name; } + my $logstr = "merge-v3 ".$name."_$pkgs->{'version'} ($arch, previous-state: $pkg->{'state'}):"; - if ($pkgs->{'status'} eq 'installed' && $pkg->{'binary_nmu_version'} && $pkgs->{'binnmu'} < $pkg->{'binary_nmu_version'}) { + if (isin($pkgs->{'status'}, qw (installed related)) && $pkg->{'binary_nmu_version'} && $pkgs->{'binnmu'} < $pkg->{'binary_nmu_version'}) { $pkgs->{'status'} = 'out-of-date'; } - if ($pkgs->{'status'} eq 'installed') { + if (isin($pkgs->{'status'}, qw (installed related))) { if ($pkg->{'state'} ne 'Installed') { change_state( \$pkg, 'Installed'); $pkg->{'version'} = $pkgs->{'version'}; @@ -2912,7 +2958,10 @@ sub parse_all_v3() { $pkg->{'binary_nmu_version'} = $pkgs->{'binnmu'}; $pkg->{'section'} = $pkgs->{'section'}; $pkg->{'priority'} = $pkgs->{'priority'}; - print "merge-v3: set $name ($arch) to installed\n" if $verbose || $simulate; + if (isin($pkgs->{'status'}, qw (related))) { + $pkg->{'notes'} = "related"; + } + print "$logstr set to installed/".$pkg->{'notes'}."\n" if $verbose || $simulate; log_ta( $pkg, "--merge-v3: installed" ) unless $simulate; update_source_info($pkg) unless $simulate; } @@ -2926,18 +2975,21 @@ sub parse_all_v3() { change_state( \$pkg, "Failed-Removed" ); log_ta( $pkg, "--merge-v3: Failed-Removed" ) unless $simulate; update_source_info($pkg) unless $simulate; - print "$name ($pkg->{'version'}): (virtually) deleted from database\n" if $verbose || $simulate; + print "$logstr (virtually) deleted from database\n" if $verbose || $simulate; next; } - print "should delete $name (not-for-us)\n" if $verbose || $simulate || 1; # not implemented yet on purpose + print "$logstr should delete (not-for-us according to P-a-s)\n" if $verbose || $simulate || 1; # not implemented yet on purpose next; } # only uncompiled / out-of-date are left, so check if anything new + if (!(isin($pkgs->{'status'}, qw (uncompiled out-of-date)))) { + print "$logstr package in unknown state: $pkgs->{'status'}\n"; + next SRCS; + } next if $pkgs->{'version'} eq $pkg->{'version'}; - print "should set $name to needs-builds\n" if $simulate; if (defined( $pkg->{'state'} ) && isin( $pkg->{'state'}, qw(Building Built Build-Attempted))) { send_mail( $pkg->{'builder'}, "new version of $name (dist=$distribution)", @@ -2947,7 +2999,7 @@ sub parse_all_v3() { "compiling $name yet, you can stop it to save some work.\n". "Just to inform you...\n". "(This is an automated message)\n" ) unless $simulate; - print "$name: new version ($pkgs->{'version'}) while building $pkg->{'version'} -- sending mail to builder ($pkg->{'builder'})\n" + print "$logstr new version while building $pkg->{'version'} -- sending mail to builder ($pkg->{'builder'})\n" if $verbose || $simulate; } change_state( \$pkg, 'Needs-Build'); @@ -2962,16 +3014,17 @@ sub parse_all_v3() { delete $pkg->{'binary_nmu_changelog'}; log_ta( $pkg, "--merge-v3: needs-build" ) unless $simulate; update_source_info($pkg) unless $simulate; - print "$name ($pkgs->{'version'} / $arch) needs rebuilding now.\n" if $verbose || $simulate; + print "$logstr set to needs-builds\n" if $simulate || $verbose; } foreach my $name (keys %$db) { next if $srcs->{$name}; my $pkg = $db->{$name}; + my $logstr = "merge-v3 ".$name."_$pkg->{'version'} ($arch, previous-state: $pkg->{'state'}):"; # package disappeared - delete change_state( \$pkg, 'deleted' ); log_ta( $pkg, "--merge-v3: deleted" ) unless $simulate; - print "$name ($pkg->{'version'} / $arch) deleted from database\n" if $verbose || $simulate; + print "$logstr deleted from database\n" if $verbose || $simulate; del_source_info($name) unless $simulate; delete $db->{$name}; }