code: public static void execute(Collection<DeleteOp> deleteOps) throws IOException {
          try {
              for (DeleteOp deleteOp : deleteOps) {
                  deleteOp.prepare();
              }
  
              // best effort cleanup - delete what's possible and report error if anything remains
              boolean commitResult = true;
              for (DeleteOp op : deleteOps) {
                  commitResult &= op.commit();
              }
              if (!commitResult) {
                  throw PatchLogger.ROOT_LOGGER.failedToDeleteBackup();
              }
  
          } catch (PrepareException pe) {
              for (DeleteOp deleteOp : deleteOps) {
                  deleteOp.rollback();
              }
  
              throw PatchLogger.ROOT_LOGGER.failedToDelete(pe.getPath());
          }
  
      }
docs: performs all delete operations together - if error occurs in one of them, all the operations are rolled back.
  For details see {@link DeleteOp#execute()}
  
  @param deleteOps list of {@code DeleteOp} to perform
  @throws IOException if an error occurred