X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FGitCredential.pm;h=b18bba1ec32454b29a03339a54c2ed53b17c008c;hb=23af251dd607c4e75ab1e68063f2c885c48cc035;hp=c6da6a090caad0b415c425e3e5e694c63963f60d;hpb=6968c91707d51f6a60d476cc2f5d65a660146813;p=public-inbox.git
diff --git a/lib/PublicInbox/GitCredential.pm b/lib/PublicInbox/GitCredential.pm
index c6da6a09..b18bba1e 100644
--- a/lib/PublicInbox/GitCredential.pm
+++ b/lib/PublicInbox/GitCredential.pm
@@ -1,14 +1,20 @@
-# Copyright (C) 2020 all contributors
+# Copyright (C) 2020-2021 all contributors
# License: AGPL-3.0+
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) { # 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 = '';
@@ -25,8 +31,12 @@ sub run ($$) {
close $out_r or die "`git credential $op' failed: \$!=$! \$?=$?\n";
}
-sub check_netrc ($) {
- my ($self) = @_;
+sub check_netrc {
+ my ($self, $lei) = @_;
+
+ # n.b. lei doesn't load ~/.netrc by default, public-inbox-watch does,
+ # which may've been a mistake, but we have to live with it.
+ return if ($lei && !$lei->{opt}->{netrc});
# part of the standard library, but distributions may split it out
eval { require Net::Netrc };
@@ -41,8 +51,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 '';
@@ -50,6 +60,7 @@ sub fill {
$self->{$1} = $2;
}
close $out_r or die "git credential fill failed: \$!=$! \$?=$?\n";
+ $self->{filled} = 1;
}
1;