diff options
author | Eric Wong <e@80x24.org> | 2021-02-18 23:22:22 +0300 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-02-18 20:02:17 -0400 |
commit | 63283ae1b51203c930332e6887296cb123e5db6c (patch) | |
tree | 47a269e817e4b674ee41c50c1085df9850137c59 /lib/PublicInbox/GitCredential.pm | |
parent | a2415fec470dad7d9848b55af7c156f96dde13e5 (diff) | |
download | public-inbox-63283ae1b51203c930332e6887296cb123e5db6c.tar.gz |
This will make testing IMAP support for other commands easier, as it doesn't write to lei/store at all. Like the pager and MUA, "git credential" is always spawned by script/lei (and not lei-daemon) so it has a controlling terminal for password prompts. v2: fix missing requires, correct test ordering v3: ensure config exists for IMAP auth
Diffstat (limited to 'lib/PublicInbox/GitCredential.pm')
-rw-r--r-- | lib/PublicInbox/GitCredential.pm | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/PublicInbox/GitCredential.pm b/lib/PublicInbox/GitCredential.pm index 9e193029..2d81817c 100644 --- a/lib/PublicInbox/GitCredential.pm +++ b/lib/PublicInbox/GitCredential.pm @@ -4,11 +4,17 @@ package PublicInbox::GitCredential; use strict; use PublicInbox::Spawn qw(popen_rd); -sub run ($$) { - my ($self, $op) = @_; - my ($in_r, $in_w); +sub run ($$;$) { + my ($self, $op, $lei) = @_; + my ($in_r, $in_w, $out_r); + my $cmd = [ qw(git credential), $op ]; pipe($in_r, $in_w) or die "pipe: $!"; - my $out_r = popen_rd([qw(git credential), $op], undef, { 0 => $in_r }); + if ($lei && !$lei->{oneshot}) { # we'll die if disconnected: + pipe($out_r, my $out_w) or die "pipe: $!"; + $lei->send_exec_cmd([ $in_r, $out_w ], $cmd, {}); + } else { + $out_r = popen_rd($cmd, undef, { 0 => $in_r }); + } close $in_r or die "close in_r: $!"; my $out = ''; @@ -41,8 +47,8 @@ sub check_netrc ($) { } sub fill { - my ($self) = @_; - my $out_r = run($self, 'fill'); + my ($self, $lei) = @_; + my $out_r = run($self, 'fill', $lei); while (<$out_r>) { chomp; return if $_ eq ''; |