$short_date, $list_min_age, $list_max_age, $dbbase, @curr_time,
$build_priority, %new_vers, $binNMUver, %merge_srcvers, %merge_binsrc,
$printformat, $ownprintformat, $privmode, $extra_depends, $extra_conflicts,
- %distributions, %distribution_aliases, $actions
+ %distributions, %distribution_aliases, $actions,
+ $sshwrapper,
);
our $Pas = '/org/buildd.debian.org/etc/packages-arch-specific/Packages-arch-specific';
our $simulate = 0;
sub _option_deprecated { warn "Option $_[0] is deprecated" }
-GetOptions(
+my @wannabuildoptions = (
# this is not supported by all operations (yet)!
'simulate' => \$simulate,
'simulate-edos' => \$simulate_edos,
when ('s') { $distribution = 'stable'; }
when ('t') { $distribution = 'testing'; }
when ('u') { $distribution = 'unstable'; }
+
+ if ($distribution eq 'any-priv') {
+ $privmode = 1;
+ $distribution = 'any';
+ }
+ if ($distribution eq 'any-unpriv') {
+ $privmode = 0;
+ $distribution = 'any';
+ }
}
},
'order|O=s' => sub {
},
'message|m=s' => \$fail_reason,
'database|b=s' => sub {
+ # If they didn't specify an arch, try to get it from database name which
+ # is in the form of $arch/build-db
+ # This is for backwards compatibity with older versions that didn't
+ # specify the arch yet.
warn "database is deprecated, please use 'arch' instead.\n";
- $conf::dbbase = $_[1];
+ $_[1] =~ m#^([^/]+)#;
+ $arch ||= $1;
},
'arch|A=s' => \$arch,
'user|U=s' => \$user,
'min-age|a=i' => \$list_min_age,
- 'max-age=i' => \$list_max_age,
+ 'max-age=i' => sub { $list_min_age = -1 * ($_[1]); },
'format=s' => \$printformat,
'own-format=s' => \$ownprintformat,
'Pas=s' => \$Pas,
'manual-edit' => \&_set_mode,
'distribution-architectures' => \&_set_mode,
'distribution-aliases' => \&_set_mode,
-) or usage();
-$list_min_age = -1 * $list_max_age if $list_max_age;
+
+ 'ssh-wrapper' => \$sshwrapper,
+ 'recorduser' => \$recorduser,
+ );
+
+GetOptions(@wannabuildoptions) or usage();
my $dbh;
}
$distribution ||= "sid";
-if ($distribution eq 'any-priv') {
- $privmode = 1;
- $distribution = 'any';
-}
-if ($distribution eq 'any-unpriv') {
- $privmode = 0;
- $distribution = 'any';
-}
my $schema_suffix = '';
$recorduser //= (not -t and $user//"" =~ /^buildd_/);
die "multiple distributions are only allowed for list";
}
-# If they didn't specify an arch, try to get it from database name which
-# is in the form of $arch/build-db
-# This is for backwards compatibity with older versions that didn't
-# specify the arch yet.
-$conf::dbbase =~ m#^([^/]+)#;
-$arch ||= $1;
-
# TODO: Check that it's an known arch (for that dist), and give
# a proper error.
'set-uploaded' => { 'builder' => 1, to => 'Uploaded', action => 'uploaded', 'from' => [qw<Building Built Build-Attempted>], binversion => 1, },
'set-failed' => { 'builder' => 1, to => 'Failed', action => 'failed', from => [qw<Building Built Build-Attempted Dep-Wait Failed>], warnfrom => [qw<Needs-Build Uploaded Dep-Wait BD-Uninstallable>], },
'set-dep-wait' => { 'builder' => 1, warnfrom => [qw<Needs-Build Failed BD-Uninstallable>], },
- 'set-update' => { 'noversion' => 1, }
+ 'set-update' => { 'noversion' => 1, },
+ 'set-needs-build' => { builder => 1, to => 'BD-Uninstallable', action => 'give-back'},
};
}
}
}
if ($actions->{$op_mode} && $actions->{$op_mode}->{'builder'}) {
- if ($pkg->{'builder'} && $user ne $pkg->{'builder'}) {
+ if (($pkg->{'builder'} && $user ne $pkg->{'builder'}) &&
+ !($pkg->{'builder'} =~ /^(\w+)-\w+/ && $1 eq $user) &&
+ !$opt_override) {
print "$pkg->{'package'}: not taken by you, but by $pkg->{'builder'}. Skipping.\n";
next;
}
add_one_notforus( $pkg );
}
elsif ($op_mode eq "set-needs-build") {
- add_one_needsbuild( $pkg );
+ my $state = $pkg->{'state'};
+
+ if ($state eq "BD-Uninstallable") {
+ if ($opt_override) {
+ print "$name: Forcing uninstallability mark to be removed. This is not permanent and might be reset with the next trigger run\n";
+
+ change_state( \$pkg, 'Needs-Build' );
+ delete $pkg->{'builder'};
+ delete $pkg->{'depends'};
+ log_ta( $pkg, "--give-back" );
+ update_source_info($pkg);
+ print "$name: given back\n" if $verbose;
+ next;
+ }
+ else {
+ print "$name: has uninstallable build-dependencies. Skipping\n (use --override to clear dependency list and give back anyway)\n";
+ next;
+ }
+ }
+ elsif ($state eq "Dep-Wait") {
+ if ($opt_override) {
+ print "$name: Forcing source dependency list to be cleared\n";
+ }
+ else {
+ print "$name: waiting for source dependencies. Skipping\n (use --override to clear dependency list and give back anyway)\n";
+ next;
+ }
+ }
+ elsif (!isin( $state, qw(Building Built Build-Attempted))) {
+ print "$name: not taken for building (state is $state).";
+ if ($opt_override) {
+ print "\n$name: Forcing give-back\n";
+ }
+ else {
+ print " Skipping.\n";
+ next;
+ }
+ }
+ $pkg->{'builder'} = undef;
+ $pkg->{'depends'} = undef;
}
elsif ($op_mode eq "set-dep-wait") {
add_one_depwait( $pkg );
$ok = 1;
my $pkg = shift;
if (defined($pkg)) {
- if ($pkg->{'state'} eq "Not-For-Us") {
- $ok = 0;
- $reason = "not suitable for this architecture";
- }
- elsif ($pkg->{'state'} =~ /^Dep-Wait/) {
- $ok = 0;
- $reason = "not all source dependencies available yet";
- }
- elsif ($pkg->{'state'} =~ /^BD-Uninstallable/) {
+ my $pkgnack = {
+ 'Not-For-Us' => 'not suitable for this architecture',
+ 'Dep-Wait' => 'not all source dependencies available yet',
+ 'BD-Uninstallable' => 'source dependencies are not installable',
+ };
+ if ($pkgnack->{$pkg->{'state'}}) {
$ok = 0;
- $reason = "source dependencies are not installable";
+ $reason = $pkgnack->{$pkg->{'state'}};
}
elsif ($pkg->{'state'} eq "Uploaded" &&
(version_lesseq($version, $pkg->{'version'}))) {
update_source_info($pkg);
}
-sub add_one_needsbuild {
- my $pkg = shift;
- my $state = $pkg->{'state'};
- my $name = $pkg->{'package'};
-
- if ($state eq "BD-Uninstallable") {
- if ($opt_override) {
- print "$name: Forcing uninstallability mark to be removed. This is not permanent and might be reset with the next trigger run\n";
-
- change_state( \$pkg, 'Needs-Build' );
- delete $pkg->{'builder'};
- delete $pkg->{'depends'};
- log_ta( $pkg, "--give-back" );
- update_source_info($pkg);
- print "$name: given back\n" if $verbose;
- return;
- }
- else {
- print "$name: has uninstallable build-dependencies. Skipping\n",
- " (use --override to clear dependency list and ",
- "give back anyway)\n";
- return;
- }
- }
- elsif ($state eq "Dep-Wait") {
- if ($opt_override) {
- print "$name: Forcing source dependency list to be cleared\n";
- }
- else {
- print "$name: waiting for source dependencies. Skipping\n",
- " (use --override to clear dependency list and ",
- "give back anyway)\n";
- return;
- }
- }
- elsif (!isin( $state, qw(Building Built Build-Attempted))) {
- print "$name: not taken for building (state is $state).";
- if ($opt_override) {
- print "\n$name: Forcing give-back\n";
- }
- else {
- print " Skipping.\n";
- return;
- }
- }
- if (defined ($pkg->{'builder'}) && $user ne $pkg->{'builder'} &&
- !($pkg->{'builder'} =~ /^(\w+)-\w+/ && $1 eq $user) &&
- !$opt_override) {
- print "$name: not taken by you, but by ".
- "$pkg->{'builder'}. Skipping.\n";
- return;
- }
- change_state( \$pkg, 'BD-Uninstallable' );
- $pkg->{'builder'} = undef;
- $pkg->{'depends'} = undef;
- log_ta( $pkg, "--give-back" );
- update_source_info($pkg);
- print "$name: given back\n" if $verbose;
-}
-
sub set_one_binnmu {
my $name = shift;
my $version = shift;