# 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;
+use 5.010;
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;
}
}
+$distribution ||= "sid";
if ($distribution eq 'any-priv') {
- $privmode = 'yes';
+ $privmode = 1;
$distribution = 'any';
}
if ($distribution eq 'any-unpriv') {
- $privmode = 'no';
+ $privmode = 0;
$distribution = 'any';
}
my $schema_suffix = '';
$recorduser //= (not -t and $user =~ /^buildd_/);
-if (isin( $op_mode, qw(list info)) && $distribution !~ /security/ && !$recorduser && !($privmode eq 'yes')) {
+if (isin( $op_mode, qw(list info)) && $distribution !~ /security/ && !$recorduser && !($privmode)) {
$dbh = DBI->connect("DBI:Pg:service=wanna-build") ||
die "FATAL: Cannot open database: $DBI::errstr\n";
$schema_suffix = '_public';
$op_mode = $category ? "set-failed" : "set-building"
if !$op_mode; # default operation
-$distribution ||= "sid";
undef $distribution if $distribution eq 'any';
if ($distribution) {
my @dists = split(/[, ]+/, $distribution);
my $yamldir = "/org/wanna-build/etc/yaml";
my @files = ('wanna-build.yaml');
if ((getpwuid($>))[7]) { push (@files, ((getpwuid($>))[7])."/.wanna-build.yaml"); }
-if ($user =~ /(buildd.*)-/) { push (@files, "$1.yaml") };
+if ($user && $user =~ /(buildd.*)-/) { push (@files, "$1.yaml") };
if ($user) { push ( @files, "$user.yaml"); }
foreach my $file (@files) {
my $cfile = File::Spec->rel2abs( $file, $yamldir );
@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] );
my $scale = $priomap->{'waitingdays'}->{'scale'} || 1;
$pkg->{'calprio'} += $days * $scale;
- my $btime = max($pkg->{'anytime'}, $pkg->{'successtime'});
- my $bhours = defined($btime) ? int($btime/3600) : ($priomap->{'buildhours'}->{'default'} || 2);
+ my $btime = max($pkg->{'anytime'}//0, $pkg->{'successtime'}//0);
+ my $bhours = $btime ? int($btime/3600) : ($priomap->{'buildhours'}->{'default'} || 2);
$bhours = $priomap->{'buildhours'}->{'min'} if $priomap->{'buildhours'}->{'min'} and $bhours < $priomap->{'buildhours'}->{'min'};
$bhours = $priomap->{'buildhours'}->{'max'} if $priomap->{'buildhours'}->{'max'} and $bhours > $priomap->{'buildhours'}->{'max'};
$scale = $priomap->{'buildhours'}->{'scale'} || 1;
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),
'u' => make_fmt( $pkg->{'builder'}, $pkg, $var),
'X' => make_fmt( sub {
my $c = "$pkg->{'priority'}:$pkg->{'notes'}";
- $c .= ":PREV-FAILED" if $pkg->{'previous_state'} =~ /^Failed/;
+ $c .= ":PREV-FAILED" if $pkg->{'previous_state'} && $pkg->{'previous_state'} =~ /^Failed/;
$c .= ":bp{" . $pkg->{'buildpri'} . "}" if defined $pkg->{'buildpri'};
$c .= ":binNMU{" . $pkg->{'binary_nmu_version'} . "}" if defined $pkg->{'binary_nmu_version'};
$c .= ":calprio{". $pkg->{'calprio'}."}";
'O' => make_fmt( sub { return seconds2time ( $pkg->{'successtime'}); }, $pkg, $var),
'q' => make_fmt( $pkg->{'anytime'}, $pkg, $var),
'Q' => make_fmt( sub { return seconds2time ( $pkg->{'anytime'}); }, $pkg, $var),
- 'r' => make_fmt( sub { return max($pkg->{'successtime'}, $pkg->{'anytime'}); }, $pkg, $var),
- 'R' => make_fmt( sub { return seconds2time ( max($pkg->{'successtime'}, $pkg->{'anytime'})); }, $pkg, $var),
+ 'r' => make_fmt( sub { my $c = max($pkg->{'successtime'}//0, $pkg->{'anytime'}//0); return $c if $c; return; }, $pkg, $var),
+ 'R' => make_fmt( sub { return seconds2time ( max($pkg->{'successtime'}//0, $pkg->{'anytime'}//0)); }, $pkg, $var),
));
}
@list = grep { !$_->{'extra_depends'} and !$_->{'extra_conflicts'} } @list if $api < 1 ;
# first adjust ownprintformat, then set printformat accordingly
- $printformat ||= $yamlmap->{"format"}{$ownprintformat};
+ $printformat ||= $yamlmap->{"format"}{$ownprintformat} if $ownprintformat;
$printformat ||= $yamlmap->{"format"}{"default"}{$state};
$printformat ||= $yamlmap->{"format"}{"default"}{"default"};
- undef $printformat if ($ownprintformat eq 'none');
+ undef $printformat if ($ownprintformat && $ownprintformat eq 'none');
foreach $pkg (sort sort_list_func @list) {
if ($printformat) {
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;
}
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;
}
if (defined($$state) and $$state eq 'Failed') {
$pkg->{'old_failed'} =
"-"x20 . " $pkg->{'version'} " . "-"x20 . "\n" .
- $pkg->{'failed'} . "\n" .
- $pkg->{'old_failed'};
+ ($pkg->{'failed'} // ""). "\n" .
+ ($pkg->{'old_failed'} // "");
delete $pkg->{'failed'};
delete $pkg->{'failed_category'};
}
$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;
push @args, "FAILED";
}
- if ($options{list_min_age} > 0) {
+ if ($options{list_min_age} && $options{list_min_age} > 0) {
$q .= ' AND age(state_change) > ? ';
push @args, $options{list_min_age} . " days";
}
- if ($options{list_min_age} < 0) {
+ if ($options{list_min_age} && $options{list_min_age} < 0) {
$q .= ' AND age(state_change) < ? ';
push @args, -$options{list_min_age} . " days";
}
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();
}
$pkg->{'package'} = $name;
}
- my $logstr = "merge-v3 $vars->{'time'} ".$name."_$pkgs->{'version'}".
+ my $logstr = sprintf("merge-v3 %s %s_%s", $vars->{'time'}, $name, $pkgs->{'version'}).
($pkgs->{'binnmu'} ? ";b".$pkgs->{'binnmu'} : "").
- " ($vars->{'arch'}, $vars->{'suite'}, previous: $pkg->{'version'}".
+ sprintf(" (%s, %s, previous: %s", $vars->{'arch'}, $vars->{'suite'}, $pkg->{'version'}//"").
($pkg->{'binary_nmu_version'} ? ";b".$pkg->{'binary_nmu_version'} : "").
", $pkg->{'state'}):";
- if (isin($pkgs->{'status'}, qw (installed related)) && $pkgs->{'version'} eq $pkg->{'version'} && $pkg->{'binary_nmu_version'} && $pkgs->{'binnmu'} < int($pkg->{'binary_nmu_version'})) {
+ if (isin($pkgs->{'status'}, qw (installed related)) && $pkgs->{'version'} eq $pkg->{'version'} && $pkgs->{'binnmu'} && $pkg->{'binary_nmu_version'} && $pkgs->{'binnmu'} < int($pkg->{'binary_nmu_version'})) {
$pkgs->{'status'} = 'out-of-date';
}
if (isin($pkgs->{'status'}, qw (installed related))) {
}
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}}) {
+ if (!$pkg->{$k} or !$pkgs->{$attrs->{$k}} or $pkg->{$k} ne $pkgs->{$attrs->{$k}}) {
$pkg->{$k} = $pkgs->{$attrs->{$k}};
$change++;
}
$change++;
}
if ($change) {
- print "$logstr set to installed/".$pkg->{'notes'}."\n" if $verbose || $simulate;
+ 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;
}
print "$logstr package in unknown state: $pkgs->{'status'}\n";
next SRCS;
}
- next if $pkgs->{'version'} eq $pkg->{'version'} and $pkgs->{'binnmu'} >= int($pkg->{'binary_nmu_version'});
+ next if $pkgs->{'version'} eq $pkg->{'version'} and $pkgs->{'binnmu'} and $pkgs->{'binnmu'} >= int($pkg->{'binary_nmu_version'});
next if $pkgs->{'version'} eq $pkg->{'version'} and !isin( $pkg->{'state'}, qw(Installed));
next if isin( $pkg->{'state'}, qw(Not-For-Us Failed-Removed));