|
7 | 7 | * distributed with this package. |
8 | 8 | */ |
9 | 9 |
|
10 | | -use Cradle\Framework\CommandLine; |
11 | 10 | use Cradle\Framework\Package; |
12 | 11 | use Cradle\Event\EventHandler; |
13 | 12 | use Cradle\Composer\Command; |
|
25 | 24 | // get the package version |
26 | 25 | $version = $request->getStage(1); |
27 | 26 |
|
| 27 | + // get developer package |
| 28 | + $developer = $this->package('cradlephp/cradle-developer'); |
| 29 | + |
28 | 30 | // empty package name? |
29 | 31 | if (!$name) { |
30 | | - CommandLine::error( |
| 32 | + $developer->packageLog( |
| 33 | + 'error', |
31 | 34 | 'Not enough arguments. Usage: `cradle package install vendor/package`' |
32 | 35 | ); |
33 | 36 | } |
34 | 37 |
|
| 38 | + // reset log file |
| 39 | + $developer->packageLog(null, [], $name); |
| 40 | + |
35 | 41 | // valid version? |
36 | 42 | if ($version && !preg_match('/^[0-9\.]+$/i', $version)) { |
37 | | - CommandLine::error( |
38 | | - 'Unable to install package. Version is not valid version format should be 0.0.*.' |
| 43 | + $developer->packageLog( |
| 44 | + 'error', |
| 45 | + 'Unable to install package. Version is not valid version format should be 0.0.*.', |
| 46 | + $name, |
| 47 | + 'install-error' |
39 | 48 | ); |
40 | 49 | } |
41 | 50 |
|
| 51 | + // get package config |
| 52 | + $config = $this->package('global')->config('packages', $name); |
| 53 | + |
42 | 54 | // does the package installed already? |
43 | | - if ($this->package('global')->config('packages', $name)) { |
| 55 | + if ($config && isset($config['version'])) { |
44 | 56 | // let them update instead |
45 | | - CommandLine::error(sprintf( |
46 | | - 'Package is already installed. Run `cradle package update %s` instead', |
47 | | - $name |
48 | | - )); |
| 57 | + $developer->packageLog( |
| 58 | + 'error', |
| 59 | + sprintf( |
| 60 | + 'Package is already installed. Run `cradle package update %s` instead', |
| 61 | + $name |
| 62 | + ), |
| 63 | + $name, |
| 64 | + 'install-error' |
| 65 | + ); |
49 | 66 | } |
50 | 67 |
|
51 | 68 | // get active packages |
|
65 | 82 |
|
66 | 83 | // if it's a pseudo package |
67 | 84 | if ($type === Package::TYPE_PSEUDO) { |
68 | | - CommandLine::error(sprintf( |
69 | | - 'Can\'t install pseudo package %s.', |
70 | | - $name |
71 | | - )); |
| 85 | + $developer->packageLog( |
| 86 | + 'error', |
| 87 | + sprintf('Can\'t install pseudo package %s.', $name), |
| 88 | + $name, |
| 89 | + 'install-error' |
| 90 | + ); |
72 | 91 | } |
73 | 92 |
|
74 | 93 | // if it's a root package |
75 | 94 | if ($type === Package::TYPE_ROOT) { |
76 | | - CommandLine::info(sprintf('Installing root package %s.', $name)); |
| 95 | + $developer->packageLog( |
| 96 | + 'info', |
| 97 | + sprintf('Installing root package %s.', $name), |
| 98 | + $name, |
| 99 | + 'install-pending' |
| 100 | + ); |
77 | 101 |
|
78 | 102 | // directory doesn't exists? |
79 | 103 | if (!is_dir($package->getPackagePath())) { |
80 | | - CommandLine::error('Package does not exists.'); |
| 104 | + $developer->packageLog( |
| 105 | + 'error', |
| 106 | + 'Package does not exists.', |
| 107 | + $name, |
| 108 | + 'install-error' |
| 109 | + ); |
81 | 110 | } |
82 | 111 |
|
83 | 112 | // bootstrap file exists? |
|
88 | 117 | '.cradle.php' |
89 | 118 | ) |
90 | 119 | )) { |
91 | | - CommandLine::error('Bootstrap file .cradle.php does not exists.'); |
| 120 | + $developer->packageLog( |
| 121 | + 'warning', |
| 122 | + 'Bootstrap file .cradle.php does not exists.', |
| 123 | + $name, |
| 124 | + 'install-warning' |
| 125 | + ); |
92 | 126 | } |
93 | 127 |
|
94 | 128 | // just let the package process the given version |
95 | 129 | $request->setStage('version', $version); |
96 | 130 | } |
97 | 131 |
|
98 | 132 | // if it's a vendor package |
99 | | - if ($type === Package::TYPE_VENDOR && !is_dir($package->getPackagePath())) { |
100 | | - CommandLine::info(sprintf('Installing vendor package %s.', $name)); |
| 133 | + if ($type === Package::TYPE_VENDOR) { |
| 134 | + $developer->packageLog( |
| 135 | + 'info', |
| 136 | + sprintf('Installing vendor package %s.', $name), |
| 137 | + $name, |
| 138 | + 'install-pending' |
| 139 | + ); |
101 | 140 |
|
102 | 141 | // we need to check from packagist |
103 | 142 | $results = (new Packagist())->get($name); |
104 | 143 |
|
105 | 144 | // if results is empty |
106 | 145 | if (!isset($results['packages'][$name])) { |
107 | | - CommandLine::error('Package does not exists from packagists.org.'); |
| 146 | + $developer->packageLog( |
| 147 | + 'error', |
| 148 | + 'Package does not exists from packagists.org.', |
| 149 | + $name, |
| 150 | + 'install-error' |
| 151 | + ); |
108 | 152 | } |
109 | 153 |
|
110 | 154 | // if version is not set |
|
119 | 163 |
|
120 | 164 | // if no valid version |
121 | 165 | if (empty($versions)) { |
122 | | - CommandLine::error('Couldn\'t find a valid version.'); |
| 166 | + $developer->packageLog( |
| 167 | + 'error', |
| 168 | + 'Couldn\'t find a valid version.', |
| 169 | + $name, |
| 170 | + 'install-error' |
| 171 | + ); |
123 | 172 | } |
124 | 173 |
|
125 | 174 | //sort versions, and get the latest one |
|
128 | 177 | } else { |
129 | 178 | // if version does not exists |
130 | 179 | if (!isset($results['packages'][$name][$version])) { |
131 | | - CommandLine::error('Couldn\'t find the provided version.'); |
| 180 | + $developer->packageLog( |
| 181 | + 'error', |
| 182 | + 'Couldn\'t find the provided version.', |
| 183 | + $name, |
| 184 | + 'install-error' |
| 185 | + ); |
132 | 186 | } |
133 | 187 | } |
134 | 188 |
|
135 | 189 | // let them know we're installing via composer |
136 | | - CommandLine::info(sprintf( |
137 | | - 'Installing package version %s via composer.', |
138 | | - $version |
139 | | - )); |
| 190 | + $developer->packageLog( |
| 191 | + 'info', |
| 192 | + sprintf( |
| 193 | + 'Installing package version %s via composer.', |
| 194 | + $version |
| 195 | + ), |
| 196 | + $name, |
| 197 | + 'install-pending' |
| 198 | + ); |
140 | 199 |
|
141 | 200 | //increase memory limit |
142 | 201 | ini_set('memory_limit', -1); |
|
145 | 204 | $composer = $this->package('global')->path('root') . '/vendor/bin/composer'; |
146 | 205 |
|
147 | 206 | // run composer require command |
148 | | - (new Command($composer))->require(sprintf('%s:%s', $name, $version)); |
149 | | - |
| 207 | + (new Command($composer)) |
| 208 | + // set our custom output handler |
| 209 | + ->setOutputHandler(function($message, $newline) use ($developer, $name) { |
| 210 | + // log composer output |
| 211 | + $developer->packageLog('info', $message, $name); |
| 212 | + }) |
| 213 | + // require the package |
| 214 | + ->require(sprintf('%s:%s', $name, $version)); |
| 215 | + |
150 | 216 | // let them install the package manually |
151 | | - CommandLine::info('Package has been installed.'); |
| 217 | + $developer->packageLog('info', 'Package has been installed.', $name); |
| 218 | + } |
152 | 219 |
|
153 | | - // register the package again |
| 220 | + // clone the bootstrap file |
| 221 | + $bootstrap = new ReflectionClass($package); |
| 222 | + // get the methods |
| 223 | + $methods = $bootstrap->getProperty('methods'); |
| 224 | + // make it accessible |
| 225 | + $methods->setAccessible(true); |
| 226 | + // get methods |
| 227 | + $methods = $methods->getValue($package); |
| 228 | + |
| 229 | + // check if install methods is set |
| 230 | + if (!isset($methods['install'])) { |
| 231 | + // try to register the package |
154 | 232 | $package = $this->register($name)->package($name); |
155 | 233 | } |
156 | 234 |
|
|
174 | 252 |
|
175 | 253 | // if error |
176 | 254 | if ($response->isError()) { |
177 | | - CommandLine::error($response->getMessage(), false); |
| 255 | + $developer->packageLog( |
| 256 | + 'error', |
| 257 | + $response->getMessage(), |
| 258 | + $name, |
| 259 | + 'install-error' |
| 260 | + ); |
| 261 | + |
178 | 262 | return; |
179 | 263 | } |
180 | 264 |
|
181 | 265 | // if version |
182 | 266 | if ($response->hasResults('version')) { |
183 | 267 | // this means that the package itself updates it's version |
184 | 268 | $version = $response->getResults('version'); |
185 | | - CommandLine::success(sprintf('%s was installed to %s', $name, $version)); |
| 269 | + $developer->packageLog( |
| 270 | + 'success', |
| 271 | + sprintf('%s was installed to %s', $name, $version), |
| 272 | + $name, |
| 273 | + 'install-success' |
| 274 | + ); |
| 275 | + |
186 | 276 | return; |
187 | 277 | } |
188 | 278 |
|
189 | | - CommandLine::success(sprintf('%s was installed', $name)); |
| 279 | + $developer->packageLog( |
| 280 | + 'success', |
| 281 | + sprintf('%s was installed', $name), |
| 282 | + $name, |
| 283 | + 'install-success' |
| 284 | + ); |
190 | 285 | }; |
0 commit comments