@@ -179,29 +179,32 @@ def do_prune(self, args, repository, manifest):
179179 archives_deleted = 0
180180 uncommitted_deletes = 0
181181 pi = ProgressIndicatorPercent (total = len (to_delete ), msg = "Pruning archives %3.0f%%" , msgid = "prune" )
182- for archive in archives :
182+ for archive_info in archives :
183183 if sig_int and sig_int .action_done ():
184184 break
185- if archive in to_delete :
185+ # format_item may internally load the archive from the repository,
186+ # so we must call it before deleting the archive.
187+ archive_formatted = formatter .format_item (archive_info , jsonline = False )
188+ if archive_info in to_delete :
186189 pi .show ()
187190 if args .dry_run :
188191 log_message = "Would prune:"
189192 else :
190193 archives_deleted += 1
191194 log_message = "Pruning archive (%d/%d):" % (archives_deleted , to_delete_len )
192- archive = Archive (manifest , archive .id , cache = cache )
195+ archive = Archive (manifest , archive_info .id , cache = cache )
193196 archive .delete ()
194197 uncommitted_deletes += 1
195198 else :
196199 log_message = "Keeping archive (rule: {rule} #{num}):" .format (
197- rule = kept_because [archive .id ][0 ], num = kept_because [archive .id ][1 ]
200+ rule = kept_because [archive_info .id ][0 ], num = kept_because [archive_info .id ][1 ]
198201 )
199202 if (
200203 args .output_list
201- or (args .list_pruned and archive in to_delete )
202- or (args .list_kept and archive not in to_delete )
204+ or (args .list_pruned and archive_info in to_delete )
205+ or (args .list_kept and archive_info not in to_delete )
203206 ):
204- list_logger .info (f"{ log_message :<44} { formatter . format_item ( archive , jsonline = False ) } " )
207+ list_logger .info (f"{ log_message :<44} { archive_formatted } " )
205208 pi .finish ()
206209 if sig_int :
207210 raise Error ("Got Ctrl-C / SIGINT." )
0 commit comments