All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sven Strickroth <sven.strickroth@tu-clausthal.de>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>, gitster@pobox.com
Subject: Re: [PATCH] honour GIT_ASKPASS for querying username in git-svn
Date: Tue, 27 Dec 2011 00:49:05 +0100	[thread overview]
Message-ID: <4EF907F1.1030801@tu-clausthal.de> (raw)
In-Reply-To: <20111130064401.GC5317@sigill.intra.peff.net>

Hi,

Am 30.11.2011 07:44 schrieb Jeff King:
> That aside, I think this is an improvement over the current code.
>   1. Regular git will also respect SSH_ASKPASS
>   2. Regular git will ignore an askpass variable that is set but empty.
> Perhaps git-svn should be refactored to have a reusable "prompt"
> function that respects askpass and tries to behave like C git? It could
> even go into the Git perl module.

I honoured all your ideas. Hopefully the patches can be applied now. The new patches
follow (you can also pull from git://github.com/csware/git.git askpass-prompt):

>From b760546c59d1b9982296c19f8eaea6dc225b5a4f Mon Sep 17 00:00:00 2001
From: Sven Strickroth <email@cs-ware.de>
Date: Tue, 27 Dec 2011 00:33:46 +0100
Subject: [PATCH 1/4] add central method for prompting a user using
 GIT_ASKPASS or SSH_ASKPASS

Signed-off-by: Sven Strickroth <email@cs-ware.de>
---
 perl/Git.pm |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/perl/Git.pm b/perl/Git.pm
index f7ce511..8176d47 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);


@@ -512,6 +512,35 @@ C<git --html-path>). Useful mostly only internally.
 sub html_path { command_oneline('--html-path') }


+=item prompt ( PROMPT)
+
+Checks if GIT_ASKPASS or SSH_ASKPASS is set, and if yes
+use it and return answer from user.
+
+=cut
+
+sub prompt {
+	my ($self, $prompt) = _maybe_self(@_);
+	if (exists $ENV{'GIT_ASKPASS'}) {
+		return _prompt($ENV{'GIT_ASKPASS'}, $prompt);
+	} elsif (exists $ENV{'SSH_ASKPASS'}) {
+		return _prompt($ENV{'SSH_ASKPASS'}, $prompt);
+	} else {
+		return undef;
+	}
+}
+
+sub _prompt {
+	my ($self, $askpass, $prompt) = _maybe_self(@_);
+	my $ret;
+	open(PH, "-|", $askpass, $prompt);
+	$ret = <PH>;
+	$ret =~ s/[\012\015]//g; # strip \n\r
+	close(PH);
+	return $ret;
+}
+
+
 =item repo_path ()

 Return path to the git repository. Must be called on a repository instance.
-- 
1.7.7.1.msysgit.0

>From ef4c6557d1b0e33440d13c64742d44b2a22143f3 Mon Sep 17 00:00:00 2001
From: Sven Strickroth <email@cs-ware.de>
Date: Tue, 27 Dec 2011 00:34:09 +0100
Subject: [PATCH 2/4] switch to central prompt method

Signed-off-by: Sven Strickroth <email@cs-ware.de>
---
 git-svn.perl |    9 ++-------
 1 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index eeb83d3..4fd4eca 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -4415,13 +4415,8 @@ 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 {
+	my $password = Git->prompt($prompt);;
+	if (!defined $password) {
 		print STDERR $prompt;
 		STDERR->flush;
 		require Term::ReadKey;
-- 
1.7.7.1.msysgit.0

>From d58f41d7b9b8e690c9839f6f7539774da88aa3a4 Mon Sep 17 00:00:00 2001
From: Sven Strickroth <email@cs-ware.de>
Date: Tue, 27 Dec 2011 00:37:43 +0100
Subject: [PATCH 3/4] honour *_ASKPASS for querying username and for querying
 further actions on unknown certificates

git-svn reads usernames (and answers for certificate errors) 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 |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index 4fd4eca..b85a7de 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->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) {
@@ -4404,6 +4408,9 @@ sub username {
 	if (defined $_username) {
 		$username = $_username;
 	} else {
+		$username = Git->prompt("Username");
+	}
+	if (!defined $username) {
 		print STDERR "Username: ";
 		STDERR->flush;
 		chomp($username = <STDIN>);
-- 
1.7.7.1.msysgit.0

>From 2c1dbdae8024f28d17abfbdc7e45865a1277151a Mon Sep 17 00:00:00 2001
From: Sven Strickroth <email@cs-ware.de>
Date: Tue, 27 Dec 2011 00:42:07 +0100
Subject: [PATCH 4/4] ignore empty *_ASKPASS variables

Signed-off-by: Sven Strickroth <email@cs-ware.de>
---
 perl/Git.pm |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/perl/Git.pm b/perl/Git.pm
index 8176d47..fade617 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -532,6 +532,9 @@ sub prompt {

 sub _prompt {
 	my ($self, $askpass, $prompt) = _maybe_self(@_);
+	unless ($askpass) {
+		return undef;
+	}
 	my $ret;
 	open(PH, "-|", $askpass, $prompt);
 	$ret = <PH>;
-- 
1.7.7.1.msysgit.0

-- 
Best regards,
 Sven Strickroth
 ClamAV, a GPL anti-virus toolkit   http://www.clamav.net
 PGP key id F5A9D4C4 @ any key-server

  reply	other threads:[~2011-12-26 23:49 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 [this message]
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                                                         ` [PATCH 1/3] git-svn, perl/Git.pm: add central method for prompting passwords Sven Strickroth
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=4EF907F1.1030801@tu-clausthal.de \
    --to=sven.strickroth@tu-clausthal.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --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.