[PATCH 3/5] honour *_ASKPASS for querying username and for querying further actions like unknown certificates
- From
- Sven Strickroth <sven.strickroth@tu-clausthal.de>
- Date
- Dec 27, 2011, 16:07 UTC
- Message-ID
- <4EF9ED24.2040902@tu-clausthal.de>
- In-Reply-To
- <4EF9EBF4.7070200@tu-clausthal.de>
git-svn reads usernames (and other stuff) from an interactive terminal. This behavior cause GUIs to hang waiting for git-svn to complete (http://code.google.com/p/tortoisegit/issues/detail?id=967).
Also see commit 56a853b62c0ae7ebaad0a7a0a704f5ef561eb795.
Signed-off-by: Sven Strickroth <email@cs-ware.de> --- git-svn.perl | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl index 25d5da7..2c99aaa 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -4357,11 +4357,15 @@ 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(<STDIN> || 'R', 0, 1)); + $choice = Git->askpass_prompt("Certificate unknown. " . $options); + if (!defined $choice) { + print STDERR $options; + STDERR->flush; + $choice = lc(substr(<STDIN> || 'R', 0, 1)); + } if ($choice =~ /^t$/i) { $cred->may_save(undef); } elsif ($choice =~ /^r$/i) { @@ -4378,9 +4382,12 @@ prompt: sub ssl_client_cert { my ($cred, $realm, $may_save, $pool) = @_; $may_save = undef if $_no_auth_cache; - print STDERR "Client certificate filename: "; - STDERR->flush; - chomp(my $filename = <STDIN>); + my $filename = Git->askpass_prompt("Client certificate filename:"); + if (!defined $filename) { + print STDERR "Client certificate filename: "; + STDERR->flush; + chomp($filename = <STDIN>); + } $cred->cert_file($filename); $cred->may_save($may_save); $SVN::_Core::SVN_NO_ERROR; @@ -4404,6 +4411,9 @@ sub username { if (defined $_username) { $username = $_username; } else { + $username = Git->askpass_prompt("Username"); + } + if (!defined $username) { print STDERR "Username: "; STDERR->flush; chomp($username = <STDIN>);
-- Best regards, Sven Strickroth ClamAV, a GPL anti-virus toolkit http://www.clamav.net PGP key id F5A9D4C4 @ any key-server