# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
+use strict;
+use warnings;
package conf;
+
+use vars qw< $basedir $dbbase $transactlog $mailprog $buildd_domain >;
# defaults
$basedir ||= "/var/lib/debbuild";
$dbbase ||= "build-db";
if !-x $conf::mailprog;
package main;
-use strict;
use POSIX;
use FileHandle;
use File::Copy;
die "Unknown state to list: $list_state\n"
if !isin( $list_state, qw(needs-build building uploaded
built build-attempted failed installed dep-wait
- not-for-us all failed-removed
+ not-for-us auto-not-for-us all failed-removed
install-wait reupload-wait bd-uninstallable));} },
# options with args
dist =>
$dbh->begin_work or die $dbh->errstr;
-my $q = 'SELECT distribution, public, auto_dep_wait, build_dep_resolver, archive FROM distributions';
+my $q = 'SELECT distribution, public, auto_dep_wait, build_dep_resolver, suppress_successful_logs, archive FROM distributions';
my $rows = $dbh->selectall_hashref($q, 'distribution');
foreach my $name (keys %$rows) {
$distributions{$name} = {};
$distributions{$name}->{'noadw'} = 1 if !($rows->{$name}->{'auto_dep_wait'});
$distributions{$name}->{'hidden'} = 1 if !($rows->{$name}->{'public'});
$distributions{$name}->{'build_dep_resolver'} = $rows->{$name}->{'build_dep_resolver'} if $rows->{$name}->{'build_dep_resolver'};
+ $distributions{$name}->{'suppress_successful_logs'} = $rows->{$name}->{'suppress_successful_logs'} if $rows->{$name}->{'suppress_successful_logs'};
$distributions{$name}->{'archive'} = $rows->{$name}->{'archive'} if $rows->{$name}->{'archive'};
}
@ARGV = ( $ARGS[0] );
my $pkgs = parse_packages(0);
@ARGV = ( $ARGS[3] );
- my $pkgs = parse_packages(1);
+ $pkgs = parse_packages(1);
@ARGV = ( $ARGS[1] );
parse_quinn_diff(0);
@ARGV = ( $ARGS[2] );
print " - archive: $distributions{$distribution}->{'archive'}\n" if $distributions{$distribution}->{'archive'};
print " - build_dep_resolver: $distributions{$distribution}->{'build_dep_resolver'}\n" if $distributions{$distribution}->{'build_dep_resolver'};
print " - arch_all: $pkg->{'build_arch_all'}\n" if $pkg->{'build_arch_all'};
+ print " - suppress_successful_logs: $distributions{$distribution}->{'suppress_successful_logs'}\n" if $distributions{$distribution}->{'suppress_successful_logs'};
}
change_state( \$pkg, 'Building' );
$pkg->{'package'} = $name;
my $printfmt = shift;
my $pkg = shift;
my $var = shift;
+
=pod
+
Within an format string, the following values are allowed (need to be preceded by %).
This can be combined to e.g.
wanna-build --format='wanna-build -A %a --give-back %p_%v' -A mipsel --list=failed
Text could contain further %. To start with !, use %!
=cut
+
return stringf($printfmt, (
'p' => make_fmt( $pkg->{'package'}, $pkg, $var),
'a' => make_fmt( $arch, $pkg, $var),
'anytime' => 'Build-time',
'extra_depends' => 'Extra-Dependencies',
'extra_conflicts' => 'Extra-Conflicts',
+ 'build_arch_all' => 'Build-Arch-All',
);
foreach $name (@_) {
my $file = shift;
print "Reading ASCII database from $file..." if $verbose >= 1;
- open( F, "<$file" ) or
+ open( my $fh, '<', $file ) or
die "Can't open database $file: $!\n";
local($/) = ""; # read in paragraph mode
- while( <F> ) {
+ while( <$fh> ) {
my( %thispkg, $name );
s/[\s\n]+$//;
s/\n[ \t]+/\376\377/g; # fix continuation lines
or die $dbh->errstr;
}
}
- close( F );
+ close( $fh );
print "done\n" if $verbose >= 1;
}
die "Bad state $pkg->{'state'} of package $pkg->{Package}\n"
if !isin( $pkg->{'state'},
qw(Needs-Build Building Built Build-Attempted Uploaded Installed Dep-Wait Dep-Wait-Removed
- Failed Failed-Removed Not-For-Us BD-Uninstallable
+ Failed Failed-Removed Not-For-Us BD-Uninstallable Auto-Not-For-Us
) );
}
my($name,$pkg,$key);
print "Writing ASCII database to $file..." if $verbose >= 1;
- open( F, ">$file" ) or
+ open( my $fh, '>', $file ) or
die "Can't open export $file: $!\n";
my $db = get_all_source_info();
$val =~ s/\n*$//;
$val =~ s/^/ /mg;
$val =~ s/^ +$/ ./mg;
- print F "$key: $val\n";
+ print $fh "$key: $val\n";
}
- print F "\n";
+ print $fh "\n";
}
- close( F );
+ close( $fh );
print "done\n" if $verbose >= 1;
}
$to .= '@' . $domain if $to !~ /\@/;
$text =~ s/^\.$/../mg;
local $SIG{'PIPE'} = 'IGNORE';
- open( PIPE, "| $conf::mailprog -oem $to" )
+ open( my $pipe, '|-', "$conf::mailprog -oem $to" )
or die "Can't open pipe to $conf::mailprog: $!\n";
chomp $text;
- print PIPE "From: $from\n";
- print PIPE "Subject: $subject\n\n";
- print PIPE "$text\n";
- close( PIPE );
+ print $pipe "From: $from\n";
+ print $pipe "Subject: $subject\n\n";
+ print $pipe "$text\n";
+ close( $pipe );
}
# for parsing input to dep-wait
my $packagearch="";
foreach my $packagefile (@$packagefiles) {
- open(P,$packagefile);
- while (<P>) {
+ open(my $fh,'<', $packagefile);
+ while (<$fh>) {
next unless /^Architecture/;
next if /^Architecture:\s*all/;
/Architecture:\s*([^\s]*)/;
return "Package file contains different architectures: $packagearch, $1";
}
}
- close P;
+ close $fh;
}
if ( $architecture eq "" ) {
}
print "calling: edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles)."\n";
- open(RESULT, '-|',
+ open(my $result_cmd, '-|',
"edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles));
my $explanation="";
my $result={};
my $binpkg="";
- while (<RESULT>) {
+ while (<$result_cmd>) {
# source---pulseaudio (= 0.9.15-4.1~bpo50+1): FAILED
# source---pulseaudio (= 0.9.15-4.1~bpo50+1) depends on missing:
# - libltdl-dev (>= 2.2.6a-2)
}
}
- close RESULT;
+ close $result_cmd;
$result->{$binpkg} = $explanation if $binpkg;
return $result;
or die $dbh->errstr;
}
-sub lock_table()
-{
+sub lock_table {
return if $simulate;
$dbh->do('LOCK TABLE ' . table_name() .
' IN EXCLUSIVE MODE', undef) or die $dbh->errstr;
}
-sub parse_argv() {
+sub parse_argv {
# parts the array $_[0] and $_[1] and returns the sub-array (modifies the original one)
my @ret = ();
my $args = shift;
return @ret;
}
-sub parse_all_v3() {
+sub parse_all_v3 {
my $srcs = shift;
my $vars = shift;
my $db = get_all_source_info();
foreach my $name (keys %$srcs) {
next if $name eq '_binary';
- # state = installed, out-of-date, uncompiled, not-for-us
+ # state = installed, out-of-date, uncompiled, not-for-us, auto-not-for-us
my $pkgs = $srcs->{$name};
my $pkg = $db->{$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'}):";
+ my $logstr = sprintf("merge-v3 %s %s_%s (%s, %s):", $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'}}) {
}
my $logstr = "merge-v3 $vars->{'time'} ".$name."_$pkgs->{'version'}".
($pkgs->{'binnmu'} ? ";b".$pkgs->{'binnmu'} : "").
- "($vars->{'arch'}, $vars->{'suite'}, previous: $pkg->{'version'}".
+ " ($vars->{'arch'}, $vars->{'suite'}, previous: $pkg->{'version'}".
($pkg->{'binary_nmu_version'} ? ";b".$pkg->{'binary_nmu_version'} : "").
", $pkg->{'state'}):";
next;
}
+ if ($pkgs->{'status'} eq 'auto-not-for-us') {
+ next if isin( $pkg->{'state'}, qw(Not-For-Us Failed Failed-Removed Dep-Wait Dep-Wait-Removed Auto-Not-For-Us));
+ # if the package is currently current, the status is Installed, not not-for-us
+
+ change_state( \$pkg, "Auto-Not-For-Us" );
+ log_ta( $pkg, "--merge-v3: Auto-Not-For-Us" ) unless $simulate;
+ update_source_info($pkg) unless $simulate;
+ print "$logstr set to auto-not-for-us\n" if $verbose || $simulate;
+ next SRCS;
+ }
+
# 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";