From: Junio C Hamano Date: Thu, 28 Dec 2006 01:23:58 GMT Subject: Re: [PATCH 1/6] gitweb: Separate HTTP header output Message-ID: <7v7iwc4xu9.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <200612272357.56532.jnareb@gmail.com> Jakub Narebski writes: > Always return just after HTTP header is sent when asking only about > headers (HTTP request method 'HEAD'); first appeared in git_rss. > > While at it uniquify style of http_header(...) calls, formerly > "print $cgi->header(...)", and remove default HTTP status, '200 OK'. > > Signed-off-by: Jakub Narebski > --- > This one is fairly generic, and if considered worthy, I think > can be accepted without much ado. Maybe I am missing something fundamental, but I cannot see how this affects anything whatsoever... > +## functions printing HTTP or HTML: header, footer, error page > + > +sub http_header { > + my @header = @_; > + > + print $cgi->header(@header); > + > + # Optimization: skip generating the body if client asks only > + # for HTTP header (e.g. cache validation). > + return if ($cgi->request_method() eq 'HEAD'); > +} Ok, so this explicitly written "return" returns when it is a HEAD request not GET. Otherwise the control falls out of the end of the function. Either way you return undef. Then the caller does... > @@ -1709,8 +1719,11 @@ sub git_header_html { > } else { > $content_type = 'text/html'; > } > - print $cgi->header(-type=>$content_type, -charset => 'utf-8', > - -status=> $status, -expires => $expires); > + http_header( > + -type => $content_type, > + -charset => 'utf-8', > + -status => $status, > + -expires => $expires); > print < > which means it does not omit generating the body anyway no matter what "sub http_header" did... Or is there some Perl magic that makes a return from sub named *_header magically terminate the execution of the caller? Puzzled...