Author: danielsh
Date: Mon Jul 29 08:10:32 2013
New Revision: 1507967
URL: http://svn.apache.org/r1507967
Log:
backport.pl: Restore cooked mode upon abnormal termination.
* tools/dist/backport.pl
(prompt.$getchar): Restore cooked mode if ReadKey croaked.
(signal_handler): New.
(main): Use signal_handler() to restore cooked mode if ReadKey was
interrupted by a SIGTERM.
Modified:
subversion/trunk/tools/dist/backport.pl
Modified: subversion/trunk/tools/dist/backport.pl
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport.pl?rev=1507967&r1=1507966&r2=1507967&view=diff
==============================================================================
--- subversion/trunk/tools/dist/backport.pl (original)
+++ subversion/trunk/tools/dist/backport.pl Mon Jul 29 08:10:32 2013
@@ -139,9 +139,11 @@ sub prompt {
print $_[0]; shift;
my %args = @_;
my $getchar = sub {
+ my $answer;
ReadMode 'cbreak';
- my $answer = (ReadKey 0);
+ eval { $answer = (ReadKey 0) };
ReadMode 'normal';
+ die $@ if $@;
print $answer;
return $answer;
};
@@ -492,6 +494,17 @@ sub maybe_revert {
(@_ ? exit : return);
}
+sub signal_handler {
+ my $sig = shift;
+
+ # Clean up after prompt()
+ ReadMode 'normal';
+
+ # Fall back to default action
+ delete $SIG{$sig};
+ kill $sig, $$;
+}
+
sub warning_summary {
return unless %ERRORS;
@@ -715,6 +728,7 @@ sub main {
}
$SIG{INT} = \&maybe_revert unless $YES;
+ $SIG{TERM} = \&signal_handler unless $YES;
my $in_approved = 0;
while (<STATUS>) {