[PATCH 1/5] 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 | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index f7ce511..7fdf805 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 askpass_prompt
temp_acquire temp_release temp_reset temp_path);
@@ -512,6 +512,40 @@ C<git --html-path>). Useful mostly only internally.
sub html_path { command_oneline('--html-path') }
+=item askpass_prompt ( PROMPT)
+
+Asks user using *_ASKPASS programs and return answer from user.
+
+Checks if GIT_ASKPASS or SSH_ASKPASS is set, and use first matching for querying
+user and returns answer.
+
+If no *_ASKPASS variable is set, the variable is empty or an error occours,
+it returns undef and the caller has to ask the user (e.g. on terminal).
+
+=cut
+
+sub askpass_prompt {
+ my ($self, $prompt) = _maybe_self(@_);
+ if (exists $ENV{'GIT_ASKPASS'}) {
+ return _askpass_prompt($ENV{'GIT_ASKPASS'}, $prompt);
+ } elsif (exists $ENV{'SSH_ASKPASS'}) {
+ return _askpass_prompt($ENV{'SSH_ASKPASS'}, $prompt);
+ } else {
+ return undef;
+ }
+}
+
+sub _askpass_prompt {
+ my ($self, $askpass, $prompt) = _maybe_self(@_);
+ my $ret;
+ open my $fh, "-|", $askpass, $prompt || return undef;
+ $ret = <$fh>;
+ $ret =~ s/[\012\015]//g; # strip \n\r, chomp does not work on all systems (i.e. windows) as expected
+ close ($fh);
+ return $ret;
+}
+
+
=item repo_path ()
Return path to the git repository. Must be called on a repository instance.
--
Best regards,
Sven Strickroth
ClamAV, a GPL anti-virus toolkit http://www.clamav.net
PGP key id F5A9D4C4 @ any key-server