[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] Debian package checker branch, master, updated. 2.3.4-50-g7610c46



The following commit has been merged in the master branch:
commit bab3c76323966288e531cab7aeeb9a7e6a898199
Author: Raphael Geissert <atomo64@gmail.com>
Date:   Sat Mar 20 20:52:32 2010 -0600

    Make the frontend use Lintian::Command::Simple
    
    This is one of the last changes needed to bring this branch ready to be
    merged into master. Yay!

diff --git a/frontend/lintian b/frontend/lintian
index 6955d76..e488ee2 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -604,6 +604,7 @@ require Lintian::Data;
 require Lintian::Schedule;
 require Lintian::Output;
 import Lintian::Output qw(:messages);
+require Lintian::Command::Simple;
 require Lintian::Command;
 import Lintian::Command qw(spawn reap);
 require Lintian::Tags;
@@ -1181,7 +1182,7 @@ require Checker;
 require Lintian::Collect;
 
 my %overrides;
-my @pending_jobs;
+my %running_jobs;
 PACKAGE:
 foreach my $pkg_info ($schedule->get_all) {
     my ($type, $pkg, $ver, $arch, $file) =
@@ -1194,8 +1195,8 @@ foreach my $pkg_info ($schedule->get_all) {
     $map->initialise();
 
     # Kill pending jobs, if any
-    Lintian::Command::kill(@pending_jobs);
-    undef @pending_jobs;
+    Lintian::Command::Simple::kill(\%running_jobs);
+    %running_jobs = ();
 
     # determine base directory
     my $base = "$LINTIAN_LAB/$long_type/$pkg";
@@ -1298,7 +1299,6 @@ foreach my $pkg_info ($schedule->get_all) {
 		if ($ri->{'type'} eq 'collection') {
 		    my $coll = $ri->{'name'};
 		    my $ci = $collection_info{$coll};
-		    my %run_opts = ('description' => $coll);
 
 		    # current type?
 		    unless (exists $ci->{'type'}{$type}) {
@@ -1327,13 +1327,14 @@ foreach my $pkg_info ($schedule->get_all) {
 		    remove_status_file($base);
 		    debug_msg(1, "Collecting info: $coll ...");
 		    my $script = "$LINTIAN_ROOT/collection/$ci->{'script'}";
-		    unless (spawn(\%run_opts, [ $script, $pkg, $long_type, '&'])) {
+		    my $cmd = Lintian::Command::Simple->new();
+		    unless ($cmd->background($script, $pkg, $long_type) > 0) {
 			warning("collect info $coll about package $pkg failed",
 				"skipping $action of $long_type package $pkg");
 			$exit_code = 2;
 			next PACKAGE;
 		    }
-		    push @pending_jobs, \%run_opts;
+		    $running_jobs{$coll} = $cmd;
 		} elsif ($ri->{'type'} eq 'check') {
 		    # skip check if overrides were not yet loaded
 		    last unless $loaded_overrides or $no_override;
@@ -1361,11 +1362,30 @@ foreach my $pkg_info ($schedule->get_all) {
 	    # wait until a job finishes to run its branches, if any, or skip
 	    # this package if any of the jobs failed.
 	    debug_msg(1, "Reaping done jobs ...");
-	    unless (reap_collect_jobs($pkg, $base, \@pending_jobs, $map)) {
-		warning("skipping $action of $long_type package $pkg");
-		$exit_code = 2;
-		next PACKAGE;
+
+	    while (my ($coll, $cmd) = Lintian::Command::Simple::wait(\%running_jobs)) {
+		if ($cmd->status() == 0) {
+		    my $ci = $collection_info{$coll};
+		    open(VERSION, '>', "$base/.${coll}-$ci->{'version'}")
+			or fail("cannot create $base/.${coll}-$ci->{'version'}: $!");
+		    print VERSION "Lintian-Version: $LINTIAN_VERSION\n"
+				. "Timestamp: " . time . "\n";
+		    close(VERSION);
+		    debug_msg(1, "Collection script $coll done");
+		} else {
+		    warning("collect info $coll about package $pkg failed");
+		    warning("skipping $action of $long_type package $pkg");
+		    $exit_code = 2;
+		    next PACKAGE;
+		}
+
+		$map->satisfy('coll-' . $coll);
+
+		# give a chance to other jobs to finish while we
+		# process other stuff:
+		last;
 	    }
+
 	    unless ($no_override or $loaded_overrides) {
 		if ($map->done('coll-override-file')) {
 		    debug_msg(1, "Override file collected, loading it ...");
@@ -1375,7 +1395,7 @@ foreach my $pkg_info ($schedule->get_all) {
 		}
 	    }
 	}
-	undef @pending_jobs;
+	%running_jobs = ();
 
 	if ($action eq 'check') {
 	    unless ($exit_code) {
@@ -1450,7 +1470,7 @@ foreach my $pkg_info ($schedule->get_all) {
 		next unless (-f "$base/.${coll}-$ci->{'version'}");
 		my $script = "$LINTIAN_ROOT/collection/$ci->{'script'}";
 		debug_msg(1, "Auto removing: $ci->{'script'} ...");
-		unless (spawn({}, [ $script, $pkg, "remove-$long_type"])) {
+		unless (Lintian::Command::Simple::run($script, $pkg, "remove-$long_type") == 0) {
 		    warning("removing collect info $coll about package $pkg failed",
 			    "skipping cleanup of $long_type package $pkg");
 		    $exit_code = 2;
@@ -1540,13 +1560,13 @@ sub unpack_pkg {
 	# create new directory
 	debug_msg(1, "Unpacking package to level 1 ...");
 	if (($type eq 'b') || ($type eq 'u')) {
-	    spawn({}, ["$LINTIAN_ROOT/unpack/unpack-binpkg-l1", $base, $file])
+	    Lintian::Command::Simple::run("$LINTIAN_ROOT/unpack/unpack-binpkg-l1", $base, $file) == 0
 		or return -1;
 	} elsif ($type eq 'c') {
 	    spawn({}, ["$LINTIAN_ROOT/unpack/unpack-changes-l1", $base, $file])
 		or return -1;
 	} else {
-	    spawn({}, ["$LINTIAN_ROOT/unpack/unpack-srcpkg-l1", $base, $file])
+	    Lintian::Command::Simple::run("$LINTIAN_ROOT/unpack/unpack-srcpkg-l1", $base, $file) == 0
 		or return -1;
 	}
 	$cur_level = 1;
@@ -1560,51 +1580,6 @@ sub unpack_pkg {
     return $cur_level;
 }
 
-# Given a list of jobs corresponding to collect scripts, reap each of the
-# jobs without blocking.  For each successful job, record that it was
-# successful by creating the corresponding version marker file in the lab and
-# marking it as done in the dependencies map.  For each unsuccessful
-# job, warn that it was unsuccessful.
-#
-# Takes the current package, base directory, and the list of pending jobs.
-# Return true if all done jobs were successful, false otherwise.
-sub reap_collect_jobs {
-    my ($pkg, $base, $pending_jobs, $map) = @_;
-    my $status = 1;
-    my $_pending_jobs = [];
-
-    while (my $job = pop @{pending_jobs}) {
-
-	if (!Lintian::Command::done($job)) {
-	    push @{$_pending_jobs}, $job;
-	    next;
-	}
-
-	$status &&= reap($job);
-
-	my $coll = $job->{'description'};
-	if ($job->{success}) {
-	    my $ci = $collection_info{$coll};
-	    open(VERSION, '>', "$base/.${coll}-$ci->{'version'}")
-		or fail("cannot create $base/.${coll}-$ci->{'version'}: $!");
-	    print VERSION "Lintian-Version: $LINTIAN_VERSION\n"
-		. "Timestamp: " . time . "\n";
-	    close(VERSION);
-	    debug_msg(1, "Collection script $coll done");
-	} else {
-	    warning("collect info $coll about package $pkg failed");
-	}
-
-	$map->satisfy('coll-' . $coll);
-	# break here to give some time for other jobs to finish
-	# while we try to start another job
-	last;
-    }
-
-    @{$pending_jobs} = (@{$pending_jobs}, @{$_pending_jobs});
-    return $status;
-}
-
 sub sort_coll {
     my ($ap, $bp);
     $ap = $map->getProp($a);

-- 
Debian package checker


Reply to: