about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-01-24 09:49:34 +0000
committerEric Wong <e@80x24.org>2023-01-24 10:07:53 +0000
commit4cad67e24c9babd9422ed0c450a49d38df2cb314 (patch)
treedfe08bd57112df26f74e75f7d059d8d8c51b6f40
parentff57c4d03ca6fda821fb841507269da4ff4a99b7 (diff)
downloadpublic-inbox-4cad67e24c9babd9422ed0c450a49d38df2cb314.tar.gz
WwwCoderepo is for viewing blobs already in code repositories,
so there's no place for a debug log showing which mails were
used to arrive at a given blob.  The debug footer remains for
/$INBOX/$OID/s/ URLs, of course.
-rw-r--r--lib/PublicInbox/RepoTree.pm1
-rw-r--r--lib/PublicInbox/ViewVCS.pm12
-rw-r--r--lib/PublicInbox/WwwCoderepo.pm17
3 files changed, 24 insertions, 6 deletions
diff --git a/lib/PublicInbox/RepoTree.pm b/lib/PublicInbox/RepoTree.pm
index 4c6ed840..3a848c6f 100644
--- a/lib/PublicInbox/RepoTree.pm
+++ b/lib/PublicInbox/RepoTree.pm
@@ -51,7 +51,6 @@ sub tree_show { # git check_async callback
         my ($oid, $type, $size, $ctx) = @_;
         return find_missing($ctx) if $type eq 'missing';
 
-        open $ctx->{lh}, '<', \(my $dbg_log = '') or die "open(scalar): $!";
         my $res = [ $ctx->{git}, $oid, $type, $size ];
         my ($bn) = ($ctx->{-path} =~ m!/?([^/]+)\z!);
         if ($type eq 'blob') {
diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm
index b238e832..60cc1376 100644
--- a/lib/PublicInbox/ViewVCS.pm
+++ b/lib/PublicInbox/ViewVCS.pm
@@ -62,8 +62,11 @@ sub dbg_log ($) {
                 return '<pre>debug log seek error</pre>';
         }
         $log = do { local $/; <$log> } // do {
-                warn "readline(log): $!";
-                return '<pre>debug log read error</pre>';
+                if (!eof($log)) {
+                        warn "readline(log): $!";
+                        return '<pre>debug log read error</pre>';
+                }
+                '';
         };
         return '' if $log eq '';
         $ctx->{-linkify} //= PublicInbox::Linkify->new;
@@ -586,7 +589,10 @@ sub show ($$;$) {
         }
         $ctx->{fn} = $fn;
         $ctx->{-tmp} = File::Temp->newdir("solver.$oid_b-XXXX", TMPDIR => 1);
-        open $ctx->{lh}, '+>>', "$ctx->{-tmp}/solve.log" or die "open: $!";
+        unless ($ctx->{lh}) {
+                open $ctx->{lh}, '+>>', "$ctx->{-tmp}/solve.log" or
+                        die "open: $!";
+        }
         my $solver = PublicInbox::SolverGit->new($ctx->{ibx},
                                                 \&solve_result, $ctx);
         $solver->{gits} //= [ $ctx->{git} ];
diff --git a/lib/PublicInbox/WwwCoderepo.pm b/lib/PublicInbox/WwwCoderepo.pm
index 5ca8ef55..024a9d8f 100644
--- a/lib/PublicInbox/WwwCoderepo.pm
+++ b/lib/PublicInbox/WwwCoderepo.pm
@@ -8,6 +8,7 @@
 package PublicInbox::WwwCoderepo;
 use v5.12;
 use File::Temp 0.19 (); # newdir
+use POSIX qw(O_RDWR F_GETFL);
 use PublicInbox::ViewVCS;
 use PublicInbox::WwwStatic qw(r);
 use PublicInbox::GitHTTPBackend;
@@ -60,6 +61,15 @@ sub new {
         };
         $self->{$_} = 10 for qw(summary_branches summary_tags);
         $self->{$_} = 10 for qw(summary_log);
+
+        # try reuse STDIN if it's already /dev/null
+        open $self->{log_fh}, '+>', '/dev/null' or die "open: $!";
+        my @l = stat($self->{log_fh}) or die "stat: $!";
+        my @s = stat(STDIN) or die "stat(STDIN): $!";
+        if ("@l[0, 1]" eq "@s[0, 1]") {
+                my $f = fcntl(STDIN, F_GETFL, 0) // die "F_GETFL: $!";
+                $self->{log_fh} = *STDIN{IO} if $f & O_RDWR;
+        }
         $self;
 }
 
@@ -216,12 +226,15 @@ sub srv { # endpoint called by PublicInbox::WWW
         }
         $path_info =~ m!\A/(.+?)/\z! and
                 ($ctx->{git} = $cr->{$1}) and return summary($self, $ctx);
-        $path_info =~ m!\A/(.+?)/([a-f0-9]+)/s/([^/]+)?\z! and
-                        ($ctx->{git} = $cr->{$1}) and
+        if ($path_info =~ m!\A/(.+?)/([a-f0-9]+)/s/([^/]+)?\z! and
+                        ($ctx->{git} = $cr->{$1})) {
+                $ctx->{lh} = $self->{log_fh};
                 return PublicInbox::ViewVCS::show($ctx, $2, $3);
+        }
 
         if ($path_info =~ m!\A/(.+?)/tree/(.*)\z! and
                         ($ctx->{git} = $cr->{$1})) {
+                $ctx->{lh} = $self->{log_fh};
                 return PublicInbox::RepoTree::srv_tree($ctx, $2) // r(404);
         }