|
14 | 14 | namespace Ymir\Cli\Deployment; |
15 | 15 |
|
16 | 16 | use Illuminate\Support\Collection; |
| 17 | +use Illuminate\Support\LazyCollection; |
17 | 18 | use Symfony\Component\Console\Helper\ProgressBar; |
18 | 19 | use Symfony\Component\Finder\Finder; |
19 | 20 | use Ymir\Cli\ApiClient; |
@@ -79,19 +80,19 @@ public function perform(Collection $deployment, OutputInterface $output) |
79 | 80 | return isset($signedAssetRequests['copy'][$asset['relative_path']]); |
80 | 81 | })->map(function (array $asset) use ($signedAssetRequests) { |
81 | 82 | return $signedAssetRequests['copy'][$asset['relative_path']]; |
82 | | - })->all(), $output); |
| 83 | + }), $output); |
83 | 84 |
|
84 | 85 | $this->uploadAssetFiles($assetFiles->filter(function (array $asset) use ($signedAssetRequests) { |
85 | 86 | return isset($signedAssetRequests['store'][$asset['relative_path']]); |
86 | 87 | })->mapWithKeys(function (array $asset) use ($signedAssetRequests) { |
87 | 88 | return [$asset['real_path'] => $signedAssetRequests['store'][$asset['relative_path']]]; |
88 | | - })->all(), $output); |
| 89 | + }), $output); |
89 | 90 | } |
90 | 91 |
|
91 | 92 | /** |
92 | 93 | * Send the given asset file copy requests. |
93 | 94 | */ |
94 | | - private function copyAssetFiles(array $requests, OutputInterface $output) |
| 95 | + private function copyAssetFiles(Collection $requests, OutputInterface $output) |
95 | 96 | { |
96 | 97 | if (empty($requests)) { |
97 | 98 | return; |
@@ -129,20 +130,22 @@ private function getAssetFiles(): Collection |
129 | 130 | /** |
130 | 131 | * Send the given asset file upload requests. |
131 | 132 | */ |
132 | | - private function uploadAssetFiles(array $requests, OutputInterface $output) |
| 133 | + private function uploadAssetFiles(Collection $requests, OutputInterface $output) |
133 | 134 | { |
134 | 135 | if (empty($requests)) { |
135 | 136 | return; |
136 | 137 | } |
137 | 138 |
|
138 | 139 | $progressBar = new ProgressBar($output); |
139 | 140 | $progressBar->setFormat(' > Uploading new asset files (<comment>%current%/%max%</comment>)'); |
140 | | - $progressBar->start(count($requests)); |
141 | 141 |
|
142 | | - foreach ($requests as $realFilePath => $request) { |
143 | | - $this->uploader->uploadFile((string) $realFilePath, (string) $request['uri'], $request['headers']); |
144 | | - $progressBar->advance(); |
145 | | - } |
| 142 | + $requests = LazyCollection::make($requests)->map(function (array $request, string $realFilePath) { |
| 143 | + $request['body'] = fopen($realFilePath, 'r+'); |
| 144 | + |
| 145 | + return $request; |
| 146 | + }); |
| 147 | + |
| 148 | + $this->uploader->batch('PUT', $requests, $progressBar); |
146 | 149 |
|
147 | 150 | $output->newLine(); |
148 | 151 | } |
|
0 commit comments