@@ -187,15 +187,44 @@ private function assertAndExecute($name, array & $packages, array $packageJob)
187
187
{
188
188
/** @var Package $package */
189
189
$ package = $ packageJob ['package ' ];
190
+ $ dependenciesNotFinished = false ;
190
191
if ($ package ->getParent () && $ package ->getParent () !== $ package ) {
191
192
foreach ($ packageJob ['dependencies ' ] as $ dependencyName => $ dependency ) {
192
193
if (!$ this ->isDeployed ($ dependency )) {
193
- $ this ->assertAndExecute ($ dependencyName , $ packages , $ packages [$ dependencyName ]);
194
+ //If it's not present in $packages then it's already
195
+ //in progress so just waiting...
196
+ if (!array_key_exists ($ dependencyName , $ packages )) {
197
+ $ dependenciesNotFinished = true ;
198
+ } else {
199
+ $ this ->assertAndExecute (
200
+ $ dependencyName ,
201
+ $ packages ,
202
+ $ packages [$ dependencyName ]
203
+ );
204
+ }
194
205
}
195
206
}
196
207
}
197
- if (!$ this ->isDeployed ($ package )
198
- && ($ this ->maxProcesses < 2 || (count ($ this ->inProgress ) < $ this ->maxProcesses ))) {
208
+ $ this ->executePackage ($ package , $ name , $ packages , $ dependenciesNotFinished );
209
+ }
210
+
211
+ /**
212
+ * @param Package $package
213
+ * @param string $name
214
+ * @param array $packages
215
+ * @param bool $dependenciesNotFinished
216
+ * @return void
217
+ */
218
+ private function executePackage (
219
+ Package $ package ,
220
+ string $ name ,
221
+ array &$ packages ,
222
+ bool $ dependenciesNotFinished
223
+ ) {
224
+ if (!$ dependenciesNotFinished
225
+ && !$ this ->isDeployed ($ package )
226
+ && ($ this ->maxProcesses < 2 || (count ($ this ->inProgress ) < $ this ->maxProcesses ))
227
+ ) {
199
228
unset($ packages [$ name ]);
200
229
$ this ->execute ($ package );
201
230
}
0 commit comments