|
1 | 1 | <?php |
| 2 | + |
2 | 3 | declare(strict_types=1); |
3 | 4 |
|
4 | 5 | namespace JakubBoucek\ComposerConsistency; |
@@ -77,11 +78,11 @@ public function isReqsValid(): bool |
77 | 78 | $definitions = $this->loadReqs(); |
78 | 79 | $instalations = $this->loadInstalled(); |
79 | 80 |
|
80 | | - $diff = array_diff_assoc($definitions, $instalations); |
| 81 | + $diff = $this->compareReqs($definitions, $instalations); |
81 | 82 |
|
82 | 83 | return count($diff) === 0; |
83 | 84 | } catch (FileReadException $e) { |
84 | | - if($this->strictReqs !== true && $e->getRequiredfile() === self::FILE_REQS) { |
| 85 | + if ($this->strictReqs !== true && $e->getRequiredfile() === self::FILE_REQS) { |
85 | 86 | // Ignore missing `composer.lock` file - not deployed to production? |
86 | 87 | return true; |
87 | 88 | } |
@@ -210,4 +211,34 @@ protected function parseJsonArray(string $json): array |
210 | 211 | } |
211 | 212 | return $value; |
212 | 213 | } |
| 214 | + |
| 215 | + /** |
| 216 | + * @param array $required |
| 217 | + * @param array $installed |
| 218 | + * @return array |
| 219 | + */ |
| 220 | + protected function compareReqs(array $required, array $installed): array |
| 221 | + { |
| 222 | + $diffs = array_map( |
| 223 | + static function ($version) { |
| 224 | + return ['required' => $version, 'installed' => null]; |
| 225 | + }, |
| 226 | + $required |
| 227 | + ); |
| 228 | + |
| 229 | + foreach ($installed as $name => $version) { |
| 230 | + if (($diffs[$name]['required'] ?? null) === $version) { |
| 231 | + // Version matches, remove diff |
| 232 | + unset($diffs[$name]); |
| 233 | + |
| 234 | + }else { |
| 235 | + $diffs[$name] = [ |
| 236 | + 'required' => $diffs[$name]['required'] ?? null, |
| 237 | + 'installed' => $version |
| 238 | + ]; |
| 239 | + } |
| 240 | + } |
| 241 | + |
| 242 | + return $diffs; |
| 243 | + } |
213 | 244 | } |
0 commit comments