You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2014/02/20 02:51:14 UTC
svn commit: r1570047 - /subversion/trunk/tools/dist/backport.pl
Author: danielsh
Date: Thu Feb 20 01:51:13 2014
New Revision: 1570047
URL: http://svn.apache.org/r1570047
Log:
backport.pl interactive mode: Ignore stray keystrokes.
* tools/dist/backport.pl
(POSIX::isprint, POSIX::isspace): New use()s.
(prompt): Detect and discard invalid keystrokes.
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=1570047&r1=1570046&r2=1570047&view=diff
==============================================================================
--- subversion/trunk/tools/dist/backport.pl (original)
+++ subversion/trunk/tools/dist/backport.pl Thu Feb 20 01:51:13 2014
@@ -26,7 +26,7 @@ use Term::ReadKey qw/ReadMode ReadKey/;
use File::Basename qw/basename dirname/;
use File::Copy qw/copy move/;
use File::Temp qw/tempfile/;
-use POSIX qw/ctermid strftime/;
+use POSIX qw/ctermid strftime isprint isspace/;
use Text::Wrap qw/wrap/;
use Tie::File ();
@@ -76,7 +76,7 @@ my ($AVAILID) = $ENV{AVAILID} // do {
my $STATUS = './STATUS';
my $STATEFILE = './.backports1';
my $BRANCHES = '^/subversion/branches';
-$ENV{LC_ALL} = "C"; # since we parse 'svn info' output
+$ENV{LC_ALL} = "C"; # since we parse 'svn info' output and use isprint()
# Globals.
my %ERRORS = ();
@@ -203,10 +203,17 @@ sub prompt {
my %args = @_;
my $getchar = sub {
my $answer;
- ReadMode 'cbreak';
- eval { $answer = (ReadKey 0) };
- ReadMode 'normal';
- die $@ if $@;
+ do {
+ ReadMode 'cbreak';
+ $answer = (ReadKey 0);
+ ReadMode 'normal';
+ die if $@ or not defined $answer;
+ # Swallow terminal escape codes (e.g., arrow keys).
+ unless (isprint $answer or isspace $answer) {
+ $answer = (ReadKey -1) while defined $answer;
+ # TODO: provide an indication that the keystroke was sensed and ignored.
+ }
+ } until defined $answer and (isprint $answer or isspace $answer);
print $answer;
return $answer;
};