Hi!

A friend of mine recently ran into this issue too, so I tried to come up
with a quick & dirty patch to make hooks abort the build if they fail. I
haven't tested it yet, mind you. In any case, patch is attached. When I
hear back from either my friend, or from anyone reading this, that the
patch works, I'll clean it up and resubmit.

-- 
|8]

From 2fc906196c67cb71fb79f8e517b28d830f59d4fc Mon Sep 17 00:00:00 2001
From: Gergely Nagy <alger...@madhouse-project.org>
Date: Fri, 29 May 2015 09:01:24 +0200
Subject: [PATCH] Sbuild::Build: Abort when a hook fails

Signed-off-by: Gergely Nagy <alger...@madhouse-project.org>
---
 lib/Sbuild/Build.pm | 48 ++++++++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/lib/Sbuild/Build.pm b/lib/Sbuild/Build.pm
index cda5cf3..00513a7 100644
--- a/lib/Sbuild/Build.pm
+++ b/lib/Sbuild/Build.pm
@@ -367,9 +367,11 @@ sub run_chroot_session {
 
 	# Run pre build external commands
 	$self->check_abort();
-	$self->run_external_commands("pre-build-commands",
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+        my $returnval;
+	$returnval = $self->run_external_commands("pre-build-commands",
+                                                  $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                                  $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+        $self->request_abort ("External command failed") if (!$returnval);
 
 	$self->check_abort();
 	if (!$session->begin_session()) {
@@ -512,9 +514,10 @@ sub run_chroot_session_locked {
 
 	# Run specified chroot setup commands
 	$self->check_abort();
-	$self->run_external_commands("chroot-setup-commands",
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+	my $returnval = $self->run_external_commands("chroot-setup-commands",
+                                                     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                                     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+        $self->request_abort ("External command failed") if (!$returnval);
 
 	$self->check_abort();
 
@@ -702,9 +705,11 @@ sub run_fetch_install_packages {
 
 	# Run specified chroot cleanup commands
 	$self->check_abort();
-	$self->run_external_commands("chroot-cleanup-commands",
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+	my $returnval = $self->run_external_commands("chroot-cleanup-commands",
+                                                     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                                     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+        $self->request_abort ("External command failed") if (!$returnval);
+        $self->check_abort();
 
 	if ($self->get('Pkg Status') eq "successful") {
 	    $self->log_subsection("Post Build");
@@ -715,9 +720,11 @@ sub run_fetch_install_packages {
 
 	    # Run post build external commands
 	    $self->check_abort();
-	    $self->run_external_commands("post-build-commands",
-					 $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-					 $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+	    my $returnval = $self->run_external_commands("post-build-commands",
+                                                         $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                                         $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+            $self->request_abort ("External command failed") if (!$returnval);
+            $self->check_abort();
 
 	}
     };
@@ -1473,9 +1480,12 @@ sub build {
 	return 0;
     }
 
-    $self->run_external_commands("starting-build-commands",
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+    my $returnval;
+    $returnval = $self->run_external_commands("starting-build-commands",
+                                              $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                              $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+    $self->request_abort ("External command failed") if (!$returnval);
+    $self->check_abort();
 
     $self->set('Build Start Time', time);
     $self->set('Build End Time', $self->get('Build Start Time'));
@@ -1666,9 +1676,11 @@ sub build {
     $self->log("Build finished at $finish_date\n");
 
 
-    $self->run_external_commands("finished-build-commands",
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
-				     $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+    my $retval = $self->run_external_commands("finished-build-commands",
+                                              $self->get_conf('LOG_EXTERNAL_COMMAND_OUTPUT'),
+                                              $self->get_conf('LOG_EXTERNAL_COMMAND_ERROR'));
+    $self->request_abort ("External command failed") if (!$returnval);
+    $self->check_abort();
 
     my @space_files = ("$dscdir");
 
-- 
2.1.4

Attachment: signature.asc
Description: PGP signature

Reply via email to