Skip to content

Commit c699405

Browse files
ilyaplotIlya Plotnikov
and
Ilya Plotnikov
authored
fix: convert Finder lazy iterator to array before deletion (#2663)
Co-authored-by: Ilya Plotnikov <[email protected]>
1 parent 058b9fb commit c699405

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

src/Task/Composer.php

+28-26
Original file line numberDiff line numberDiff line change
@@ -34,35 +34,37 @@ public static function cleanup(
3434
) {
3535
$composer = $event->getComposer();
3636
$extra = $composer->getPackage()->getExtra();
37-
$servicesToKeep = isset($extra['google/apiclient-services'])
38-
? $extra['google/apiclient-services']
39-
: [];
40-
if ($servicesToKeep) {
41-
$vendorDir = $composer->getConfig()->get('vendor-dir');
37+
$servicesToKeep = $extra['google/apiclient-services'] ?? [];
38+
if (empty($servicesToKeep)) {
39+
return;
40+
}
41+
$vendorDir = $composer->getConfig()->get('vendor-dir');
42+
$serviceDir = sprintf(
43+
'%s/google/apiclient-services/src/Google/Service',
44+
$vendorDir
45+
);
46+
if (!is_dir($serviceDir)) {
47+
// path for google/apiclient-services >= 0.200.0
4248
$serviceDir = sprintf(
43-
'%s/google/apiclient-services/src/Google/Service',
49+
'%s/google/apiclient-services/src',
4450
$vendorDir
4551
);
46-
if (!is_dir($serviceDir)) {
47-
// path for google/apiclient-services >= 0.200.0
48-
$serviceDir = sprintf(
49-
'%s/google/apiclient-services/src',
50-
$vendorDir
51-
);
52-
}
53-
self::verifyServicesToKeep($serviceDir, $servicesToKeep);
54-
$finder = self::getServicesToRemove($serviceDir, $servicesToKeep);
55-
$filesystem = $filesystem ?: new Filesystem();
56-
if (0 !== $count = count($finder)) {
57-
$event->getIO()->write(
58-
sprintf('Removing %s google services', $count)
59-
);
60-
foreach ($finder as $file) {
61-
$realpath = $file->getRealPath();
62-
$filesystem->remove($realpath);
63-
$filesystem->remove($realpath . '.php');
64-
}
65-
}
52+
}
53+
self::verifyServicesToKeep($serviceDir, $servicesToKeep);
54+
$finder = self::getServicesToRemove($serviceDir, $servicesToKeep);
55+
$filesystem = $filesystem ?: new Filesystem();
56+
$servicesToRemoveCount = $finder->count();
57+
if (0 === $servicesToRemoveCount) {
58+
return;
59+
}
60+
$event->getIO()->write(
61+
sprintf('Removing %d google services', $servicesToRemoveCount)
62+
);
63+
$pathsToRemove = iterator_to_array($finder);
64+
foreach ($pathsToRemove as $pathToRemove) {
65+
$realpath = $pathToRemove->getRealPath();
66+
$filesystem->remove($realpath);
67+
$filesystem->remove($realpath . '.php');
6668
}
6769
}
6870

0 commit comments

Comments
 (0)