[web-downloads] main: Remove empty legacy Winlibs deletion queue

From: Date: Fri, 02 Oct 2026 16:36:45 +0000
Subject: [web-downloads] main: Remove empty legacy Winlibs deletion queue
Groups: php.webmaster 
Request: Send a blank email to php-webmaster+get-34067@lists.php.net to get a copy of this message
Author: Shivam Mathur (shivammathur) Date: 2026-10-02T22:06:40+05:30 Commit: https://github.com/php/web-downloads/commit/078372c2dc8fdad03f1e4ffce01474b1d01535b1 Raw diff: https://github.com/php/web-downloads/commit/078372c2dc8fdad03f1e4ffce01474b1d01535b1.diff Remove empty legacy Winlibs deletion queue Changed paths: M API.md M src/Http/Controllers/DeletePendingJobController.php M tests/Http/Controllers/DeletePendingJobControllerTest.php Diff: diff --git a/API.md b/API.md index d3577cb..6f35452 100644 --- a/API.md +++ b/API.md @@ -91,6 +91,8 @@ To remove a legacy Winlibs deletion request, pass the filename from `GET /api/li {"type":"winlibs-delete","job":"winlibs-delete-7coij6somubocMYxf6G.json"} ``` +The winlibs-delete/ directory is removed when its last job is deleted. + --- ### POST /api/php diff --git a/src/Http/Controllers/DeletePendingJobController.php b/src/Http/Controllers/DeletePendingJobController.php index b275fef..69ff67c 100644 --- a/src/Http/Controllers/DeletePendingJobController.php +++ b/src/Http/Controllers/DeletePendingJobController.php @@ -77,6 +77,18 @@ private function deleteJob(string $type, string $jobName): void $this->deleteDirectoryJob($path); } else { $this->deleteFileJob($path); + + if ($type === 'winlibs-delete') { + $directory = dirname($path); + $entries = @scandir($directory); + if ($entries === false) { + throw new RuntimeException('Unable to inspect Winlibs deletion directory.', 500); + } + + if ($entries === ['.', '..'] && !@rmdir($directory)) { + throw new RuntimeException('Unable to remove empty Winlibs deletion directory.', 500); + } + } } } diff --git a/tests/Http/Controllers/DeletePendingJobControllerTest.php b/tests/Http/Controllers/DeletePendingJobControllerTest.php index 81064b4..253dc6a 100644 --- a/tests/Http/Controllers/DeletePendingJobControllerTest.php +++ b/tests/Http/Controllers/DeletePendingJobControllerTest.php @@ -96,6 +96,9 @@ public function testDeletesLegacyWinlibsDeleteFileAndLockWithoutTouchingActiveQu $jobFile = $legacyDir . '/' . $jobName; file_put_contents($jobFile, '{}'); file_put_contents($jobFile . '.lock', ''); + $lastJobName = 'winlibs-delete-966s7gpgm2goaDpODXH.json'; + $lastJobFile = $legacyDir . '/' . $lastJobName; + file_put_contents($lastJobFile, '{}'); file_put_contents($activeDir . '/data.json', '{}'); $inputFile = $this->createInputFile(json_encode([ @@ -113,6 +116,26 @@ public function testDeletesLegacyWinlibsDeleteFileAndLockWithoutTouchingActiveQu static::assertJsonStringEqualsJsonString('{"status":"deleted"}', $output); static::assertFileDoesNotExist($jobFile); static::assertFileDoesNotExist($jobFile . '.lock'); + static::assertDirectoryExists($legacyDir); + static::assertFileExists($lastJobFile); + static::assertFileExists($activeDir . '/data.json'); + + unlink($inputFile); + + $inputFile = $this->createInputFile(json_encode([ + 'type' => 'winlibs-delete', + 'job' => $lastJobName, + ], JSON_THROW_ON_ERROR)); + + http_response_code(200); + $controller = new DeletePendingJobController($inputFile, $this->tempDir); + ob_start(); + $controller->handle(); + $output = ob_get_clean(); + + static::assertSame(200, http_response_code()); + static::assertJsonStringEqualsJsonString('{"status":"deleted"}', $output); + static::assertDirectoryDoesNotExist($legacyDir); static::assertFileExists($activeDir . '/data.json'); unlink($inputFile);

« previous php.webmaster (#34067) next »