[PATCH 2/2] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users

2012-11-11 Thread Sven Strickroth
git-svn reads usernames and other user queries from an interactive
terminal. This cause GUIs (w/o STDIN connected) to hang waiting forever
for git-svn to complete 
(http://code.google.com/p/tortoisegit/issues/detail?id=967).

This change extends the Git::prompt helper, so that it can also be used
for non password queries, and makes use of it instead of using
hand-rolled prompt-response code that only works with the interactive
terminal.

Signed-off-by: Sven Strickroth 
---
 perl/Git.pm| 28 +---
 perl/Git/SVN/Prompt.pm | 16 +++-
 2 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/perl/Git.pm b/perl/Git.pm
index 0a0fe91..3200f4d 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -511,18 +511,19 @@ C). Useful mostly only internally.
 
 sub html_path { command_oneline('--html-path') }
 
-=item prompt ( PROMPT )
+=item prompt ( PROMPT , ISPASSWORD  )
 
 Query user C and return answer from user.
 
 Honours GIT_ASKPASS, SSH_ASKPASS environment variables for querying
 the user. If no *_ASKPASS variable is set or an error occoured,
 the terminal is tried as a fallback.
+If C is set and true, the terminal disables echo.
 
 =cut
 
 sub prompt {
-   my ($prompt) = @_;
+   my ($prompt, $isPassword) = @_;
my $ret;
if (exists $ENV{'GIT_ASKPASS'}) {
$ret = _prompt($ENV{'GIT_ASKPASS'}, $prompt);
@@ -533,16 +534,20 @@ sub prompt {
if (!defined $ret) {
print STDERR $prompt;
STDERR->flush;
-   require Term::ReadKey;
-   Term::ReadKey::ReadMode('noecho');
-   $ret = '';
-   while (defined(my $key = Term::ReadKey::ReadKey(0))) {
-   last if $key =~ /[\012\015]/; # \n\r
-   $ret .= $key;
+   if (defined $isPassword && $isPassword) {
+   require Term::ReadKey;
+   Term::ReadKey::ReadMode('noecho');
+   $ret = '';
+   while (defined(my $key = Term::ReadKey::ReadKey(0))) {
+   last if $key =~ /[\012\015]/; # \n\r
+   $ret .= $key;
+   }
+   Term::ReadKey::ReadMode('restore');
+   print STDERR "\n";
+   STDERR->flush;
+   } else {
+   chomp($ret = );
}
-   Term::ReadKey::ReadMode('restore');
-   print STDERR "\n";
-   STDERR->flush;
}
return $ret;
 }
@@ -550,6 +555,7 @@ sub prompt {
 sub _prompt {
my ($askpass, $prompt) = @_;
return unless length $askpass;
+   $prompt =~ s/\n/ /g;
my $ret;
open my $fh, "-|", $askpass, $prompt or return;
$ret = <$fh>;
diff --git a/perl/Git/SVN/Prompt.pm b/perl/Git/SVN/Prompt.pm
index a2cbcc8..74daa7a 100644
--- a/perl/Git/SVN/Prompt.pm
+++ b/perl/Git/SVN/Prompt.pm
@@ -62,16 +62,16 @@ sub ssl_server_trust {
   issuer_dname fingerprint);
my $choice;
 prompt:
-   print STDERR $may_save ?
+   my $options = $may_save ?
  "(R)eject, accept (t)emporarily or accept (p)ermanently? " :
  "(R)eject or accept (t)emporarily? ";
STDERR->flush;
-   $choice = lc(substr( || 'R', 0, 1));
-   if ($choice =~ /^t$/i) {
+   $choice = lc(substr(Git::prompt("Certificate problem.\n" . $options) || 
'R', 0, 1));
+   if ($choice eq 't') {
$cred->may_save(undef);
-   } elsif ($choice =~ /^r$/i) {
+   } elsif ($choice eq 'r') {
return -1;
-   } elsif ($may_save && $choice =~ /^p$/i) {
+   } elsif ($may_save && $choice eq 'p') {
$cred->may_save($may_save);
} else {
goto prompt;
@@ -109,9 +109,7 @@ sub username {
if (defined $_username) {
$username = $_username;
} else {
-   print STDERR "Username: ";
-   STDERR->flush;
-   chomp($username = );
+   $username = Git::prompt("Username: ");
}
$cred->username($username);
$cred->may_save($may_save);
@@ -120,7 +118,7 @@ sub username {
 
 sub _read_password {
my ($prompt, $realm) = @_;
-   my $password = Git::prompt($prompt);
+   my $password = Git::prompt($prompt, 1);
$password;
 }
 
-- 
Best regards,
 Sven Strickroth
 PGP key id F5A9D4C4 @ any key-server
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users

2012-10-06 Thread Junio C Hamano
Sven Strickroth  writes:

> Am 04.01.2012 01:12 schrieb Junio C Hamano:
>> Now "prompt" is no longer a method but is merely a helper function, so
>> I've queued this (and 1/2 rewrite we discussed in a separate thread) to
>> 'pu' after rewording the commit log message.
>> 
>> Thanks.
>
> Is there a reason why these changes did not get merged? The issues are
> still there.

It is either that it was simply forgotten, or after I wrote the part
you quoted early in January there were discussions later that showed
the patch was not desirable for some reason. I do not recall which.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users

2012-10-06 Thread Sven Strickroth
Am 04.01.2012 01:12 schrieb Junio C Hamano:
> Now "prompt" is no longer a method but is merely a helper function, so
> I've queued this (and 1/2 rewrite we discussed in a separate thread) to
> 'pu' after rewording the commit log message.
> 
> Thanks.

Is there a reason why these changes did not get merged? The issues are
still there.

-- 
Best regards,
 Sven Strickroth
 PGP key id F5A9D4C4 @ any key-server
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html