summaryrefslogtreecommitdiff
path: root/perl/Git
diff options
context:
space:
mode:
authorSven Strickroth <sven.strickroth@tu-clausthal.de>2012-12-18 00:28:45 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-12-18 01:21:22 (GMT)
commit38ecf3a35d4255368a24ca255daf0b1ea433f1e3 (patch)
treed029387c4cd318c17a947fcf4b52f93ae7563ff7 /perl/Git
parentbdd478d620034dc6517aea940f5dc6b88f780c04 (diff)
downloadgit-38ecf3a35d4255368a24ca255daf0b1ea433f1e3.zip
git-38ecf3a35d4255368a24ca255daf0b1ea433f1e3.tar.gz
git-38ecf3a35d4255368a24ca255daf0b1ea433f1e3.tar.bz2
git-svn, perl/Git.pm: add central method for prompting passwords
git-svn reads passwords from an interactive terminal or by using GIT_ASKPASS helper tool. 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). Commit 56a853b62c0ae7ebaad0a7a0a704f5ef561eb795 also tried to solve this issue, but was incomplete as described above. Instead of using hand-rolled prompt-response code that only works with the interactive terminal, a reusable prompt() method is introduced in this commit. Signed-off-by: Sven Strickroth <email@cs-ware.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'perl/Git')
-rw-r--r--perl/Git/SVN/Prompt.pm20
1 files changed, 1 insertions, 19 deletions
diff --git a/perl/Git/SVN/Prompt.pm b/perl/Git/SVN/Prompt.pm
index 3a6f8af..a2cbcc8 100644
--- a/perl/Git/SVN/Prompt.pm
+++ b/perl/Git/SVN/Prompt.pm
@@ -120,25 +120,7 @@ sub username {
sub _read_password {
my ($prompt, $realm) = @_;
- my $password = '';
- if (exists $ENV{GIT_ASKPASS}) {
- open(PH, "-|", $ENV{GIT_ASKPASS}, $prompt);
- $password = <PH>;
- $password =~ s/[\012\015]//; # \n\r
- close(PH);
- } else {
- print STDERR $prompt;
- STDERR->flush;
- require Term::ReadKey;
- Term::ReadKey::ReadMode('noecho');
- while (defined(my $key = Term::ReadKey::ReadKey(0))) {
- last if $key =~ /[\012\015]/; # \n\r
- $password .= $key;
- }
- Term::ReadKey::ReadMode('restore');
- print STDERR "\n";
- STDERR->flush;
- }
+ my $password = Git::prompt($prompt);
$password;
}