X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWwwCoderepo.pm;h=024a9d8f8eb8c393e292a060edde56e5eb8ed6a5;hb=4cad67e24c9babd9422ed0c450a49d38df2cb314;hp=5ca8ef554774a6131560a7406423782e0acb5cb5;hpb=ff57c4d03ca6fda821fb841507269da4ff4a99b7;p=public-inbox.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); }