unofficial mirror of meta@public-inbox.org
 help / color / mirror / Atom feed
* [PATCH] githttpbackend: match Content-Type of git-http-backend(1)
@ 2016-07-03  0:43 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2016-07-03  0:43 UTC (permalink / raw)
  To: meta

This will allow cache proxies such as Varnish to avoid
caching data sent by us.
---
 lib/PublicInbox/GitHTTPBackend.pm | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/lib/PublicInbox/GitHTTPBackend.pm b/lib/PublicInbox/GitHTTPBackend.pm
index b485192..a9c0e9c 100644
--- a/lib/PublicInbox/GitHTTPBackend.pm
+++ b/lib/PublicInbox/GitHTTPBackend.pm
@@ -64,15 +64,29 @@ sub drop_client ($) {
 	}
 }
 
+my $prev = 0;
+my $exp;
+sub cache_one_year {
+	my ($h) = @_;
+	my $t = time + 31536000;
+	push @$h, 'Expires', $t == $prev ? $exp : ($exp = time2str($prev = $t)),
+		'Cache-Control', 'public, max-age=31536000';
+}
+
 sub serve_dumb {
 	my ($env, $git, $path) = @_;
 
 	my @h;
 	my $type;
-	if ($path =~ /\A(?:$BIN)\z/o) {
-		$type = 'application/octet-stream';
-		push @h, 'Expires', time2str(time + 31536000);
-		push @h, 'Cache-Control', 'public, max-age=31536000';
+	if ($path =~ m!\Aobjects/[a-f0-9]{2}/[a-f0-9]{38}\z!) {
+		$type = 'application/x-git-loose-object';
+		cache_one_year(\@h);
+	} elsif ($path =~ m!\Aobjects/pack/pack-[a-f0-9]{40}\.pack\z!) {
+		$type = 'application/x-git-packed-objects';
+		cache_one_year(\@h);
+	} elsif ($path =~ m!\Aobjects/pack/pack-[a-f0-9]{40}\.idx\z!) {
+		$type = 'application/x-git-packed-objects-toc';
+		cache_one_year(\@h);
 	} elsif ($path =~ /\A(?:$TEXT)\z/o) {
 		$type = 'text/plain';
 		push @h, @no_cache;
-- 
EW


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-07-03  0:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-03  0:43 [PATCH] githttpbackend: match Content-Type of git-http-backend(1) Eric Wong

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 read-only IMAP folder(s) and NNTP newsgroup(s).