mirror of
https://github.com/flarum/core.git
synced 2025-07-16 06:16:23 +02:00
Auto append :*
when installing an extension if not specifying a version
This commit is contained in:
@ -66,12 +66,19 @@ class RequireExtensionHandler
|
||||
throw new ExtensionAlreadyInstalledException($extension);
|
||||
}
|
||||
|
||||
$packageName = $command->package;
|
||||
|
||||
// Auto append :* if not requiring a specific version.
|
||||
if (strpos($packageName, ':') === false) {
|
||||
$packageName .= ":*";
|
||||
}
|
||||
|
||||
$output = $this->composer->run(
|
||||
new StringInput("require $command->package")
|
||||
new StringInput("require $packageName")
|
||||
);
|
||||
|
||||
if ($output->getExitCode() !== 0) {
|
||||
throw new ComposerRequireFailedException($command->package, $output->getContents());
|
||||
throw new ComposerRequireFailedException($packageName, $output->getContents());
|
||||
}
|
||||
|
||||
$this->events->dispatch(
|
||||
|
@ -13,7 +13,7 @@ use Flarum\Foundation\ErrorHandling\HandledError;
|
||||
|
||||
class ComposerCommandFailedExceptionHandler
|
||||
{
|
||||
protected const INCOMPATIBLE_REGEX = '/(?:(?: +- {PACKAGE_NAME} v[0-9A-z.-]+ requires flarum\/core)|(?:Could not find a version of package {PACKAGE_NAME} matching your minim))/m';
|
||||
protected const INCOMPATIBLE_REGEX = '/(?:(?: +- {PACKAGE_NAME}(?: v[0-9A-z.-]+ requires|\[[^\[\]]+\] require) flarum\/core)|(?:Could not find a version of package {PACKAGE_NAME} matching your minim)|(?: +- Root composer.json requires {PACKAGE_NAME} [^,]+, found {PACKAGE_NAME}\[[^\[\]]+\]+ but it does not match your minimum-stability))/m';
|
||||
|
||||
public function handle(ComposerCommandFailedException $e): HandledError
|
||||
{
|
||||
@ -39,8 +39,10 @@ class ComposerCommandFailedExceptionHandler
|
||||
|
||||
protected function guessCause(ComposerCommandFailedException $e): ?string
|
||||
{
|
||||
$rawPackageName = preg_replace('/^([A-z0-9-_\/]+)(?::.*|)$/i', '$1', $e->packageName);
|
||||
|
||||
if ($e instanceof ComposerRequireFailedException) {
|
||||
$hasMatches = preg_match(str_replace('{PACKAGE_NAME}', preg_quote($e->packageName, '/'), self::INCOMPATIBLE_REGEX), $e->getMessage(), $matches);
|
||||
$hasMatches = preg_match(str_replace('{PACKAGE_NAME}', preg_quote($rawPackageName, '/'), self::INCOMPATIBLE_REGEX), $e->getMessage(), $matches);
|
||||
|
||||
if ($hasMatches) {
|
||||
return 'extension_incompatible_with_instance';
|
||||
|
@ -63,6 +63,26 @@ class RequireExtensionTest extends TestCase
|
||||
$this->assertExtensionExists('v17development-blog');
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function requiring_a_compatible_extension_with_specific_version_works()
|
||||
{
|
||||
$response = $this->send(
|
||||
$this->request('POST', '/api/package-manager/extensions', [
|
||||
'authenticatedAs' => 1,
|
||||
'json' => [
|
||||
'data' => [
|
||||
'package' => 'v17development/flarum-blog:0.4.0'
|
||||
]
|
||||
]
|
||||
])
|
||||
);
|
||||
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertExtensionExists('v17development-blog');
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
@ -82,4 +102,24 @@ class RequireExtensionTest extends TestCase
|
||||
$this->assertEquals(409, $response->getStatusCode());
|
||||
$this->assertEquals('extension_incompatible_with_instance', $this->guessedCause($response));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function requiring_an_uncompatible_extension_with_specific_version_fails()
|
||||
{
|
||||
$response = $this->send(
|
||||
$this->request('POST', '/api/package-manager/extensions', [
|
||||
'authenticatedAs' => 1,
|
||||
'json' => [
|
||||
'data' => [
|
||||
'package' => 'flarum/auth-github:0.1.0-beta.9'
|
||||
]
|
||||
]
|
||||
])
|
||||
);
|
||||
|
||||
$this->assertEquals(409, $response->getStatusCode());
|
||||
$this->assertEquals('extension_incompatible_with_instance', $this->guessedCause($response));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user