# wanna-build: coordination script for Debian buildds
# Copyright (C) 1998 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
# Copyright (C) 2005-2008 Ryan Murray <rmurray@debian.org>
+# Copyright (C) 2010 Andreas Barth <aba@not.so.argh.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
my @psrcs = &parse_argv( \@ARGV, '.');
use WB::QD;
my $srcs = WB::QD::readsourcebins($arch, $Pas, \@isrcs, \@ipkgs);
- 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;
+ 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);
+ parse_all_v3($$srcs, {'arch' => $arch, 'suite' => $distribution, 'time' => $curr_date});
@bpkgs = @ipkgs unless @bpkgs;
- call_edos_depcheck( {'arch' => $arch, 'pkgs' => @bpkgs, 'srcs' => $$srcs, 'depwait' => 1 });
+ call_edos_depcheck( {'arch' => $arch, 'pkgs' => \@bpkgs, 'srcs' => $$srcs, 'depwait' => 1 });
last SWITCH;
};
/^import/ && do {
}
print "$name: $ok\n" if $verbose;
} else {
- print "$name:\n";
+ print "- $name:\n";
print " - status: ok\n";
if ($pkg->{'binary_nmu_version'}) {
print " - binNMU:\n";
if ($api < 1) {
print "$name: NOT OK!\n $reason\n";
} else {
- print "$name:\n - status: not ok\n - reason: \"$reason\"\n";
+ print "- $name:\n - status: not ok\n - reason: \"$reason\"\n";
}
}
}
"by $real_user as $user";
if ($simulate) {
- printf ("update transactions: %s %s %s %s %s %s %s %s\n",
+ printf "update transactions: %s %s %s %s %s %s %s %s\n",
$pkg->{'package'}, $distribution,
$pkg->{'version'}, $action, $prevstate, $pkg->{'state'},
- $real_user, $user);
+ $real_user, $user;
return;
}
$dbh->do('INSERT INTO ' . transactions_table_name() .
my $sourceprefix="source---";
my $architecture=$args->{'arch'};
my $edosoptions = "-failures -explain -quiet";
- my @packagefiles = $args->{'pkgs'};
+ my $packagefiles = $args->{'pkgs'};
my $sourcesfile = $args->{'src'};
my $packagearch="";
- foreach my $packagefile (@packagefiles) {
+ foreach my $packagefile (@$packagefiles) {
open(P,$packagefile);
while (<P>) {
next unless /^Architecture/;
}
}
- print "calling: edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @packagefiles)."\n";
+ print "calling: edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles)."\n";
open(RESULT, '-|',
- "edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @packagefiles));
+ "edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles));
my $explanation="";
my $result={};
sub parse_all_v3() {
my $srcs = shift;
+ my $vars = shift;
my $db = get_all_source_info();
my $binary = $srcs->{'_binary'};
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};
unless ($pkg) {
next SRCS if $pkgs->{'status'} eq 'not-for-us';
+ my $logstr = "merge-v3 $vars->{'time'} ".$name."_$pkgs->{'version'} ($vars->{'arch'}, $vars->{'suite'}):";
# 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;
+ if ($binary->{$bin} and vercmp($pkgs->{'version'}, $binary->{$bin}->{'version'}) < 0) {
+ print "$logstr skipped because binaries (assumed to be) overwritten\n" if $verbose || $simulate;
next SRCS;
}
}
$pkg->{'package'} = $name;
}
+ my $logstr = "merge-v3 $vars->{'time'} ".$name."_$pkgs->{'version'} ($vars->{'arch'}, $vars->{'suite'}, previous: $pkg->{'version'}, $pkg->{'state'}):";
- if (isin($pkgs->{'status'}, qw (installed, related)) && $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 (isin($pkgs->{'status'}, qw (installed, related))) {
+ if (isin($pkgs->{'status'}, qw (installed related))) {
+ my $change = 0;
if ($pkg->{'state'} ne 'Installed') {
change_state( \$pkg, 'Installed');
- $pkg->{'version'} = $pkgs->{'version'};
- $pkg->{'installed_version'} = $pkgs->{'version'};
- $pkg->{'binary_nmu_version'} = $pkgs->{'binnmu'};
- $pkg->{'section'} = $pkgs->{'section'};
- $pkg->{'priority'} = $pkgs->{'priority'};
- if (isin($pkgs->{'status'}, qw (related))) {
- $pkg->{'notes'} = "related";
+ delete $pkg->{'depends'};
+ $change++;
+ }
+ my $attrs = { 'version' => 'version', 'installed_version' => 'version', 'binary_nmu_version' => 'binnmu', 'section' => 'section', 'priority' => 'priority' };
+ foreach my $k (keys %$attrs) {
+ if ($pkg->{$k} ne $pkgs->{$attrs->{$k}}) {
+ $pkg->{$k} = $pkgs->{$attrs->{$k}};
+ $change++;
}
- print "merge-v3: set $name ($arch) to installed/".$pkg->{'notes'}."\n" if $verbose || $simulate;
+ }
+ if (isin($pkgs->{'status'}, qw (related)) and $pkg->{'notes'} ne "related") {
+ $pkg->{'notes'} = "related";
+ $change++;
+ }
+ if ($change) {
+ 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;
}
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'};
+ next if isin( $pkg->{'state'}, qw(Not-For-Us Failed-Removed));
- 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)",
"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');
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 $vars->{'time'} ".$name."_$pkg->{'version'} ($vars->{'arch'}, $vars->{'suite'}, previous: $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};
}