Skip to content

Commit 1a38817

Browse files
committed
Support multiple requirements per package
Signed-off-by: Ryan McCue <me@ryanmccue.info>
1 parent 5a9b94d commit 1a38817

File tree

1 file changed

+56
-48
lines changed

1 file changed

+56
-48
lines changed

inc/packages/namespace.php

Lines changed: 56 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -358,55 +358,63 @@ function version_requirements( ReleaseDocument $release ) {
358358
*/
359359
function get_unmet_requirements( array $requirements ) : array {
360360
$unmet = [];
361-
foreach ( $requirements as $pkg => $req ) {
362-
$req = trim( $req );
363-
$comp_spn = strspn( $req, '<>=!' );
364-
if ( $comp_spn === 0 ) {
365-
// Invalid requirement, for now.
366-
continue;
367-
}
368-
369-
$comp = trim( substr( $req, 0, $comp_spn ) );
370-
$ver = trim( substr( $req, $comp_spn ) );
371-
372-
switch ( true ) {
373-
case $pkg === 'env:wp':
374-
// From is_wp_version_compatible()
375-
// We use our own copy to allow passing $comp
376-
if (
377-
defined( 'WP_RUN_CORE_TESTS' )
378-
&& WP_RUN_CORE_TESTS
379-
&& isset( $GLOBALS['_wp_tests_wp_version'] )
380-
) {
381-
$wp_version = $GLOBALS['_wp_tests_wp_version'];
382-
} else {
383-
$wp_version = wp_get_wp_version();
384-
}
385-
386-
$valid = version_compare( $wp_version, $ver, $comp );
387-
if ( ! $valid ) {
388-
$unmet[ $pkg ] = $req;
389-
}
390-
break;
391-
392-
case $pkg === 'env:php':
393-
$valid = version_compare( PHP_VERSION, $ver, $comp );
394-
if ( ! $valid ) {
395-
$unmet[ $pkg ] = $req;
396-
}
397-
break;
398-
399-
case str_starts_with( $pkg, 'env:php-' ):
400-
// todo: check extensions.
401-
break;
402-
403-
case str_starts_with( $pkg, 'env:' ):
404-
// todo: check other env, or fail.
405-
break;
361+
foreach ( $requirements as $pkg => $req_list ) {
362+
$req_parts = explode( ',', $req_list );
363+
$req_unmet = [];
364+
foreach ( $req_parts as $req ) {
365+
$req = trim( $req );
366+
$comp_spn = strspn( $req, '<>=!' );
367+
if ( $comp_spn === 0 ) {
368+
// Invalid requirement, for now.
369+
continue;
370+
}
406371

407-
default:
408-
// todo: check packages.
409-
break;
372+
$comp = trim( substr( $req, 0, $comp_spn ) );
373+
$ver = trim( substr( $req, $comp_spn ) );
374+
375+
switch ( true ) {
376+
case $pkg === 'env:wp':
377+
// From is_wp_version_compatible()
378+
// We use our own copy to allow passing $comp
379+
if (
380+
defined( 'WP_RUN_CORE_TESTS' )
381+
&& WP_RUN_CORE_TESTS
382+
&& isset( $GLOBALS['_wp_tests_wp_version'] )
383+
) {
384+
$wp_version = $GLOBALS['_wp_tests_wp_version'];
385+
} else {
386+
$wp_version = wp_get_wp_version();
387+
}
388+
389+
$valid = version_compare( $wp_version, $ver, $comp );
390+
if ( ! $valid ) {
391+
$req_unmet[] = $req;
392+
}
393+
break;
394+
395+
case $pkg === 'env:php':
396+
$valid = version_compare( PHP_VERSION, $ver, $comp );
397+
var_dump( sprintf( '%s %s %s', PHP_VERSION, $comp, $ver ), $valid );
398+
if ( ! $valid ) {
399+
$req_unmet[] = $req;
400+
}
401+
break;
402+
403+
case str_starts_with( $pkg, 'env:php-' ):
404+
// todo: check extensions.
405+
break;
406+
407+
case str_starts_with( $pkg, 'env:' ):
408+
// todo: check other env, or fail.
409+
break;
410+
411+
default:
412+
// todo: check packages.
413+
break;
414+
}
415+
}
416+
if ( ! empty( $req_unmet ) ) {
417+
$unmet[ $pkg ] = implode( ', ', $req_unmet );
410418
}
411419
}
412420

0 commit comments

Comments
 (0)