@@ -6,7 +6,7 @@ use crate::{
6
6
web:: error:: Nope ,
7
7
web:: page:: WebPage ,
8
8
} ;
9
- use chrono:: { DateTime , Utc } ;
9
+ use chrono:: { DateTime , TimeZone , Utc } ;
10
10
use iron:: {
11
11
headers:: ContentType ,
12
12
mime:: { Mime , SubLevel , TopLevel } ,
@@ -86,6 +86,9 @@ pub fn sitemap_handler(req: &mut Request) -> IronResult<Response> {
86
86
target_name : row. get ( "target_name" ) ,
87
87
last_modified : row
88
88
. get :: < _ , DateTime < Utc > > ( "release_time" )
89
+ // On Aug 27 2022 we added `<link rel="canonical">` to all pages,
90
+ // so they should all get recrawled if they haven't been since then.
91
+ . max ( Utc . ymd ( 2022 , 8 , 28 ) . and_hms ( 0 , 0 , 0 ) )
89
92
. format ( "%+" )
90
93
. to_string ( ) ,
91
94
} )
@@ -227,6 +230,26 @@ mod tests {
227
230
} )
228
231
}
229
232
233
+ #[ test]
234
+ fn sitemap_max_age ( ) {
235
+ wrapper ( |env| {
236
+ let web = env. frontend ( ) ;
237
+
238
+ use chrono:: { TimeZone , Utc } ;
239
+ env. fake_release ( )
240
+ . name ( "some_random_crate" )
241
+ . release_time ( Utc . ymd ( 2020 , 1 , 1 ) . and_hms ( 0 , 0 , 0 ) )
242
+ . create ( ) ?;
243
+
244
+ let response = web. get ( "/-/sitemap/s/sitemap.xml" ) . send ( ) ?;
245
+ assert ! ( response. status( ) . is_success( ) ) ;
246
+
247
+ let content = response. text ( ) ?;
248
+ assert ! ( content. contains( & "2022-08-28T00:00:00+00:00" ) ) ;
249
+ Ok ( ( ) )
250
+ } )
251
+ }
252
+
230
253
#[ test]
231
254
fn about_page ( ) {
232
255
wrapper ( |env| {
0 commit comments