]> git.donarmstrong.com Git - wannabuild.git/blobdiff - bin/wanna-build
migrate options parsing code into GetOptions
[wannabuild.git] / bin / wanna-build
index 39afe1b236232936fa9200d2a7289ba1587bb592..b2d75b5f3fd4e89ece23c8167ed1e8f0957a6493 100755 (executable)
@@ -70,7 +70,8 @@ our ($verbose, $mail_logs, $list_order, $list_state,
     $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;
@@ -95,7 +96,7 @@ sub _set_mode { $op_mode = "$_[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,
@@ -160,6 +161,15 @@ GetOptions(
             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 {
@@ -169,13 +179,18 @@ GetOptions(
     },
     '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,
@@ -188,8 +203,12 @@ GetOptions(
     '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;
 
@@ -201,14 +220,6 @@ END {
 }
 
 $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_/);
@@ -259,13 +270,6 @@ if (!isin ( $op_mode, qw(list) ) && ( !$distribution || $distribution =~ /[ ,]/)
     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.
 
@@ -455,11 +459,11 @@ BEGIN {
         'set-building'  => { 'noversion' => 1, 'nopkgdef' => 1, },
         'set-built'     => { 'builder' => 1, to => 'Built', action => 'built', 'from' => [qw<Building Build-Attempted>]},
         'set-attempted' => { 'builder' => 1, to => 'Build-Attempted', action => 'attempted', 'from' => [qw<Building Build-Attempted>]},
-        'set-uploaded'  => { 'builder' => 1, 'noversion' => 1 },
+        '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'},
     };
 }
 
@@ -486,14 +490,17 @@ sub add_packages {
             }
         }
         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;
             }
         }
         if (!($actions->{$op_mode}) || !($actions->{$op_mode}->{'noversion'})) {
-            if ( !pkg_version_eq($pkg,$version)) {
-                print "$pkg->{package}: version mismatch ($pkg->{'version'}";
+            my $nmuver = binNMU_version($pkg->{version}, $pkg->{'binary_nmu_version'});
+            if ((!pkg_version_eq($pkg,$version) || $actions->{$op_mode}->{'binversion'}) && !version_eq( $nmuver, $version )) {
+                print "$pkg->{package}: version mismatch ($nmuver";
                 print " by $pkg->{'builder'}" if $pkg->{'builder'};
                 print ")\n";
                 next;
@@ -515,9 +522,6 @@ sub add_packages {
         if ($op_mode eq "set-building") {
             add_one_building( $name, $version, $pkg );
         }
-        elsif ($op_mode eq "set-uploaded") {
-            add_one_uploaded( $name, $version, $pkg );
-        }
         elsif ($op_mode eq "set-failed") {
            print "$pkg->{'package'}: already registered as failed; will append new message\n" if $pkg->{'state'} eq "Failed";
            $pkg->{'builder'} = $user;
@@ -528,7 +532,46 @@ sub add_packages {
             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 );
@@ -566,17 +609,14 @@ sub add_one_building {
        $ok = 1;
        my $pkg = shift;
        if (defined($pkg)) {
-               if ($pkg->{'state'} eq "Not-For-Us") {
+            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 = "not suitable for this architecture";
-               }
-               elsif ($pkg->{'state'} =~ /^Dep-Wait/) {
-                       $ok = 0;
-                       $reason = "not all source dependencies available yet";
-               }
-               elsif ($pkg->{'state'} =~ /^BD-Uninstallable/) {
-                       $ok = 0;
-                       $reason = "source dependencies are not installable";
+                       $reason = $pkgnack->{$pkg->{'state'}};
                }
                elsif ($pkg->{'state'} eq "Uploaded" &&
                           (version_lesseq($version, $pkg->{'version'}))) {
@@ -719,43 +759,6 @@ sub add_one_building {
 }
 
 
-sub add_one_uploaded {
-       my $name = shift;
-       my $version = shift;
-       my $pkg = shift;
-
-       if ($pkg->{'state'} eq "Uploaded" &&
-               pkg_version_eq($pkg,$version)) {
-               print "$name: already uploaded\n";
-               return;
-       }
-       if (!isin( $pkg->{'state'}, qw(Building Built Build-Attempted))) {
-               print "$name: not taken for building (state is $pkg->{'state'}). ",
-                         "Skipping.\n";
-               return;
-       }
-       # strip epoch -- buildd-uploader used to go based on the filename.
-       # (to remove at some point)
-       my $pkgver;
-       ($pkgver = $pkg->{'version'}) =~ s/^\d+://;
-       $version =~ s/^\d+://; # for command line use
-       if ($pkg->{'binary_nmu_version'} ) {
-               my $nmuver = binNMU_version($pkgver, $pkg->{'binary_nmu_version'});
-               if (!version_eq( $nmuver, $version )) {
-                       print "$name: version mismatch ($nmuver registered). Skipping.\n";
-                       return;
-               }
-       } elsif (!version_eq($pkgver, $version)) {
-               print "$name: version mismatch ($pkg->{'version'} registered). Skipping.\n";
-               return;
-       }
-
-       change_state( \$pkg, 'Uploaded' );
-       log_ta( $pkg, "--uploaded" );
-       update_source_info($pkg);
-       print "$name: registered as uploaded\n" if $verbose;
-}
-
 sub add_one_notforus {
        my $pkg = shift;
        my $state = $pkg->{'state'};
@@ -805,66 +808,6 @@ sub add_one_notforus {
        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;