git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] honour GIT_ASKPASS for querying username in git-svn

From
SSSven Strickroth <sven.strickroth@tu-clausthal.de>
Date
Dec 26, 2011, 23:49 UTC
Message-ID
<4EF907F1.1030801@tu-clausthal.de>
In-Reply-To
<20111130064401.GC5317@sigill.intra.peff.net>
Hi,
Am 30.11.2011 07:44 schrieb Jeff King:
Show 6 quoted lines
> 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
Previous: Jeff KingNext: Jakub Narebski
Message 7 of 82 in “honour GIT_ASKPASS for querying username in git-svn”
  1. honour GIT_ASKPASS for querying username in git-svnSven Strickroth, Nov 17, 2011
  2. Erik Faye-LundNov 18, 2011
  3. Sven StrickrothNov 18, 2011
  4. Erik Faye-LundNov 18, 2011
  5. Sven StrickrothNov 26, 2011
  6. Jeff KingNov 30, 2011
  7. Sven StrickrothDec 26, 2011
  8. Jakub NarebskiDec 27, 2011
  9. Sven StrickrothDec 27, 2011
  10. Jakub NarebskiDec 27, 2011
  11. 0/5 honour *_ASKPASS for querying user in git-svnSven Strickroth, Dec 27, 2011
  12. 1/5 add central method for prompting a user using GIT_ASKPASS or SSH_ASKPASSSven Strickroth, Dec 27, 2011
  13. Junio C HamanoDec 27, 2011
  14. Thomas AdamDec 27, 2011
  15. Junio C HamanoDec 27, 2011
  16. 2/5 switch to central prompt methodSven Strickroth, Dec 27, 2011
  17. Junio C HamanoDec 27, 2011
  18. 3/5 honour *_ASKPASS for querying username and for querying further actions like unknown certificatesSven Strickroth, Dec 27, 2011
  19. Junio C HamanoDec 27, 2011
  20. 4/5 ignore empty *_ASKPASS variablesSven Strickroth, Dec 27, 2011
  21. Junio C HamanoDec 27, 2011
  22. 5/5 make askpass_prompt a global prompt method for asking usersSven Strickroth, Dec 27, 2011
  23. Junio C HamanoDec 27, 2011
  24. Junio C HamanoDec 27, 2011
  25. 1/2 git-svn, perl/Git.pm: add central method for prompting passwords honoring GIT_ASKPASS and SSH_ASKPASSSven Strickroth, Dec 28, 2011
  26. Junio C HamanoDec 28, 2011
  27. Sven StrickrothDec 28, 2011
  28. Jakub NarebskiDec 28, 2011
  29. Ævar Arnfjörð BjarmasonJan 3, 2012
  30. Sven StrickrothJan 3, 2012
  31. Ævar Arnfjörð BjarmasonJan 3, 2012
  32. Ævar Arnfjörð BjarmasonJan 3, 2012
  33. Sven StrickrothJan 3, 2012
  34. Junio C HamanoJan 3, 2012
  35. Junio C HamanoJan 3, 2012
  36. Sven StrickrothJan 3, 2012
  37. Junio C HamanoJan 4, 2012
  38. Sven StrickrothJan 4, 2012
  39. Sven StrickrothJan 4, 2012
  40. Jeff KingJan 4, 2012
  41. Sven StrickrothJan 4, 2012
  42. Junio C HamanoJan 4, 2012
  43. Sven StrickrothJan 7, 2012
  44. Junio C HamanoJan 4, 2012
  45. Sven StrickrothJan 4, 2012
  46. 2/2 git-svn, perl/Git.pm: extend and use Git->prompt method for querying usersSven Strickroth, Dec 28, 2011
  47. Junio C HamanoDec 28, 2011
  48. Sven StrickrothDec 28, 2011
  49. Junio C HamanoDec 28, 2011
  50. Junio C HamanoDec 28, 2011
  51. Sven StrickrothDec 28, 2011
  52. Junio C HamanoDec 28, 2011
  53. Sven StrickrothDec 30, 2011
  54. Jeff KingDec 30, 2011
  55. Sven StrickrothDec 30, 2011
  56. Junio C HamanoJan 1, 2012
  57. Sven StrickrothJan 1, 2012
  58. Sven StrickrothJan 1, 2012
  59. Sven StrickrothJan 1, 2012
  60. Junio C HamanoJan 3, 2012
  61. Jeff KingJan 3, 2012
  62. Sven StrickrothFeb 12, 2012
  63. Jakub NarebskiFeb 12, 2012
  64. Sven StrickrothFeb 12, 2012
  65. Jeff KingFeb 14, 2012
  66. Junio C HamanoFeb 14, 2012
  67. Jeff KingFeb 14, 2012
  68. Sven StrickrothJan 3, 2012
  69. Junio C HamanoJan 4, 2012
  70. Sven StrickrothOct 6, 2012
  71. Junio C HamanoOct 6, 2012
  72. 0/2 second trySven Strickroth, Nov 11, 2012
  73. Sven StrickrothNov 24, 2012
  74. Junio C HamanoNov 26, 2012
  75. Sven StrickrothDec 17, 2012
  76. Junio C HamanoDec 17, 2012
  77. 1/3 git-svn, perl/Git.pm: add central method for prompting passwordsSven Strickroth, Dec 18, 2012
  78. 2/3 perl/Git.pm: Honor SSH_ASKPASS as fallback if GIT_ASKPASS is not setSven Strickroth, Dec 18, 2012
  79. Jeff KingDec 18, 2012
  80. 3/3 git-svn, perl/Git.pm: extend and use Git->prompt method for querying usersSven Strickroth, Dec 18, 2012
  81. 1/2 git-svn, perl/Git.pm: add central method for prompting passwords honoring GIT_ASKPASS and SSH_ASKPASSSven Strickroth, Nov 11, 2012
  82. 2/2 git-svn, perl/Git.pm: extend and use Git->prompt method for querying usersSven Strickroth, Nov 11, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.