@@ -32,6 +32,8 @@ def parse_args():
3232 parser .add_argument ('--metadata' , dest = 'metadata' , action = 'store' , default = "" ,
3333 help = 'Delete only versions matching these metadata. Format: "[/key=value]*"' )
3434 parser .add_argument ('--yes' , action = 'store_true' , help = 'Answers yes to all. You should really not use that.' )
35+ parser .add_argument ('--preserve-one-out-of' , dest = 'preserve_one_out_of' , type = int , default = 0 ,
36+ help = 'Preserve 1 out of N versions (e.g. 100 means keep every 100th version). Default: 0 (disable).' )
3537
3638 args = parser .parse_args ()
3739 dryable .set (args .dry_run )
@@ -60,20 +62,28 @@ def run(args):
6062 if answer .lower () not in ["y" , "yes" ]:
6163 exit (0 )
6264
63- for v in versions :
65+ deleted_count = 0
66+ for i , v in enumerate (versions ):
67+ # Skip every Nth version if preservation is enabled
68+ if args .preserve_one_out_of and i % args .preserve_one_out_of == 0 :
69+ logging .info (f"Preserving { v } (index { i } )" )
70+ continue
71+
6472 logging .info (f"Ready to delete { v } " )
6573 if args .one_by_one :
6674 answer = input (" Continue? y/n\n " )
6775 if answer .lower () in ["y" , "yes" ]:
6876 ccdb .delete_version (v )
77+ deleted_count = deleted_count + 1
6978 elif answer .lower () in ["n" , "no" ]:
7079 logging .info (" skipping" )
7180 else :
7281 logging .error (" wrong input, skipping" )
7382 else :
7483 ccdb .delete_version (v )
84+ deleted_count = deleted_count + 1
7585
76- logging .info (f"Deleted items: { len ( versions ) } " )
86+ logging .info (f"Deleted items: { deleted_count } " )
7787
7888
7989# ****************
0 commit comments