diff options
author | Eric Wong <e@80x24.org> | 2021-04-12 17:32:20 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-04-13 04:48:41 +0000 |
commit | 775e160375fb5c15f3b5ade3a1165f7ce5df9eb4 (patch) | |
tree | 0f04c0d5469e3fa841dbe345585c74b710c64e2d | |
parent | e98c3f01267c810ee214be87d0ee1bd575b23b88 (diff) | |
download | public-inbox-775e160375fb5c15f3b5ade3a1165f7ce5df9eb4.tar.gz |
This seemed to be causing occasional "make check-run" failures with errors bleeding into other tests.
-rw-r--r-- | lib/PublicInbox/LeiBlob.pm | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/PublicInbox/LeiBlob.pm b/lib/PublicInbox/LeiBlob.pm index ed0754a3..ad885306 100644 --- a/lib/PublicInbox/LeiBlob.pm +++ b/lib/PublicInbox/LeiBlob.pm @@ -23,12 +23,18 @@ sub sol_done { # EOF callback for main daemon $sol->wq_wait_old(\&sol_done_wait, $lei); } -sub get_git_dir ($) { - my ($d) = @_; +sub get_git_dir ($$) { + my ($lei, $d) = @_; return $d if -d "$d/objects" && -d "$d/refs" && -e "$d/HEAD"; my $cmd = [ qw(git rev-parse --git-dir) ]; - my ($r, $pid) = popen_rd($cmd, {GIT_DIR => undef}, { '-C' => $d }); + my $opt = { '-C' => $d }; + if (defined($lei->{opt}->{cwd})) { # --cwd used, report errors + $opt->{2} = $lei->{2}; + } else { # implicit --cwd, quiet errors + open $opt->{2}, '>', '/dev/null' or die "open /dev/null: $!"; + } + my ($r, $pid) = popen_rd($cmd, {GIT_DIR => undef}, $opt); chomp(my $gd = do { local $/; <$r> }); waitpid($pid, 0) == $pid or die "BUG: waitpid @$cmd ($!)"; $? == 0 ? $gd : undef; @@ -114,7 +120,7 @@ sub lei_blob { # maybe it's a non-email (code) blob from a coderepo my $git_dirs = $opt->{'git-dir'} //= []; if ($opt->{'cwd'} // 1) { - my $cgd = get_git_dir('.'); + my $cgd = get_git_dir($lei, '.'); unshift(@$git_dirs, $cgd) if defined $cgd; } return $lei->fail('no --git-dir to try') unless @$git_dirs; |