X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fwanna-build;h=b7c2215fc068470f59017b4e26f8e0866e986e81;hb=21f9ffb4e8e35650a38dbf299ede785eefcb1dc2;hp=1fb5b901fab48469bb6b5759083d1b5f51a34579;hpb=33f375d471ae7ba49c41eaa6771c79f75d6ad33e;p=wannabuild.git diff --git a/bin/wanna-build b/bin/wanna-build index 1fb5b90..b7c2215 100755 --- a/bin/wanna-build +++ b/bin/wanna-build @@ -23,6 +23,8 @@ use strict; use warnings; use 5.010; +die "wanna-build disabled" if -f "/org/wanna-build/NO-WANNA-BUILD"; + package conf; use vars qw< $basedir $dbbase $transactlog $mailprog $buildd_domain >; @@ -170,6 +172,7 @@ my @wannabuildoptions = ( $privmode = 0; $distribution = 'any'; } + $privmode = 1 if $distribution =~ /security/; } }, 'order|O=s' => sub { @@ -219,10 +222,8 @@ END { } } -$distribution ||= "sid"; - my $schema_suffix = ''; -if ((isin( $op_mode, qw(list info distribution-architectures distribution-aliases)) && $distribution !~ /security/ && !$recorduser && !($privmode)) || $simulate) { +if ((isin( $op_mode, qw(list info distribution-architectures distribution-aliases)) && !$recorduser && !$privmode) || $simulate) { $dbh = DBI->connect("DBI:Pg:service=wanna-build") || die "FATAL: Cannot open database: $DBI::errstr\n"; $schema_suffix = '_public'; @@ -257,15 +258,14 @@ foreach my $name (keys %$rows) { $distribution = $distribution_aliases{$distribution} if (isin($distribution, keys %distribution_aliases)); $op_mode ||= "set-building"; -undef $distribution if $distribution eq 'any'; if ($distribution) { my @dists = split(/[, ]+/, $distribution); foreach my $dist (@dists) { die "Bad distribution '$distribution'\n" - if !isin($dist, keys %distributions); + if !isin($dist, keys %distributions, "any"); } } -if (!isin ( $op_mode, qw(list) ) && ( !$distribution || $distribution =~ /[ ,]/)) { +if (!isin ( $op_mode, qw(list) ) && ( ($distribution//"") =~ /[ ,]/)) { die "multiple distributions are only allowed for list"; } @@ -273,9 +273,9 @@ if (!isin ( $op_mode, qw(list) ) && ( !$distribution || $distribution =~ /[ ,]/) # a proper error. if ($verbose) { - my $version = '$Revision: db181a534e9d $ $Date: 2008/03/26 06:20:22 $ $Author: rmurray $'; - $version =~ s/(^\$| \$ .*$)//g; - print "wanna-build $version for $distribution on $arch\n"; + my $version = '$Id$'; + $version =~ s/^.* ([a-f0-9]+) .*$/$1/g; + print "wanna-build $version for ".($distribution//"sid")." on $arch\n"; } if (!@ARGV && !isin( $op_mode, qw(list merge-quinn merge-partial-quinn import export @@ -348,8 +348,16 @@ if (isin($op_mode, qw) && defined @conf::admin_user } if (!isin($op_mode, qw)) { die "need an architecture" unless $arch; + my $rows = $dbh->selectall_hashref('SELECT distribution as d from distribution_architectures where architecture=? and distribution=?', [qw], undef, ($arch, $distribution//"sid")) if ($distribution//"") ne 'any'; + $rows = $dbh->selectall_hashref('SELECT distribution as d from distribution_architectures where architecture=?', [qw], undef, ($arch,)) unless $rows; + die "architecture ($arch) does not exist (at least not for ".($distribution//"sid").")" if !keys %$rows and $distribution//"sid" ne 'any'; + die "architecture ($arch) does not exist" if !keys %$rows; } +my $suite = $distribution; +$distribution ||='sid'; +undef $distribution if $distribution eq 'any'; + SWITCH: foreach ($op_mode) { /^set-(.+)/ && do { add_packages( $1, @ARGV ); @@ -409,7 +417,7 @@ if (!isin($op_mode, qw)) { last SWITCH; }; /^distribution-architectures/ && do { - show_distribution_architectures(); + show_distribution_architectures({'suite' => $suite}); last SWITCH; }; /^distribution-aliases/ && do { @@ -1553,7 +1561,7 @@ sub build_deplist { sub filterarch { return "" unless $_[0]; - return Dpkg::Deps::parse($_[0], ("reduce_arch" => 1, "host_arch" => $_[1]))->dump(); + return Dpkg::Deps::deps_parse($_[0], ("reduce_arch" => 1, "host_arch" => $_[1]))->output(); } sub wb_edos_builddebcheck { @@ -1600,9 +1608,9 @@ sub wb_edos_builddebcheck { } } - print "calling: edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles)."\n"; + print "calling: edos-debcheck $edosoptions < $sourcesfile ".join('', map {" -I ".$_ } @$packagefiles)."\n"; open(my $result_cmd, '-|', - "edos-debcheck $edosoptions < $sourcesfile ".join('', map {" '-base FILE' ".$_ } @$packagefiles)); + "edos-debcheck $edosoptions < $sourcesfile ".join('', map {" -I ".$_ } @$packagefiles)); my $explanation=""; my $result={}; @@ -1946,13 +1954,18 @@ sub get_all_source_info { } sub show_distribution_architectures { + my $args = shift; my $q = 'SELECT distribution, spacecat_all(architecture) AS architectures '. 'FROM distribution_architectures '. 'GROUP BY distribution'; my $rows = $dbh->selectall_hashref($q, 'distribution'); - foreach my $name (keys %$rows) { + if ($args->{suite}) { + print $rows->{$args->{'suite'}}->{'architectures'}."\n"; + } else { + foreach my $name (keys %$rows) { print $name.': '.$rows->{$name}->{'architectures'}."\n"; - } + } + } } sub show_distribution_aliases { @@ -2069,8 +2082,8 @@ sub add_user_info { sub lock_table { return if $simulate; - $dbh->do('LOCK TABLE ' . table_name() . - ' IN EXCLUSIVE MODE', undef) or die $dbh->errstr; + $dbh->do('SELECT 1 FROM ' . table_name() . + ' WHERE distribution = ? FOR UPDATE', undef, $distribution) or die $dbh->errstr; } sub parse_argv {