]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei blob: quiet "git rev-parse --git-dir" stderr w/o --cwd
authorEric Wong <e@80x24.org>
Mon, 12 Apr 2021 17:32:20 +0000 (17:32 +0000)
committerEric Wong <e@80x24.org>
Tue, 13 Apr 2021 04:48:41 +0000 (04:48 +0000)
This seemed to be causing occasional "make check-run" failures
with errors bleeding into other tests.

lib/PublicInbox/LeiBlob.pm

index ed0754a3add5500de63ecda34f2ae0661bdf4bda..ad885306beaa20c17ac6bb31e3bb4dc65bbca76e 100644 (file)
@@ -23,12 +23,18 @@ sub sol_done { # EOF callback for main daemon
        $sol->wq_wait_old(\&sol_done_wait, $lei);
 }
 
        $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) ];
        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;
        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) {
        # 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;
                unshift(@$git_dirs, $cgd) if defined $cgd;
        }
        return $lei->fail('no --git-dir to try') unless @$git_dirs;