sync-all: Skip END actions on exceptions
authorFlorian Weimer <fw@deneb.enyo.de>
Thu, 13 Mar 2014 09:23:56 +0000 (10:23 +0100)
committerAustin Seipp <austin@well-typed.com>
Sun, 23 Mar 2014 00:39:42 +0000 (19:39 -0500)
Before this change, the END actions were executed even if the code
throws an exception using "die".  This resulted in very confusing
error reporting when an invalid command line option was specified.

Signed-off-by: Austin Seipp <austin@well-typed.com>
sync-all

index 4b4b7a3..70c9639 100755 (executable)
--- a/sync-all
+++ b/sync-all
@@ -7,6 +7,7 @@ use English;
 $| = 1; # autoflush stdout after each print, to avoid output after die
 
 my $initial_working_directory;
+my $exit_via_die;
 
 my $defaultrepo;
 my @packages;
@@ -956,6 +957,11 @@ BEGIN {
     }
     $initial_working_directory = getcwd();
 
+    $SIG{__DIE__} = sub {
+      die @_ if $^S;
+      $exit_via_die = 1;
+    };
+
     #message "== Checking for left-over testsuite/.git folder";
     if (-d "testsuite/.git") {
         print <<EOF;
@@ -974,6 +980,7 @@ EOF
 }
 
 END {
+    return if $exit_via_die;
     my $ec = $?;
 
     chdir($initial_working_directory);