From 4b1318e7589387497049ac3e7ec350d063e4c5aa Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Tue, 15 Apr 2025 16:11:55 +0200 Subject: [PATCH 1/2] fix: log and write the output of the 'occ maintenance:mode --off' command if it fails Signed-off-by: Julien Veyssier --- lib/UpdateCommand.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/UpdateCommand.php b/lib/UpdateCommand.php index da7c0d68..5aa3f50e 100644 --- a/lib/UpdateCommand.php +++ b/lib/UpdateCommand.php @@ -354,7 +354,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { } $this->updater->log('[info] Disabling maintenance mode'); - system($occRunCommand . ' maintenance:mode --off', $returnValueMaintenanceMode); + $systemOutput = system($occRunCommand . ' maintenance:mode --off', $returnValueMaintenanceMode); if ($returnValueMaintenanceMode === 0) { $this->updater->log('[info] maintenance mode disabled'); $output->writeln(''); @@ -364,6 +364,13 @@ protected function execute(InputInterface $input, OutputInterface $output) { $this->updater->log('[info] Disabling maintenance mode failed - return code: ' . $returnValueMaintenanceMode); $output->writeln(''); $output->writeln('Disabling Maintenance mode failed - return code:' . $returnValueMaintenanceMode); + if ($systemOutput === false) { + $this->updater->log('[info] System call failed'); + $output->writeln('System call failed'); + } else { + $this->updater->log('[info] occ output: ' . $systemOutput); + $output->writeln('occ output: ' . $systemOutput); + } $this->updater->log('[info] updater finished - with errors'); return $returnValueMaintenanceMode; } From f183e4644d2207bf9cd749e3e0f1c577ca1bce1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Fri, 26 Sep 2025 11:37:40 +0200 Subject: [PATCH 2/2] chore: make updater.phar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- updater.phar | Bin 1177695 -> 1182434 bytes vendor/composer/autoload_classmap.php | 2 + vendor/composer/autoload_static.php | 2 + vendor/composer/installed.php | 12 +-- .../ServiceCollectionInterface.php | 26 ++++++ .../ServiceMethodsSubscriberTrait.php | 80 ++++++++++++++++++ 6 files changed, 116 insertions(+), 6 deletions(-) create mode 100644 vendor/symfony/service-contracts/ServiceCollectionInterface.php create mode 100644 vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php diff --git a/updater.phar b/updater.phar index 6db06e5a13a8eb4a20a07004b64e9d6d0869eba8..4fc0dca795cf8b6eda2ad88a19f5428cb3e87971 100755 GIT binary patch delta 9650 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 D0NF|N diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 410b2827..9bf2b8ca 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -156,7 +156,9 @@ 'Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', + 'Symfony\\Contracts\\Service\\ServiceCollectionInterface' => $vendorDir . '/symfony/service-contracts/ServiceCollectionInterface.php', 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php', + 'Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index f2ad151d..158051c3 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -246,7 +246,9 @@ class ComposerStaticInit936ba63ded5d1b8248cdb4d5673af0ea 'Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', + 'Symfony\\Contracts\\Service\\ServiceCollectionInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceCollectionInterface.php', 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php', + 'Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index c2b5d037..61f5fb5c 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => '__root__', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'e61eef380007181745af0732f1e2e29fb9c0ebb5', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -11,9 +11,9 @@ ), 'versions' => array( '__root__' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'e61eef380007181745af0732f1e2e29fb9c0ebb5', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), diff --git a/vendor/symfony/service-contracts/ServiceCollectionInterface.php b/vendor/symfony/service-contracts/ServiceCollectionInterface.php new file mode 100644 index 00000000..2333139c --- /dev/null +++ b/vendor/symfony/service-contracts/ServiceCollectionInterface.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +/** + * A ServiceProviderInterface that is also countable and iterable. + * + * @author Kevin Bond + * + * @template-covariant T of mixed + * + * @extends ServiceProviderInterface + * @extends \IteratorAggregate + */ +interface ServiceCollectionInterface extends ServiceProviderInterface, \Countable, \IteratorAggregate +{ +} diff --git a/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php b/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php new file mode 100644 index 00000000..0d89d9f2 --- /dev/null +++ b/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +use Psr\Container\ContainerInterface; +use Symfony\Contracts\Service\Attribute\Required; +use Symfony\Contracts\Service\Attribute\SubscribedService; + +/** + * Implementation of ServiceSubscriberInterface that determines subscribed services + * from methods that have the #[SubscribedService] attribute. + * + * Service ids are available as "ClassName::methodName" so that the implementation + * of subscriber methods can be just `return $this->container->get(__METHOD__);`. + * + * @author Kevin Bond + */ +trait ServiceMethodsSubscriberTrait +{ + protected ContainerInterface $container; + + public static function getSubscribedServices(): array + { + $services = method_exists(get_parent_class(self::class) ?: '', __FUNCTION__) ? parent::getSubscribedServices() : []; + + foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { + if (self::class !== $method->getDeclaringClass()->name) { + continue; + } + + if (!$attribute = $method->getAttributes(SubscribedService::class)[0] ?? null) { + continue; + } + + if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { + throw new \LogicException(sprintf('Cannot use "%s" on method "%s::%s()" (can only be used on non-static, non-abstract methods with no parameters).', SubscribedService::class, self::class, $method->name)); + } + + if (!$returnType = $method->getReturnType()) { + throw new \LogicException(sprintf('Cannot use "%s" on methods without a return type in "%s::%s()".', SubscribedService::class, $method->name, self::class)); + } + + /* @var SubscribedService $attribute */ + $attribute = $attribute->newInstance(); + $attribute->key ??= self::class.'::'.$method->name; + $attribute->type ??= $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType; + $attribute->nullable = $returnType->allowsNull(); + + if ($attribute->attributes) { + $services[] = $attribute; + } else { + $services[$attribute->key] = ($attribute->nullable ? '?' : '').$attribute->type; + } + } + + return $services; + } + + #[Required] + public function setContainer(ContainerInterface $container): ?ContainerInterface + { + $ret = null; + if (method_exists(get_parent_class(self::class) ?: '', __FUNCTION__)) { + $ret = parent::setContainer($container); + } + + $this->container = $container; + + return $ret; + } +}