]> git.donarmstrong.com Git - wannabuild.git/blobdiff - bin/wanna-build
add_packages: start to migrate give-back into the generic state machine
[wannabuild.git] / bin / wanna-build
index 39afe1b236232936fa9200d2a7289ba1587bb592..77f4ac3b16998a0af0b351e23e06723a2da4dffc 100755 (executable)
@@ -455,11 +455,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 +486,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 +518,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 +528,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 );
@@ -719,43 +758,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 +807,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;