@@ -8,9 +8,9 @@ pub fn find_snapshots_to_keep<'a>(
88 const PATTERNS : & [ ( & str , & str ) ] = & [
99 ( "hourly" , "%Y-%m-%d %H" ) ,
1010 ( "daily" , "%Y-%m-%d" ) ,
11- ( "weekly" , "%Y-%m-% U" ) ,
11+ ( "weekly" , "%Y-%U" ) ,
1212 ( "monthly" , "%Y-%m" ) ,
13- ( "yearly" , "%Y-%m " ) ,
13+ ( "yearly" , "%Y" ) ,
1414 ( "last" , "%s" ) ,
1515 ] ;
1616
@@ -32,7 +32,11 @@ pub fn find_snapshots_to_keep<'a>(
3232 }
3333
3434 for ( pattern_name, pattern_format) in PATTERNS {
35- let snapshot_date = format ! ( "{}" , snapshot. created_at. format( pattern_format) ) ;
35+ let snapshot_date = format ! (
36+ "{}.{}" ,
37+ pattern_name,
38+ snapshot. created_at. format( pattern_format)
39+ ) ;
3640
3741 if !alive_dates. contains ( & snapshot_date) {
3842 let keep = match * pattern_name {
@@ -222,6 +226,43 @@ mod tests {
222226 test ( policy, snapshots, expected) ;
223227 }
224228
229+ #[ test]
230+ fn keep_daily_and_weekly_and_monthly ( ) {
231+ let policy = Policy {
232+ keep_daily : Some ( 6 ) ,
233+ keep_weekly : Some ( 2 ) ,
234+ keep_monthly : Some ( 1 ) ,
235+ ..Default :: default ( )
236+ } ;
237+
238+ let snapshots = vec ! [
239+ snapshot( "snap-10" , "2024-08-03 22:00:03" ) ,
240+ snapshot( "snap-9" , "2024-08-02 22:00:03" ) ,
241+ snapshot( "snap-8" , "2024-08-01 22:00:04" ) ,
242+ snapshot( "snap-7" , "2024-07-31 22:00:03" ) ,
243+ snapshot( "snap-6" , "2024-07-30 22:00:04" ) ,
244+ snapshot( "snap-5" , "2024-07-29 22:00:04" ) ,
245+ snapshot( "snap-4" , "2024-07-28 22:00:04" ) ,
246+ snapshot( "snap-3" , "2024-07-27 22:00:04" ) ,
247+ snapshot( "snap-2" , "2024-06-30 22:00:03" ) ,
248+ snapshot( "snap-1" , "2024-05-31 22:00:02" ) ,
249+ ] ;
250+
251+ let expected = vec ! [
252+ "snap-10" , // via keep-daily
253+ "snap-9" , // via keep-daily
254+ "snap-8" , // via keep-daily
255+ "snap-7" , // via keep-daily
256+ "snap-6" , // via keep-daily
257+ "snap-5" , // via keep-daily
258+ "snap-4" , // via keep-weekly (30th week)
259+ "snap-3" , // via keep-monthly
260+ "snap-2" , // via keep-weekly (26th week)
261+ ] ;
262+
263+ test ( policy, snapshots, expected) ;
264+ }
265+
225266 #[ test]
226267 fn keep_yearly ( ) {
227268 let policy = Policy {
@@ -231,7 +272,7 @@ mod tests {
231272
232273 let snapshots = vec ! [
233274 snapshot( "snap-6" , "2000-06-10 00:00:00" ) ,
234- snapshot( "snap-5" , "2000-06 -10 00:00:00" ) ,
275+ snapshot( "snap-5" , "2000-05 -10 00:00:00" ) ,
235276 snapshot( "snap-4" , "1999-06-10 00:00:00" ) ,
236277 snapshot( "snap-3" , "1999-06-10 00:00:00" ) ,
237278 snapshot( "snap-2" , "1998-06-10 00:00:00" ) ,
0 commit comments