about summary refs log tree commit homepage
path: root/lib/PublicInbox/GitCredential.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-02-18 23:22:22 +0300
committerEric Wong <e@80x24.org>2021-02-18 20:02:17 -0400
commit63283ae1b51203c930332e6887296cb123e5db6c (patch)
tree47a269e817e4b674ee41c50c1085df9850137c59 /lib/PublicInbox/GitCredential.pm
parenta2415fec470dad7d9848b55af7c156f96dde13e5 (diff)
downloadpublic-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.pm18
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 '';