From e54aa704190daa713d3b59e61154e36910cbe692 Mon Sep 17 00:00:00 2001 From: Nidhi Nandwani Date: Wed, 24 Jun 2026 05:58:31 +0000 Subject: [PATCH 1/2] feat(storage): support delete source objects on compose Updates compose file sample to support deleting source objects optionally. Fixes b/441557254 [Generated-by: AI] --- storage/src/compose_file.php | 12 ++++++++- storage/test/ObjectsTest.php | 51 +++++++++++++++++++++++++++--------- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/storage/src/compose_file.php b/storage/src/compose_file.php index c355f2d584..6202a754b9 100644 --- a/storage/src/compose_file.php +++ b/storage/src/compose_file.php @@ -37,8 +37,10 @@ * (e.g. 'my-object-2') * @param string $targetObjectName The name of the object to be created. * (e.g. 'composed-my-object-1-my-object-2') + * @param bool $deleteSourceObjects Whether to delete the source objects after composition. + * (e.g. false) */ -function compose_file(string $bucketName, string $firstObjectName, string $secondObjectName, string $targetObjectName): void +function compose_file(string $bucketName, string $firstObjectName, string $secondObjectName, string $targetObjectName, bool $deleteSourceObjects = false): void { $storage = new StorageClient(); $bucket = $storage->bucket($bucketName); @@ -60,6 +62,14 @@ function compose_file(string $bucketName, string $firstObjectName, string $secon $firstObjectName, $secondObjectName ); + + if ($deleteSourceObjects) { + foreach ($objectsToCompose as $sourceObject) { + $bucket->object($sourceObject)->delete(); + } + printf(' and source objects were deleted'); + } + printf(PHP_EOL); } } # [END storage_compose_file] diff --git a/storage/test/ObjectsTest.php b/storage/test/ObjectsTest.php index e52ff81f5a..379e861dde 100644 --- a/storage/test/ObjectsTest.php +++ b/storage/test/ObjectsTest.php @@ -260,7 +260,10 @@ public function provideMoveObject() return [[true], [false]]; } - public function testCompose() + /** + * @dataProvider provideCompose + */ + public function testCompose(bool $deleteSourceObjects) { $bucket = self::$storage->bucket(self::$bucketName); $object1Name = uniqid('compose-object1-'); @@ -269,28 +272,50 @@ public function testCompose() $bucket->upload('content', ['name' => $object2Name]); $targetName = uniqid('compose-object-target-'); - $output = self::runFunctionSnippet('compose_file', [ + + $args = [ self::$bucketName, $object1Name, $object2Name, $targetName, - ]); + ]; + + if ($deleteSourceObjects) { + $args[] = true; + } + + $output = self::runFunctionSnippet('compose_file', $args); - $this->assertEquals( - sprintf( - 'New composite object %s was created by combining %s and %s', - $targetName, - $object1Name, - $object2Name - ), - $output + $expectedOutput = sprintf( + 'New composite object %s was created by combining %s and %s', + $targetName, + $object1Name, + $object2Name ); - $bucket->object($object1Name)->delete(); - $bucket->object($object2Name)->delete(); + if ($deleteSourceObjects) { + $expectedOutput .= ' and source objects were deleted'; + } + $expectedOutput .= PHP_EOL; + + $this->assertEquals($expectedOutput, $output); + + $this->assertEquals(!$deleteSourceObjects, $bucket->object($object1Name)->exists()); + $this->assertEquals(!$deleteSourceObjects, $bucket->object($object2Name)->exists()); + + if (!$deleteSourceObjects) { + $bucket->object($object1Name)->delete(); + $bucket->object($object2Name)->delete(); + } + $bucket->object($targetName)->delete(); } + public function provideCompose() + { + return [[true], [false]]; + } + public function testUploadAndDownloadObjectFromMemory() { $objectName = 'test-object-' . time(); From 8173e7c8d6c5022653ce89382777c89f72656a03 Mon Sep 17 00:00:00 2001 From: Nidhi Nandwani Date: Wed, 24 Jun 2026 09:22:51 +0000 Subject: [PATCH 2/2] Fix trailing whitespaces to resolve styles CI failure Removed trailing whitespaces in storage/test/ObjectsTest.php which caused the styles GitHub Actions check to fail. [Generated-by: AI] --- storage/test/ObjectsTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/storage/test/ObjectsTest.php b/storage/test/ObjectsTest.php index 379e861dde..7a97a8026d 100644 --- a/storage/test/ObjectsTest.php +++ b/storage/test/ObjectsTest.php @@ -272,18 +272,18 @@ public function testCompose(bool $deleteSourceObjects) $bucket->upload('content', ['name' => $object2Name]); $targetName = uniqid('compose-object-target-'); - + $args = [ self::$bucketName, $object1Name, $object2Name, $targetName, ]; - + if ($deleteSourceObjects) { $args[] = true; } - + $output = self::runFunctionSnippet('compose_file', $args); $expectedOutput = sprintf(