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

[SCM] Debian package checker branch, infra-513663, updated. 2.5.0-rc1-121-g96b50fe



The following commit has been merged in the infra-513663 branch:
commit 298b4d9eee629f17a8ca211881f258efa9893ed0
Author: Niels Thykier <niels@thykier.net>
Date:   Thu Mar 31 13:35:43 2011 +0200

    Added rundir to the interface of L::Cmd::Simple
    
    This is basically an extension of run that takes a directory as
    first argument, fork, chdir to that dir and then run the command.

diff --git a/lib/Lintian/Command/Simple.pm b/lib/Lintian/Command/Simple.pm
index fbacdaf..2ab34ea 100644
--- a/lib/Lintian/Command/Simple.pm
+++ b/lib/Lintian/Command/Simple.pm
@@ -100,6 +100,50 @@ sub run {
     return $? >> 8;
 }
 
+=item rundir(dir, command, argument  [, ...])
+
+Executes the given C<command> with the given arguments and in C<dir>
+returns the status code as one would see it from a shell script.
+
+Being fair, the only advantage of this function (or method) over the
+CORE::system() function is the way the return status is reported.
+
+=cut
+
+sub rundir {
+    my $self;
+    my $pid;
+    my $res;
+
+    if (ref $_[0]) {
+	$self = shift;
+	return -1
+	    if defined($self->{'pid'});
+    }
+    $pid = fork();
+    if (not defined($pid)) {
+	# failed
+        $res = -1;
+    } elsif ($pid > 0) {
+	# parent
+        if (defined($self)){
+            $self->{'pid'} = $pid;
+            $res = $self->wait();
+        } else {
+            $res = Lintian::Command::Simple::wait($pid);
+        }
+    } else {
+	# child
+        my $dir = shift;
+	close(STDIN);
+	open(STDIN, '<', '/dev/null');
+        chdir($dir) or die("Failed to chdir to $dir: $!\n");
+	CORE::exec @_ or die("Failed to exec '$_[0]': $!\n");
+    }
+
+    return $res;
+}
+
 =item background(command, argument  [, ...])
 
 Executes the given C<command> with the given arguments asynchronously

-- 
Debian package checker


Reply to: