about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-04-12 17:32:20 +0000
committerEric Wong <e@80x24.org>2021-04-13 04:48:41 +0000
commit775e160375fb5c15f3b5ade3a1165f7ce5df9eb4 (patch)
tree0f04c0d5469e3fa841dbe345585c74b710c64e2d
parente98c3f01267c810ee214be87d0ee1bd575b23b88 (diff)
downloadpublic-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.pm14
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;