git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] gitweb: check if-modified-since for feeds

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Jan 25, 2009, 22:42 UTC
Message-ID
<1232923370-4427-2-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1232923370-4427-1-git-send-email-giuseppe.bilotta@gmail.com>
Offering Last-modified header for feeds is only half the work: we should
also check that same date against If-modified-since, and bail out early
with 304 Not Modified.
---
 gitweb/gitweb.perl |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 8c49c75..0a5d229 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);
+		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);
+				return;
+			}
+		}
 		print $cgi->header(
 			-type => $content_type,
 			-charset => 'utf-8',
-- 
1.5.6.5
Previous: Giuseppe BilottaNext: Jakub Narebski
Message 7 of 13 in “gitweb feed metadata tuneups”
  1. 0/4 gitweb feed metadata tuneupsGiuseppe Bilotta, Jan 23, 2009
  2. 1/4 gitweb: channel image in rss feedGiuseppe Bilotta, Jan 23, 2009
  3. 2/4 gitweb: feed generator metadataGiuseppe Bilotta, Jan 23, 2009
  4. 3/4 gitweb: rss feed managingEditorGiuseppe Bilotta, Jan 23, 2009
  5. 4/4 gitweb: rss channel dateGiuseppe Bilotta, Jan 23, 2009
  6. gitweb: last-modified time should be commiter, not authorGiuseppe Bilotta, Jan 25, 2009
  7. gitweb: check if-modified-since for feedsGiuseppe Bilotta, Jan 25, 2009
  8. Jakub NarebskiJan 26, 2009
  9. Giuseppe BilottaJan 26, 2009
  10. Jakub NarebskiFeb 2, 2009
  11. Jakub NarebskiJan 26, 2009
  12. Giuseppe BilottaJan 26, 2009
  13. Jakub NarebskiJan 24, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.