From: Jakub Narebski <jnareb@gmail.com>
To: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCHv2 6/6] gitweb: check if-modified-since for feeds
Date: Thu, 5 Feb 2009 03:03:42 +0100 [thread overview]
Message-ID: <200902050303.43356.jnareb@gmail.com> (raw)
In-Reply-To: <1232970616-21167-7-git-send-email-giuseppe.bilotta@gmail.com>
On Mon, 26 Jan 2009, Giuseppe Bilotta wrote:
> Offering Last-modified header for feeds is only half the work, even if
> we bail out early on HEAD requests. We should also check that same date
> against If-modified-since, and bail out early with 304 Not Modified if
> that's the case.
It looks now quite nice, but I'd like to see information about
dependencies for this feature in the commit message, something like:
This feature (terminating early with '304 Not Modified' in response
to 'If-Modified-Since' conditional request) requires having either
HTTP::Date module (from libwww-perl) or Time::ParseDate module.
If neither is present gitweb falls back to earlier behaviour of not
reacting to 'If-Modified-Since'.
Note also (although I'm not sure if it is worth mentioning in commit
message) that it doesn't save gitweb as much work as one could think,
because at this place the whole list of commits is already generated
and parsed. What we save is cost of running git-diff-tree for each
commit (we could do better here, I think), and of course bandwidth.
I wonder if it would be possible to separate this code into subroutine,
to make it possible to have support for "cache control" conditional
requests also in other cases where it might help (for the future of
course, not in this commit).
Perhaps if we run gitweb from Apache mod_perl in compatibility mode
(ModPerl::Registry) to use Apache Perl API to respond to
'If-Modified-Since' ($r->is_fresh or something). But that is also
just idea for the future improvement.
>
> Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Here I think:
Acked-by: Jakub Narebski <jnareb@gmail.com>
> ---
> gitweb/gitweb.perl | 20 +++++++++++++++++++-
> 1 files changed, 19 insertions(+), 1 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 8c49c75..f4defb0 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -6015,7 +6015,25 @@ sub git_feed {
> }
> if (defined($commitlist[0])) {
> %latest_commit = %{$commitlist[0]};
> - %latest_date = parse_date($latest_commit{'committer_epoch'});
> + my $latest_epoch = $latest_commit{'committer_epoch'};
> + %latest_date = parse_date($latest_epoch);
Nitpick: either follow aligning on '=' characters, or skip it
altogether and always use one space before '=' in this fragment.
> + my $if_modified = $cgi->http('IF_MODIFIED_SINCE');
> + if (defined $if_modified) {
> + my $since;
> + if (eval { require HTTP::Date; 1; }) {
> + $since = HTTP::Date::str2time($if_modified);
> + } elsif (eval { require Time::ParseDate; 1; }) {
> + $since = Time::ParseDate::parsedate($if_modified, GMT => 1);
> + }
> + if (defined $since && $latest_epoch <= $since) {
> + print $cgi->header(
> + -type => $content_type,
> + -charset => 'utf-8',
> + -last_modified => $latest_date{'rfc2822'},
> + -status => '304 Not Modified');
> + return;
> + }
> + }
Good.
> print $cgi->header(
> -type => $content_type,
> -charset => 'utf-8',
> --
> 1.5.6.5
>
>
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2009-02-05 2:05 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-26 11:50 [PATCHv2 0/6] gitweb: feed metadata enhancements Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 1/6] gitweb: channel image in rss feed Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 2/6] gitweb: feed generator metadata Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 3/6] gitweb: rss feed managingEditor Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 4/6] gitweb: rss channel date Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 5/6] gitweb: last-modified time should be commiter, not author Giuseppe Bilotta
2009-01-26 11:50 ` [PATCHv2 6/6] gitweb: check if-modified-since for feeds Giuseppe Bilotta
2009-02-05 2:03 ` Jakub Narebski [this message]
2009-02-06 11:19 ` Giuseppe Bilotta
2009-02-04 23:38 ` [PATCHv2 5/6] gitweb: last-modified time should be commiter, not author Jakub Narebski
2009-02-06 11:14 ` Giuseppe Bilotta
2009-02-06 21:12 ` Jakub Narebski
2009-02-06 23:00 ` Giuseppe Bilotta
2009-02-11 3:10 ` Deskin Miller
2009-02-11 9:02 ` Giuseppe Bilotta
2009-02-11 9:18 ` Jakub Narebski
2009-02-11 9:54 ` Giuseppe Bilotta
2009-02-12 4:50 ` Deskin Miller
2009-02-12 9:07 ` Jakub Narebski
2009-02-12 9:52 ` Giuseppe Bilotta
2009-02-12 10:11 ` Jakub Narebski
2009-02-12 11:23 ` Giuseppe Bilotta
2009-02-04 23:24 ` [PATCHv2 4/6] gitweb: rss channel date Jakub Narebski
2009-02-06 11:10 ` Giuseppe Bilotta
2009-02-04 23:19 ` [PATCHv2 3/6] gitweb: rss feed managingEditor Jakub Narebski
2009-02-06 11:03 ` Giuseppe Bilotta
2009-02-04 23:15 ` [PATCHv2 2/6] gitweb: feed generator metadata Jakub Narebski
2009-02-06 11:01 ` Giuseppe Bilotta
2009-02-06 11:21 ` Jakub Narebski
2009-02-04 22:56 ` [PATCHv2 1/6] gitweb: channel image in rss feed Jakub Narebski
2009-02-06 10:55 ` Giuseppe Bilotta
2009-01-28 20:58 ` [PATCHv2 0/6] gitweb: feed metadata enhancements Junio C Hamano
2009-01-28 21:48 ` Jakub Narebski
2009-01-28 21:57 ` Giuseppe Bilotta
2009-01-28 22:03 ` Junio C Hamano
2009-02-06 22:42 ` Jakub Narebski
2009-02-07 0:24 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200902050303.43356.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=giuseppe.bilotta@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).