* [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).