cloudyr / googleCloudStorageR

Google Cloud Storage API to R
https://code.markedmondson.me/googleCloudStorageR
Other
104 stars 29 forks source link

Make it easier to delete buckets with versioned objects #152

Closed MarkEdmondson1234 closed 2 years ago

MarkEdmondson1234 commented 2 years ago

It won't let you delete the bucket if a versioned object still in there. a few hoops to go through to delete them too

gcp_gcs_delete_bucket <- function(bucket){
  # have to delete all objects in a bucket first
  os <- googleCloudStorageR::gcs_list_objects(bucket, 
                                              versions = TRUE, 
                                              detail = "full")
  safe_delete <- function(x, bucket, version = NULL){
    tryCatch({
      googleCloudStorageR::gcs_delete_object(x, 
                                             bucket = bucket,
                                             generation = version)
    }, error = function(ex) {
      NULL
    })
  }

  lapply(os$name, safe_delete, bucket = bucket)
  mapply(safe_delete, 
         x = os$name, version = os$generation, 
         MoreArgs = list(bucket = bucket))
  bb <- googleCloudStorageR::gcs_get_bucket(bucket)
  googleCloudStorageR::gcs_delete_bucket(bb$name)
}
MarkEdmondson1234 commented 2 years ago

Above now in gcs_delete_bucket_objects() and gcs_delete_bucket(force_delete=TRUE)