From: Sven Strickroth <sven.strickroth@tu-clausthal.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Jakub Narebski <jnareb@gmail.com>,
Eric Wong <normalperson@yhbt.net>
Subject: [PATCH 1/3] git-svn, perl/Git.pm: add central method for prompting passwords
Date: Tue, 18 Dec 2012 01:28:45 +0100 [thread overview]
Message-ID: <50CFB8BD.5040006@tu-clausthal.de> (raw)
In-Reply-To: <7vehiol9w2.fsf@alter.siamese.dyndns.org>
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>
---
perl/Git.pm | 45 ++++++++++++++++++++++++++++++++++++++++++++-
perl/Git/SVN/Prompt.pm | 20 +-------------------
2 files changed, 45 insertions(+), 20 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index 497f420..72e93c7 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -58,7 +58,7 @@ require Exporter;
command_output_pipe command_input_pipe command_close_pipe
command_bidi_pipe command_close_bidi_pipe
version exec_path html_path hash_object git_cmd_try
- remote_refs
+ remote_refs prompt
temp_acquire temp_release temp_reset temp_path);
@@ -511,6 +511,49 @@ C<git --html-path>). Useful mostly only internally.
sub html_path { command_oneline('--html-path') }
+=item prompt ( PROMPT )
+
+Query user C<PROMPT> and return answer from user.
+
+Honours GIT_ASKPASS environment variable for querying
+the user. If no GIT_ASKPASS variable is set or an error occoured,
+the terminal is tried as a fallback.
+
+=cut
+
+sub prompt {
+ my ($prompt) = @_;
+ my $ret;
+ if (exists $ENV{'GIT_ASKPASS'}) {
+ $ret = _prompt($ENV{'GIT_ASKPASS'}, $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;
+ }
+ Term::ReadKey::ReadMode('restore');
+ print STDERR "\n";
+ STDERR->flush;
+ }
+ return $ret;
+}
+
+sub _prompt {
+ my ($askpass, $prompt) = @_;
+ return unless length $askpass;
+ my $ret;
+ open my $fh, "-|", $askpass, $prompt or return;
+ $ret = <$fh>;
+ $ret =~ s/[\015\012]//g; # strip \r\n, chomp does not work on all systems (i.e. windows) as expected
+ close ($fh);
+ return $ret;
+}
=item repo_path ()
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;
}
--
Best regards,
Sven Strickroth
PGP key id F5A9D4C4 @ any key-server
next prev parent reply other threads:[~2012-12-18 0:29 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-17 15:15 [PATCH] honour GIT_ASKPASS for querying username in git-svn Sven Strickroth
2011-11-18 11:36 ` Erik Faye-Lund
2011-11-18 13:30 ` Sven Strickroth
2011-11-18 14:19 ` Erik Faye-Lund
2011-11-26 11:33 ` Sven Strickroth
2011-11-30 6:44 ` Jeff King
2011-12-26 23:49 ` Sven Strickroth
2011-12-27 14:33 ` Jakub Narebski
2011-12-27 14:39 ` Sven Strickroth
2011-12-27 16:00 ` Jakub Narebski
2011-12-27 16:01 ` [PATCH 0/5] honour *_ASKPASS for querying user " Sven Strickroth
2011-12-27 16:05 ` [PATCH 1/5] add central method for prompting a user using GIT_ASKPASS or SSH_ASKPASS Sven Strickroth
2011-12-27 20:47 ` Junio C Hamano
2011-12-27 23:12 ` Thomas Adam
2011-12-27 23:35 ` Junio C Hamano
2011-12-27 16:06 ` [PATCH 2/5] switch to central prompt method Sven Strickroth
2011-12-27 20:47 ` Junio C Hamano
2011-12-27 16:07 ` [PATCH 3/5] honour *_ASKPASS for querying username and for querying further actions like unknown certificates Sven Strickroth
2011-12-27 20:56 ` Junio C Hamano
2011-12-27 16:07 ` [PATCH 4/5] ignore empty *_ASKPASS variables Sven Strickroth
2011-12-27 21:00 ` Junio C Hamano
2011-12-27 16:07 ` [PATCH 5/5] make askpass_prompt a global prompt method for asking users Sven Strickroth
2011-12-27 21:10 ` Junio C Hamano
2011-12-27 21:41 ` Junio C Hamano
2011-12-28 0:11 ` [PATCH 1/2] git-svn, perl/Git.pm: add central method for prompting passwords honoring GIT_ASKPASS and SSH_ASKPASS Sven Strickroth
2011-12-28 2:34 ` Junio C Hamano
2011-12-28 16:17 ` Sven Strickroth
2011-12-28 18:56 ` Jakub Narebski
2012-01-03 10:17 ` Ævar Arnfjörð Bjarmason
2012-01-03 10:25 ` Sven Strickroth
2012-01-03 12:03 ` Ævar Arnfjörð Bjarmason
2012-01-03 12:06 ` Ævar Arnfjörð Bjarmason
2012-01-03 13:18 ` Sven Strickroth
2012-01-03 19:42 ` Junio C Hamano
2012-01-03 22:51 ` Junio C Hamano
2012-01-03 23:27 ` Sven Strickroth
2012-01-04 0:10 ` Junio C Hamano
2012-01-04 7:55 ` Sven Strickroth
2012-01-04 8:31 ` Sven Strickroth
2012-01-04 13:34 ` Jeff King
2012-01-04 14:13 ` Sven Strickroth
2012-01-04 19:08 ` Junio C Hamano
2012-01-07 4:27 ` Sven Strickroth
2012-01-04 18:58 ` Junio C Hamano
2012-01-04 19:20 ` Sven Strickroth
2011-12-28 0:12 ` [PATCH 2/2] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users Sven Strickroth
2011-12-28 2:41 ` Junio C Hamano
2011-12-28 10:41 ` Sven Strickroth
2011-12-28 21:00 ` Junio C Hamano
2011-12-28 21:38 ` Junio C Hamano
2011-12-28 21:47 ` Sven Strickroth
2011-12-28 22:29 ` Junio C Hamano
2011-12-30 4:40 ` Sven Strickroth
2011-12-30 13:54 ` Jeff King
2011-12-30 14:53 ` Sven Strickroth
2012-01-01 9:11 ` Junio C Hamano
2012-01-01 19:57 ` Sven Strickroth
2012-01-01 20:55 ` Sven Strickroth
2012-01-01 19:45 ` Sven Strickroth
2012-01-03 18:19 ` Junio C Hamano
2012-01-03 18:40 ` Jeff King
2012-02-12 16:02 ` Sven Strickroth
2012-02-12 16:11 ` Jakub Narebski
2012-02-12 16:26 ` Sven Strickroth
2012-02-14 22:20 ` Jeff King
2012-02-14 22:35 ` Junio C Hamano
2012-02-14 22:47 ` Jeff King
2012-01-03 23:24 ` Sven Strickroth
2012-01-04 0:12 ` Junio C Hamano
2012-10-06 15:18 ` Sven Strickroth
2012-10-06 18:28 ` Junio C Hamano
2012-11-11 16:40 ` [PATCH 0/2] second try Sven Strickroth
2012-11-24 19:07 ` Sven Strickroth
2012-11-26 4:50 ` Junio C Hamano
2012-12-17 15:54 ` Sven Strickroth
2012-12-17 20:08 ` Junio C Hamano
2012-12-18 0:28 ` Sven Strickroth [this message]
2012-12-18 0:28 ` [PATCH 2/3] perl/Git.pm: Honor SSH_ASKPASS as fallback if GIT_ASKPASS is not set Sven Strickroth
2012-12-18 0:57 ` Jeff King
2012-12-18 0:28 ` [PATCH 3/3] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users Sven Strickroth
2012-11-11 16:40 ` [PATCH 1/2] git-svn, perl/Git.pm: add central method for prompting passwords honoring GIT_ASKPASS and SSH_ASKPASS Sven Strickroth
2012-11-11 16:41 ` [PATCH 2/2] git-svn, perl/Git.pm: extend and use Git->prompt method for querying users Sven Strickroth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50CFB8BD.5040006@tu-clausthal.de \
--to=sven.strickroth@tu-clausthal.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=normalperson@yhbt.net \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.