Signed-off-by: Sven Strickroth <email@xxxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html