]> git.deb.at Git - deb/packages.git/commitdiff
Merge commit 'origin/master' into debian-master
authorFrank Lichtenheld <frank@lichtenheld.de>
Wed, 6 Aug 2008 20:44:32 +0000 (20:44 +0000)
committerFrank Lichtenheld <frank@lichtenheld.de>
Wed, 6 Aug 2008 20:44:32 +0000 (20:44 +0000)
lib/Packages/Dispatcher.pm
lib/Packages/DoIndex.pm

index 75264a006cf859d93b34d0bab59efc7abcc5687c..e8f0679434c67c55cb41a4f4494f03c09f2e6763 100755 (executable)
@@ -30,6 +30,7 @@ use DB_File;
 use URI::Escape;
 use Benchmark ':hireswallclock';
 use I18N::AcceptLanguage;
+use Date::Parse;
 
 use Deb::Versions;
 use Packages::Config qw( $DBDIR $ROOT $TEMPLATEDIR $CACHEDIR
@@ -91,6 +92,19 @@ sub do_dispatch {
     my $homedir = dirname($ENV{SCRIPT_FILENAME}).'/../';
     &Packages::Config::init( $homedir );
     &Packages::DB::init();
+    my $last_modified = $Packages::DB::db_read_time;
+    my $now = time;
+    # allow some fudge, since the db mod time is not the end of
+    # the cron job
+    $last_modified = $now if $last_modified - $now < 3600; 
+
+    if ($input->http('If-Modified-Since') and
+       (my $modtime = str2time($input->http('If-Modified-Since'), 'UTC'))) {
+       if ($modtime <= $last_modified) {
+           print $input->header(-status => 304);
+           exit;
+       }
+    }
 
     my %PO_LANGUAGES = map { $_ => 1 } @LANGUAGES;
     my %DDTP_LANGUAGES = map { $_ => 1 } @DDTP_LANGUAGES;
@@ -331,7 +345,14 @@ sub do_dispatch {
     $page_content{params} = \%params;
 
     unless (@Packages::CGI::fatal_errors) {
-       print $input->header(-charset => $charset, -type => get_mime($opts{format}) );
+       print $input->header(-charset => $charset,
+                            -type => get_mime($opts{format}),
+                            -vary => 'negotiate,accept-language',
+                            -last_modified => strftime("%a, %d %b %Y %T %z",
+                                                       localtime($last_modified)),
+                            -expires => strftime("%a, %d %b %Y %T %z",
+                                                 localtime($last_modified + (12*3600))),
+                            );
        #use Data::Dumper;
        #print '<pre>'.Dumper(\%ENV, \%page_content, get_all_messages()).'</pre>';
        print $template->page( $what_to_do, { %page_content, %{ get_all_messages() } } );
index e1c5b6d3667ef650ace6d0ead1b2231684128259..5aba6b3b0dc69588320b50a6e0210db114cede79 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 
 use CGI qw( :cgi );
+use POSIX qw( strftime );
 use Exporter;
 
 use Deb::Versions;
@@ -60,7 +61,9 @@ sub send_file {
            $headers{'-content-encoding'} = $encoding{$opts->{format}} if exists $encoding{$opts->{format}};
            my ($size,$mtime) = (stat("$wwwdir/$path"))[7,9];
            $headers{'-content-length'} = $size;
-           $headers{'-last-modified'} = gmtime($mtime);
+           $headers{'-vary'} = 'negotiate,accept-language';
+           $headers{'-last-modified'} = strftime("%a, %d %b %Y %T %z", localtime($mtime));
+           $headers{'-expires'} = strftime("%a, %d %b %Y %T %z", localtime($mtime+(12*3600)));
            print header( %headers );
 
            binmode INDEX;