Skip to content

Commit 536a82f

Browse files
committed
feat(storage): demonstrate deleteSourceObjects option in compose sample
Update C++ compose-object sample to accept and demonstrate the deleteSourceObjects option, aligning with other SDK samples. [Generated-by: AI]
1 parent f1a8e57 commit 536a82f

1 file changed

Lines changed: 37 additions & 6 deletions

File tree

google/cloud/storage/examples/storage_object_samples.cc

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -502,9 +502,19 @@ void PatchObjectContentType(google::cloud::storage::Client client,
502502

503503
void ComposeObject(google::cloud::storage::Client client,
504504
std::vector<std::string> const& argv) {
505+
using ::google::cloud::storage::examples::Usage;
506+
if (argv.size() < 4) {
507+
throw Usage{
508+
"compose-object <destination-object-name> "
509+
"<delete-source-objects (true/false)> <object> [object...]"};
510+
}
505511
auto it = argv.cbegin();
506512
auto bucket_name = *it++;
507513
auto destination_object_name = *it++;
514+
if (*it != "true" && *it != "false") {
515+
throw Usage{"delete-source-objects must be either 'true' or 'false'"};
516+
}
517+
auto const delete_source_objects = *it++ == "true";
508518
std::vector<google::cloud::storage::ComposeSourceObject> compose_objects;
509519
do {
510520
// NOLINTNEXTLINE(modernize-use-emplace) - brace initialization
@@ -516,18 +526,23 @@ void ComposeObject(google::cloud::storage::Client client,
516526
using ::google::cloud::StatusOr;
517527
[](gcs::Client client, std::string const& bucket_name,
518528
std::string const& destination_object_name,
519-
std::vector<gcs::ComposeSourceObject> const& compose_objects) {
529+
std::vector<gcs::ComposeSourceObject> const& compose_objects,
530+
bool delete_source_objects) {
520531
StatusOr<gcs::ObjectMetadata> composed_object = client.ComposeObject(
521-
bucket_name, compose_objects, destination_object_name);
532+
bucket_name, compose_objects, destination_object_name,
533+
gcs::DeleteSourceObjects(delete_source_objects));
522534
if (!composed_object) throw std::move(composed_object).status();
523535

524536
std::cout << "Composed new object " << composed_object->name()
525537
<< " in bucket " << composed_object->bucket()
526538
<< "\nFull metadata: " << *composed_object << "\n";
539+
if (delete_source_objects) {
540+
std::cout << "The source objects were deleted.\n";
541+
}
527542
}
528543
//! [compose object] [END storage_compose_file]
529544
(std::move(client), bucket_name, destination_object_name,
530-
std::move(compose_objects));
545+
std::move(compose_objects), delete_source_objects);
531546
}
532547

533548
void ComposeObjectFromMany(google::cloud::storage::Client client,
@@ -735,10 +750,24 @@ void RunAll(std::vector<std::string> const& argv) {
735750
std::cout << "\nRunning ComposeObject() example" << std::endl;
736751
auto const composed_object_name =
737752
examples::MakeRandomObjectName(generator, "composed-object-");
738-
ComposeObject(client,
739-
{bucket_name, composed_object_name, object_name, object_name});
753+
ComposeObject(client, {bucket_name, composed_object_name, "false",
754+
object_name, object_name});
740755
DeleteObject(client, {bucket_name, composed_object_name});
741756

757+
std::cout << "\nRunning ComposeObject() with deleteSourceObjects=true example"
758+
<< std::endl;
759+
auto const temp_source_1 =
760+
examples::MakeRandomObjectName(generator, "temp-source-1-");
761+
auto const temp_source_2 =
762+
examples::MakeRandomObjectName(generator, "temp-source-2-");
763+
InsertObject(client, {bucket_name, temp_source_1, "content1"});
764+
InsertObject(client, {bucket_name, temp_source_2, "content2"});
765+
auto const composed_deleted_sources_object_name =
766+
examples::MakeRandomObjectName(generator, "composed-deleted-sources-");
767+
ComposeObject(client, {bucket_name, composed_deleted_sources_object_name,
768+
"true", temp_source_1, temp_source_2});
769+
DeleteObject(client, {bucket_name, composed_deleted_sources_object_name});
770+
742771
std::cout << "\nRunning ComposeObjectFromMany() example" << std::endl;
743772
ComposeObjectFromMany(
744773
client, {bucket_name, composed_object_name, object_name, object_name});
@@ -840,7 +869,9 @@ int main(int argc, char* argv[]) {
840869
make_entry("update-object-metadata", {"<object-name>", "<content-type>"},
841870
PatchObjectContentType),
842871
make_entry("compose-object",
843-
{"<destination-object-name>", "<object>", "[object...]"},
872+
{"<destination-object-name>",
873+
"<delete-source-objects (true/false)>", "<object>",
874+
"[object...]"},
844875
ComposeObject),
845876
make_entry("compose-object-from-many",
846877
{"<destination-object-name>", "<object>", "[object...]"},

0 commit comments

Comments
 (0)