MediaWiki master
LockFileChecker.php
Go to the documentation of this file.
1<?php
7namespace MediaWiki\Composer;
8
9use Composer\Semver\Semver;
12
20 private ComposerJson $composerJson;
21 private ComposerLock $composerLock;
22
23 public function __construct( ComposerJson $composerJson, ComposerLock $composerLock ) {
24 $this->composerJson = $composerJson;
25 $this->composerLock = $composerLock;
26 }
27
31 public function check(): ?array {
32 $errors = [];
33 $requiredButOld = [];
34 $requiredButMissing = [];
35
36 $installed = $this->composerLock->getInstalledDependencies();
37 foreach ( $this->composerJson->getRequiredDependencies() as $name => $version ) {
38 // Not installed at all.
39 if ( !isset( $installed[$name] ) ) {
40 $requiredButMissing[] = [
41 'name' => $name,
42 'wantedVersion' => $version
43 ];
44 continue;
45 }
46
47 // Installed; need to check it's the right version
48 if ( !SemVer::satisfies( $installed[$name]['version'], $version ) ) {
49 $requiredButOld[] = [
50 'name' => $name,
51 'wantedVersion' => $version,
52 'suppliedVersion' => $installed[$name]['version']
53 ];
54 }
55
56 // We're happy; loop to the next dependency.
57 }
58
59 foreach ( $requiredButOld as [
60 "name" => $name,
61 "suppliedVersion" => $suppliedVersion,
62 "wantedVersion" => $wantedVersion
63 ] ) {
64 $errors[] = "$name: $suppliedVersion installed, $wantedVersion required.";
65 }
66
67 foreach ( $requiredButMissing as [
68 "name" => $name,
69 "wantedVersion" => $wantedVersion
70 ] ) {
71 $errors[] = "$name: not installed, $wantedVersion required.";
72 }
73
74 return $errors ?: null;
75 }
76}
Used to check whether composer-installed dependencies (no-dev) are up-to-date.
__construct(ComposerJson $composerJson, ComposerLock $composerLock)
Reads a composer.json file and provides accessors to get its hash and the required dependencies.
Reads a composer.lock file and provides accessors to get its hash and what is installed.
Copyright (C) 2017 Kunal Mehta legoktm@debian.org