|
1 | 1 | <?php |
2 | 2 |
|
3 | | -use \Composer\Composer; |
4 | | -use \Composer\Config; |
5 | | -use \Composer\Config\JsonConfigSource; |
6 | | -use \Composer\DependencyResolver\Pool; |
7 | | -use \Composer\EventDispatcher\Event; |
8 | | -use \Composer\Factory; |
9 | | -use \Composer\IO\NullIO; |
10 | | -use \Composer\Installer; |
11 | | -use \Composer\Json\JsonFile; |
12 | | -use \Composer\Package; |
13 | | -use \Composer\Package\BasePackage; |
14 | | -use \Composer\Package\PackageInterface; |
15 | | -use \Composer\Package\Version\VersionParser; |
16 | | -use \Composer\Package\Version\VersionSelector; |
17 | | -use \Composer\Repository; |
18 | | -use \Composer\Repository\CompositeRepository; |
19 | | -use \Composer\Repository\ComposerRepository; |
20 | | -use \Composer\Repository\RepositoryManager; |
21 | | -use \Composer\Util\Filesystem; |
| 3 | +use Composer\Composer; |
| 4 | +use Composer\Config; |
| 5 | +use Composer\Config\JsonConfigSource; |
| 6 | +use Composer\DependencyResolver\Pool; |
| 7 | +use Composer\EventDispatcher\Event; |
| 8 | +use Composer\Factory; |
| 9 | +use Composer\IO\NullIO; |
| 10 | +use Composer\Installer; |
| 11 | +use Composer\Json\JsonFile; |
| 12 | +use Composer\Package; |
| 13 | +use Composer\Package\BasePackage; |
| 14 | +use Composer\Package\PackageInterface; |
| 15 | +use Composer\Package\Version\VersionParser; |
| 16 | +use Composer\Package\Version\VersionSelector; |
| 17 | +use Composer\Repository; |
| 18 | +use Composer\Repository\CompositeRepository; |
| 19 | +use Composer\Repository\ComposerRepository; |
| 20 | +use Composer\Repository\RepositoryManager; |
| 21 | +use Composer\Util\Filesystem; |
22 | 22 | use WP_CLI\ComposerIO; |
23 | 23 | use WP_CLI\Extractor; |
24 | 24 | use WP_CLI\Utils; |
25 | 25 | use WP_CLI\JsonManipulator; |
| 26 | +use WP_CLI\PackageManagerEventSubscriber; |
26 | 27 |
|
27 | 28 | /** |
28 | 29 | * Lists, installs, and removes WP-CLI packages. |
@@ -82,6 +83,25 @@ class Package_Command extends WP_CLI_Command { |
82 | 83 |
|
83 | 84 | private $pool = false; |
84 | 85 |
|
| 86 | + /** |
| 87 | + * Default author data used while creating default WP-CLI packages composer.json. |
| 88 | + * |
| 89 | + * @var array |
| 90 | + */ |
| 91 | + private $author_data = [ |
| 92 | + 'name' => 'WP-CLI', |
| 93 | + |
| 94 | + ]; |
| 95 | + |
| 96 | + /** |
| 97 | + * Default repository data used while creating default WP-CLI packages composer.json. |
| 98 | + * @var array |
| 99 | + */ |
| 100 | + private $composer_type_package = [ |
| 101 | + 'type' => 'composer', |
| 102 | + 'url' => self::PACKAGE_INDEX_URL, |
| 103 | + ]; |
| 104 | + |
85 | 105 | /** |
86 | 106 | * Browses WP-CLI packages available for installation. |
87 | 107 | * |
@@ -310,46 +330,47 @@ public function install( $args, $assoc_args ) { |
310 | 330 | $json_manipulator->addLink( 'require', $package_name, $version, false /*sortPackages*/, true /*caseInsensitive*/ ); |
311 | 331 | $json_manipulator->addConfigSetting( 'secure-http', true ); |
312 | 332 |
|
| 333 | + $package_args = []; |
313 | 334 | if ( $git_package ) { |
314 | 335 | WP_CLI::log( sprintf( 'Registering %s as a VCS repository...', $git_package ) ); |
| 336 | + $package_args = [ |
| 337 | + 'type' => 'vcs', |
| 338 | + 'url' => $git_package, |
| 339 | + ]; |
315 | 340 | $json_manipulator->addSubNode( |
316 | 341 | 'repositories', |
317 | 342 | $package_name, |
318 | | - [ |
319 | | - 'type' => 'vcs', |
320 | | - 'url' => $git_package, |
321 | | - ], |
| 343 | + $package_args, |
322 | 344 | true /*caseInsensitive*/ |
323 | 345 | ); |
324 | 346 | } elseif ( $dir_package ) { |
325 | 347 | WP_CLI::log( sprintf( 'Registering %s as a path repository...', $dir_package ) ); |
| 348 | + $package_args = [ |
| 349 | + 'type' => 'path', |
| 350 | + 'url' => $dir_package, |
| 351 | + ]; |
326 | 352 | $json_manipulator->addSubNode( |
327 | 353 | 'repositories', |
328 | 354 | $package_name, |
329 | | - [ |
330 | | - 'type' => 'path', |
331 | | - 'url' => $dir_package, |
332 | | - ], |
| 355 | + $package_args, |
333 | 356 | true /*caseInsensitive*/ |
334 | 357 | ); |
335 | 358 | } |
336 | 359 | // If the composer file does not contain the current package index repository, refresh the repository definition. |
337 | 360 | if ( empty( $composer_backup_decoded['repositories']['wp-cli']['url'] ) || self::PACKAGE_INDEX_URL !== $composer_backup_decoded['repositories']['wp-cli']['url'] ) { |
338 | 361 | WP_CLI::log( 'Updating package index repository url...' ); |
| 362 | + $package_args = $this->composer_type_package; |
339 | 363 | $json_manipulator->addRepository( |
340 | 364 | 'wp-cli', |
341 | | - [ |
342 | | - 'type' => 'composer', |
343 | | - 'url' => self::PACKAGE_INDEX_URL, |
344 | | - ] |
| 365 | + $package_args |
345 | 366 | ); |
346 | 367 | } |
347 | 368 |
|
348 | 369 | file_put_contents( $json_path, $json_manipulator->getContents() ); |
349 | 370 | $composer = $this->get_composer(); |
350 | 371 |
|
351 | 372 | // Set up the EventSubscriber |
352 | | - $event_subscriber = new \WP_CLI\PackageManagerEventSubscriber(); |
| 373 | + $event_subscriber = new PackageManagerEventSubscriber(); |
353 | 374 | $composer->getEventDispatcher()->addSubscriber( $event_subscriber ); |
354 | 375 | // Set up the installer |
355 | 376 | $install = Installer::create( new ComposerIO(), $composer ); |
@@ -482,7 +503,7 @@ public function update() { |
482 | 503 | $composer = $this->get_composer(); |
483 | 504 |
|
484 | 505 | // Set up the EventSubscriber |
485 | | - $event_subscriber = new \WP_CLI\PackageManagerEventSubscriber(); |
| 506 | + $event_subscriber = new PackageManagerEventSubscriber(); |
486 | 507 | $composer->getEventDispatcher()->addSubscriber( $event_subscriber ); |
487 | 508 |
|
488 | 509 | // Set up the installer |
@@ -598,8 +619,9 @@ private function get_composer() { |
598 | 619 | // Best to just pretend we're installing a package from ~/.wp-cli or similar |
599 | 620 | chdir( pathinfo( $composer_path, PATHINFO_DIRNAME ) ); |
600 | 621 |
|
601 | | - // Prevent DateTime error/warning when no timezone set |
602 | | - // phpcs:ignore WordPress.WP.TimezoneChange.timezone_change_date_default_timezone_set, WordPress.PHP.NoSilencedErrors.Discouraged -- The package is loaded before WordPress load, For environments that don't have set time in php.ini. |
| 622 | + // Prevent DateTime error/warning when no timezone set. |
| 623 | + // Note: The package is loaded before WordPress load, For environments that don't have set time in php.ini. |
| 624 | + // phpcs:ignore WordPress.WP.TimezoneChange.timezone_change_date_default_timezone_set,WordPress.PHP.NoSilencedErrors.Discouraged |
603 | 625 | date_default_timezone_set( @date_default_timezone_get() ); |
604 | 626 |
|
605 | 627 | $composer = Factory::create( new NullIO(), $composer_path ); |
@@ -641,15 +663,14 @@ private function package_index() { |
641 | 663 | static $package_index; |
642 | 664 |
|
643 | 665 | if ( ! $package_index ) { |
644 | | - $config = new Config(); |
645 | | - $config->merge( |
646 | | - [ |
647 | | - 'config' => [ |
648 | | - 'secure-http' => true, |
649 | | - 'home' => dirname( $this->get_composer_json_path() ), |
650 | | - ], |
651 | | - ] |
652 | | - ); |
| 666 | + $config_args = [ |
| 667 | + 'config' => [ |
| 668 | + 'secure-http' => true, |
| 669 | + 'home' => dirname( $this->get_composer_json_path() ), |
| 670 | + ], |
| 671 | + ]; |
| 672 | + $config = new Config(); |
| 673 | + $config->merge( $config_args ); |
653 | 674 | $config->setConfigSource( new JsonConfigSource( $this->get_composer_json() ) ); |
654 | 675 |
|
655 | 676 | try { |
@@ -728,8 +749,8 @@ private function show_packages( $context, $packages, $assoc_args ) { |
728 | 749 |
|
729 | 750 | $list = array_map( |
730 | 751 | function( $package ) { |
731 | | - $package['version'] = implode( ', ', $package['version'] ); |
732 | | - return $package; |
| 752 | + $package['version'] = implode( ', ', $package['version'] ); |
| 753 | + return $package; |
733 | 754 | }, |
734 | 755 | $list |
735 | 756 | ); |
@@ -933,23 +954,15 @@ private function create_default_composer_json( $composer_path ) { |
933 | 954 |
|
934 | 955 | $json_file = new JsonFile( $composer_path ); |
935 | 956 |
|
936 | | - $author = (object) [ |
937 | | - 'name' => 'WP-CLI', |
938 | | - |
939 | | - ]; |
940 | | - |
941 | 957 | $repositories = (object) [ |
942 | | - 'wp-cli' => (object) [ |
943 | | - 'type' => 'composer', |
944 | | - 'url' => self::PACKAGE_INDEX_URL, |
945 | | - ], |
| 958 | + 'wp-cli' => (object) $this->composer_type_package, |
946 | 959 | ]; |
947 | 960 |
|
948 | 961 | $options = [ |
949 | 962 | 'name' => 'wp-cli/wp-cli', |
950 | 963 | 'description' => 'Installed community packages used by WP-CLI', |
951 | 964 | 'version' => self::get_wp_cli_version_composer(), |
952 | | - 'authors' => [ $author ], |
| 965 | + 'authors' => [ (object) $this->author_data ], |
953 | 966 | 'homepage' => self::PACKAGE_INDEX_URL, |
954 | 967 | 'require' => new stdClass(), |
955 | 968 | 'require-dev' => new stdClass(), |
@@ -1139,14 +1152,14 @@ private function guess_version_constraint_from_tag( $tag ) { |
1139 | 1152 | private function set_composer_auth_env_var() { |
1140 | 1153 | $changed = false; |
1141 | 1154 | $composer_auth = getenv( 'COMPOSER_AUTH' ); |
1142 | | - if ( ! $composer_auth ) { |
| 1155 | + if ( false !== $composer_auth ) { |
1143 | 1156 | $composer_auth = json_decode( $composer_auth, true /*assoc*/ ); |
1144 | 1157 | } |
1145 | | - if ( ! $composer_auth || ! is_array( $composer_auth ) ) { |
| 1158 | + if ( empty( $composer_auth ) || ! is_array( $composer_auth ) ) { |
1146 | 1159 | $composer_auth = []; |
1147 | 1160 | } |
1148 | 1161 | $github_token = getenv( 'GITHUB_TOKEN' ); |
1149 | | - if ( ! isset( $composer_auth['github-oauth'] ) && $github_token ) { |
| 1162 | + if ( ! isset( $composer_auth['github-oauth'] ) && is_string( $github_token ) ) { |
1150 | 1163 | $composer_auth['github-oauth'] = [ 'github.com' => $github_token ]; |
1151 | 1164 | $changed = true; |
1152 | 1165 | } |
@@ -1211,26 +1224,23 @@ private function register_revert_shutdown_function( $json_path, $composer_backup |
1211 | 1224 |
|
1212 | 1225 | register_shutdown_function( |
1213 | 1226 | function () use ( |
1214 | | - $json_path, |
1215 | | - $composer_backup, |
1216 | | - &$revert, |
1217 | | - $revert_msg, |
1218 | | - $revert_fail_msg, |
1219 | | - $memory_msg, |
1220 | | - $memory_string, |
1221 | | - $error_array |
| 1227 | + $json_path, |
| 1228 | + $composer_backup, |
| 1229 | + &$revert, |
| 1230 | + $revert_msg, |
| 1231 | + $revert_fail_msg, |
| 1232 | + $memory_msg, |
| 1233 | + $memory_string, |
| 1234 | + $error_array |
1222 | 1235 | ) { |
1223 | 1236 | if ( $revert ) { |
1224 | | - if ( false === file_put_contents( |
1225 | | - $json_path, |
1226 | | - $composer_backup |
1227 | | - ) ) { |
1228 | | - fwrite( STDERR, $revert_fail_msg ); |
| 1237 | + if ( false === file_put_contents( $json_path, $composer_backup ) ) { |
| 1238 | + fwrite( STDERR, $revert_fail_msg ); |
1229 | 1239 | } else { |
1230 | 1240 | fwrite( STDERR, $revert_msg ); |
1231 | 1241 | } |
1232 | 1242 | } |
1233 | | - $error_array = error_get_last(); |
| 1243 | + $error_array = error_get_last(); |
1234 | 1244 | if ( false !== strpos( $error_array['message'], $memory_string ) ) { |
1235 | 1245 | fwrite( STDERR, $memory_msg ); |
1236 | 1246 | } |
|
0 commit comments