|
@@ -294,42 +294,50 @@ class Installer
|
|
|
}
|
|
|
|
|
|
|
|
|
- if ($this->update || $installFromLock) {
|
|
|
- foreach ($localRepo->getPackages() as $package) {
|
|
|
-
|
|
|
- if (!$package->isDev()) {
|
|
|
- continue;
|
|
|
+ foreach ($localRepo->getPackages() as $package) {
|
|
|
+
|
|
|
+ if (!$package->isDev()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ foreach ($operations as $operation) {
|
|
|
+ if (('update' === $operation->getJobType() && $operation->getInitialPackage()->equals($package))
|
|
|
+ || ('uninstall' === $operation->getJobType() && $operation->getPackage()->equals($package))
|
|
|
+ ) {
|
|
|
+ continue 2;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- foreach ($operations as $operation) {
|
|
|
- if (('update' === $operation->getJobType() && $operation->getInitialPackage()->equals($package))
|
|
|
- || ('uninstall' === $operation->getJobType() && $operation->getPackage()->equals($package))
|
|
|
- ) {
|
|
|
- continue 2;
|
|
|
+
|
|
|
+ if ($installFromLock) {
|
|
|
+ $lockData = $this->locker->getLockData();
|
|
|
+ unset($lockedReference);
|
|
|
+ foreach ($lockData['packages'] as $lockedPackage) {
|
|
|
+ if (!empty($lockedPackage['source-reference']) && strtolower($lockedPackage['package']) === $package->getName()) {
|
|
|
+ $lockedReference = $lockedPackage['source-reference'];
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ if (isset($lockedReference) && $lockedReference !== $package->getSourceReference()) {
|
|
|
+
|
|
|
+ $operations[] = new UpdateOperation($package, clone $package);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
|
|
|
if ($this->update) {
|
|
|
$newPackage = $this->repositoryManager->findPackage($package->getName(), $package->getVersion());
|
|
|
if ($newPackage && $newPackage->getSourceReference() !== $package->getSourceReference()) {
|
|
|
$operations[] = new UpdateOperation($package, $newPackage);
|
|
|
}
|
|
|
- } elseif ($installFromLock) {
|
|
|
-
|
|
|
- $lockData = $this->locker->getLockData();
|
|
|
- unset($lockedReference);
|
|
|
- foreach ($lockData['packages'] as $lockedPackage) {
|
|
|
- if (!empty($lockedPackage['source-reference']) && strtolower($lockedPackage['package']) === $package->getName()) {
|
|
|
- $lockedReference = $lockedPackage['source-reference'];
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (isset($lockedReference) && $lockedReference !== $package->getSourceReference()) {
|
|
|
-
|
|
|
- $operations[] = new UpdateOperation($package, $package);
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $references = $this->package->getReferences();
|
|
|
+
|
|
|
+ if (isset($references[$package->getName()]) && $references[$package->getName()] !== $package->getSourceReference()) {
|
|
|
+
|
|
|
+ $operations[] = new UpdateOperation($package, clone $package);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -378,7 +386,22 @@ class Installer
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+
|
|
|
+ $package = null;
|
|
|
+ if ('update' === $operation->getJobType()) {
|
|
|
+ $package = $operation->getTargetPackage();
|
|
|
+ } elseif ('install' === $operation->getJobType()) {
|
|
|
+ $package = $operation->getPackage();
|
|
|
+ }
|
|
|
+ if ($package && $package->isDev()) {
|
|
|
+ $references = $this->package->getReferences();
|
|
|
+ if (isset($references[$package->getName()])) {
|
|
|
+ $package->setSourceReference($references[$package->getName()]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
$this->installationManager->execute($localRepo, $operation);
|
|
|
|
|
|
$event = 'Composer\Script\ScriptEvents::POST_PACKAGE_'.strtoupper($operation->getJobType());
|