Skip to content

Upgrading phpro/grumphp 1 to 2

Breakingv1.16.0 → v2.26.0Breaking3Security3Platform3New21Changed25Fixed10Other23

BreakingUpgrade verdict

3 breaking changes and 3 platform requirement changes and 3 security fixes.

  • Removes v1 deprecations.
  • After upgrading, the pre-commit git hook must be regenerated because the diff command it runs now needs an extra --raw flag.
  • Contains BC breaks for GrumPHP extension or task developers.
  • The package now supports running on PHP 8.4.
Top 5 of 9 that need code or config changes

phpro/grumphp publishes an official migration guide for version 2. It covers more than the release notes do.

Migration guide ↗

PHP requirement changed in v2.17.0: ^8.0 → ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0.

Breaking3
Removes v1 deprecations.
Requires the --raw option on git diff for gitlib, so git hooks must be re-initialized after upgrading.
git diff--rawgrumphp git:init
Contains BC breaks for GrumPHP extension or task developers.
Security3
Prefixes file paths starting with - with ./ so external tools cannot parse them as options, and makes git_blacklist match file names literally.
git_blacklist
Prevents file paths from being parsed as tool options.
Upgrades composer CVE and lock dependencies.
Platform3
Adds PHP 8.4 support.
Requires PHP >=v8.1.
Requires PHP >=v8.1.

Generated by DepDelta from published PHP source. Not mixed with prose notes.

  • added: method TasksCollection.filterEnabled(): self
  • added: static method FilesCollection.fromTraversable(\Traversable $iterator): FilesCollection
  • changed: constructor GuessedPaths(string $gitWorkingDir, string $gitRepositoryDir, string $workingDir, string $projectDir, string $binDir, ComposerFile $composerFile, string $configFile) → constructor GuessedPaths(string $gitWorkingDir, string $gitRepositoryDir, string $workingDir, string $projectDir, string $binDir, ComposerFile $composerFile, string $configFile, ?string $gitWorktreeDir = …)
  • added: final class LoaderFactory
  • added: method GuessedPaths.getGitWorktreeDir(): string
  • added: static method LoaderFactory.createLoader(ContainerBuilder $container, array $paths = …): DelegatingLoader
  • changed: method TaskConfigurator.__invoke(TaskInterface $task, TaskConfigInterface $config): TaskInterface → method TaskConfigurator.__invoke(TaskInterface $task, TaskConfigResolver $configResolver, string $taskName): TaskInterface
  • added: constructor DistFileLoader(LoaderInterface $loader)
  • added: final class DistFileLoader implements LoaderInterface
  • added: method DistFileLoader.getResolver(): LoaderResolverInterface
  • added: method DistFileLoader.load(mixed $resource, ?string $type = …): mixed
  • added: method DistFileLoader.setResolver(LoaderResolverInterface $resolver): void
  • added: method DistFileLoader.supports(mixed $resource, ?string $type = …): bool
  • changed: method TaskConfigResolver.fetchByName(string $taskName): OptionsResolver → method TaskConfigResolver.fetchByName(string $taskName): ConfigOptionsResolver
  • changed: method TaskConfigResolver.resolve(string $taskName, array $config): array → method TaskConfigResolver.resolve(string $taskName): TaskConfigInterface
  • removed: const ConfigureCommand.COMMAND_NAME
  • removed: const RunCommand.COMMAND_NAME
  • removed: static method ConfigureCommand.getDefaultName(): string
  • removed: static method RunCommand.getDefaultName(): string
  • changed: constructor RunCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFileLocator, RegisteredFiles $registeredFilesLocator, TaskRunner $taskRunner) → constructor RunCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFileLocator, RegisteredFiles $registeredFilesLocator, TaskRunner $taskRunner, IOInterface $io)
  • changed: protected method ConfigureCommand.createQuestionString(string $question, string $default = …, string $separator = …): string → protected method ConfigureCommand.createQuestionString(string $question, ?string $default = …, string $separator = …): string
  • removed: const CommitMsgCommand.COMMAND_NAME
  • removed: const DeInitCommand.COMMAND_NAME
  • removed: const InitCommand.COMMAND_NAME
  • removed: const PreCommitCommand.COMMAND_NAME
  • removed: protected method DeInitCommand.configure(): void
  • removed: protected method InitCommand.configure(): void
  • removed: static method CommitMsgCommand.getDefaultName(): string
  • removed: static method DeInitCommand.getDefaultName(): string
  • removed: static method InitCommand.getDefaultName(): string
  • removed: static method PreCommitCommand.getDefaultName(): string
  • changed: constructor CommitMsgCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFilesLocator, ChangedFiles $changedFilesLocator, TaskRunner $taskRunner, Filesystem $filesystem, Paths $paths) → constructor CommitMsgCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFilesLocator, ChangedFiles $changedFilesLocator, TaskRunner $taskRunner, Filesystem $filesystem, Paths $paths, IOInterface $io)
  • changed: constructor PreCommitCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFilesLocator, ChangedFiles $changedFilesLocator, TaskRunner $taskRunner) → constructor PreCommitCommand(TestSuiteCollection $testSuites, StdInFiles $stdInFilesLocator, ChangedFiles $changedFilesLocator, TaskRunner $taskRunner, IOInterface $io)
  • changed: protected method CommitMsgCommand.getCommittedFiles(ConsoleIO $io): FilesCollection → protected method CommitMsgCommand.getCommittedFiles(): FilesCollection
  • changed: protected method PreCommitCommand.getCommittedFiles(ConsoleIO $io): FilesCollection → protected method PreCommitCommand.getCommittedFiles(): FilesCollection
  • removed: class Event extends SymfonyLegacyEvent
  • changed: method EventDispatcherInterface.dispatch(Event $event, string $name = …): void → method EventDispatcherInterface.dispatch(Event $event, ?string $name = …): void
  • changed: method SymfonyEventDispatcher.dispatch(Event $event, string $name = …): void → method SymfonyEventDispatcher.dispatch(Event $event, ?string $name = …): void
  • removed: class DeprecatedException extends RuntimeException
  • removed: static method DeprecatedException.directParameterConfiguration(string $key): self
  • removed: static method TaskConfigResolverException.deprectatedTask(string $taskName): self
  • removed: method ExtensionInterface.load(ContainerBuilder $container): void
  • added: method ExtensionInterface.imports(): iterable
  • changed: constructor GitRepository(GitRepositoryLocator $repositoryLocator, array $repositoryOptions) → constructor GitRepository(GitRepositoryLocator $repositoryLocator, CliDriver $driver)
  • added: class GitHubActionsIO extends ConsoleIO
  • added: class IOFactory
  • added: constructor IOFactory(CiDetector $ciDetector)
  • added: method ConsoleIO.endGroup(): void
  • added: method ConsoleIO.startGroup(string $title): void
  • added: method GitHubActionsIO.endGroup(): void
  • added: method GitHubActionsIO.startGroup(string $title): void
  • added: method IOFactory.create(InputInterface $input, OutputInterface $output): IOInterface
  • added: method IOInterface.endGroup(): void
  • added: method IOInterface.readCommandInput($handle): string
  • added: method IOInterface.startGroup(string $title): void
  • changed: method GitRepositoryLocator.locate(array $options): Repository → method GitRepositoryLocator.locate(CliDriver $driver): Repository
  • added: method GitRepositoryDirLocator.locateWorktreeGitDir(string $gitDir): string
  • changed: method TraverserConfigurator.registerStandardEnabledVisitor(string $alias, array $visitorOptions = …): void → method TraverserConfigurator.registerStandardEnabledVisitor(string $alias, ?array $visitorOptions = …): void
  • changed: method ProcessBuilder.createArgumentsForCommand(string $command, callable $pathManipulator = …): ProcessArgumentsCollection → method ProcessBuilder.createArgumentsForCommand(string $command, ?callable $pathManipulator = …): ProcessArgumentsCollection
  • changed: constructor TaskRunnerContext(ContextInterface $taskContext, TestSuiteInterface $testSuite = …, array $taskNames = …) → constructor TaskRunnerContext(ContextInterface $taskContext, ?TestSuiteInterface $testSuite = …, array $taskNames = …)
  • added: final class StopOnFailure
  • added: method FixableTaskResult.withContext(ContextInterface $context): static
  • added: method StopOnFailure.cancellation(): Cancellation
  • added: method StopOnFailure.decideForResult(TaskResultInterface $result): void
  • added: method StopOnFailure.stop(): void
  • added: method TaskResult.withContext(ContextInterface $context): static
  • added: method TaskResultInterface.withContext(ContextInterface $context): static
  • added: static method StopOnFailure.createFromConfig(RunnerConfig $config): self
  • added: static method StopOnFailure.dummy(): self
  • removed: method PoolFactory.create(): Pool
  • added: class SerializedClosureTask implements Task
  • added: method PoolFactory.createShared(): WorkerPool
  • added: method SerializedClosureTask.run(Channel $channel, Cancellation $cancellation): mixed
  • added: static method SerializedClosureTask.fromClosure(\Closure $closure): self
  • removed: class MultiPromise
  • removed: static method MultiPromise.cancelable(array $promises, callable $shouldCancel): Promise
  • changed: method TaskHandler.handle(TaskInterface $task, TaskRunnerContext $runnerContext): Promise → method TaskHandler.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure): Future
  • changed: method ErrorHandlingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method ErrorHandlingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method EventDispatchingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method EventDispatchingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method MemoizedResultsTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method MemoizedResultsTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method NonBlockingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method NonBlockingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method ParallelProcessingMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method ParallelProcessingMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method ReportingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method ReportingTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • changed: method TaskHandlerMiddlewareInterface.handle(TaskInterface $task, TaskRunnerContext $runnerContext, callable $next): Promise → method TaskHandlerMiddlewareInterface.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • added: class StopOnFailureTaskHandlerMiddleware implements TaskHandlerMiddlewareInterface
  • added: method StopOnFailureTaskHandlerMiddleware.handle(TaskInterface $task, TaskRunnerContext $runnerContext, StopOnFailure $stopOnFailure, callable $next): Future
  • removed: const PhpParser.KIND_PHP5
  • removed: const PhpParser.KIND_PHP7
  • removed: static method AbstractLinterTask.getConfigurableOptions(): OptionsResolver
  • removed: static method AbstractParserTask.getConfigurableOptions(): OptionsResolver
  • changed: static method Ant.getConfigurableOptions(): OptionsResolver → static method Ant.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Atoum.getConfigurableOptions(): OptionsResolver → static method Atoum.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Behat.getConfigurableOptions(): OptionsResolver → static method Behat.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Brunch.getConfigurableOptions(): OptionsResolver → static method Brunch.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method CloverCoverage.getConfigurableOptions(): OptionsResolver → static method CloverCoverage.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Codeception.getConfigurableOptions(): OptionsResolver → static method Codeception.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Composer.getConfigurableOptions(): OptionsResolver → static method Composer.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method ComposerNormalize.getConfigurableOptions(): OptionsResolver → static method ComposerNormalize.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method ComposerRequireChecker.getConfigurableOptions(): OptionsResolver → static method ComposerRequireChecker.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method ComposerScript.getConfigurableOptions(): OptionsResolver → static method ComposerScript.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Deptrac.getConfigurableOptions(): OptionsResolver → static method Deptrac.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method DoctrineOrm.getConfigurableOptions(): OptionsResolver → static method DoctrineOrm.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method ESLint.getConfigurableOptions(): OptionsResolver → static method ESLint.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Ecs.getConfigurableOptions(): OptionsResolver → static method Ecs.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method FileSize.getConfigurableOptions(): OptionsResolver → static method FileSize.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Gherkin.getConfigurableOptions(): OptionsResolver → static method Gherkin.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Grunt.getConfigurableOptions(): OptionsResolver → static method Grunt.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Gulp.getConfigurableOptions(): OptionsResolver → static method Gulp.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Infection.getConfigurableOptions(): OptionsResolver → static method Infection.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method JsonLint.getConfigurableOptions(): OptionsResolver → static method JsonLint.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Kahlan.getConfigurableOptions(): OptionsResolver → static method Kahlan.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Make.getConfigurableOptions(): OptionsResolver → static method Make.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method NpmScript.getConfigurableOptions(): OptionsResolver → static method NpmScript.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Paratest.getConfigurableOptions(): OptionsResolver → static method Paratest.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Pest.getConfigurableOptions(): OptionsResolver → static method Pest.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Phan.getConfigurableOptions(): OptionsResolver → static method Phan.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Phing.getConfigurableOptions(): OptionsResolver → static method Phing.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Php7cc.getConfigurableOptions(): OptionsResolver → static method Php7cc.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpArkitect.getConfigurableOptions(): OptionsResolver → static method PhpArkitect.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpCpd.getConfigurableOptions(): OptionsResolver → static method PhpCpd.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpCsFixer.getConfigurableOptions(): OptionsResolver → static method PhpCsFixer.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpLint.getConfigurableOptions(): OptionsResolver → static method PhpLint.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpMd.getConfigurableOptions(): OptionsResolver → static method PhpMd.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpMnd.getConfigurableOptions(): OptionsResolver → static method PhpMnd.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpParser.getConfigurableOptions(): OptionsResolver → static method PhpParser.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpStan.getConfigurableOptions(): OptionsResolver → static method PhpStan.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpVersion.getConfigurableOptions(): OptionsResolver → static method PhpVersion.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Phpcs.getConfigurableOptions(): OptionsResolver → static method Phpcs.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Phpspec.getConfigurableOptions(): OptionsResolver → static method Phpspec.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Phpunit.getConfigurableOptions(): OptionsResolver → static method Phpunit.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method PhpunitBridge.getConfigurableOptions(): OptionsResolver → static method PhpunitBridge.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Progpilot.getConfigurableOptions(): OptionsResolver → static method Progpilot.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Psalm.getConfigurableOptions(): OptionsResolver → static method Psalm.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Rector.getConfigurableOptions(): OptionsResolver → static method Rector.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Robo.getConfigurableOptions(): OptionsResolver → static method Robo.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method SecurityChecker.getConfigurableOptions(): OptionsResolver → static method SecurityChecker.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method SecurityCheckerEnlightn.getConfigurableOptions(): OptionsResolver → static method SecurityCheckerEnlightn.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method SecurityCheckerLocal.getConfigurableOptions(): OptionsResolver → static method SecurityCheckerLocal.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method SecurityCheckerRoave.getConfigurableOptions(): OptionsResolver → static method SecurityCheckerRoave.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method SecurityCheckerSymfony.getConfigurableOptions(): OptionsResolver → static method SecurityCheckerSymfony.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Shell.getConfigurableOptions(): OptionsResolver → static method Shell.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Stylelint.getConfigurableOptions(): OptionsResolver → static method Stylelint.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method TaskInterface.getConfigurableOptions(): OptionsResolver → static method TaskInterface.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method Tester.getConfigurableOptions(): OptionsResolver → static method Tester.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method TwigCs.getConfigurableOptions(): OptionsResolver → static method TwigCs.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method XmlLint.getConfigurableOptions(): OptionsResolver → static method XmlLint.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method YamlLint.getConfigurableOptions(): OptionsResolver → static method YamlLint.getConfigurableOptions(): ConfigOptionsResolver
  • added: class ComposerValidateAutoload extends AbstractExternalTask
  • added: class MagoAnalyzer extends AbstractExternalTask
  • added: class MagoFormatter extends AbstractExternalTask
  • added: class MagoGuard extends AbstractExternalTask
  • added: class MagoLinter extends AbstractExternalTask
  • added: class PhpMd3 extends AbstractExternalTask
  • added: class SecurityCheckerComposeraudit extends AbstractExternalTask
  • added: class SymfonyConsole extends AbstractExternalTask
  • added: class TwigCsFixer extends AbstractExternalTask
  • added: method ComposerValidateAutoload.canRunInContext(ContextInterface $context): bool
  • added: method ComposerValidateAutoload.run(ContextInterface $context): TaskResultInterface
  • added: method MagoAnalyzer.canRunInContext(ContextInterface $context): bool
  • added: method MagoAnalyzer.run(ContextInterface $context): TaskResultInterface
  • added: method MagoFormatter.canRunInContext(ContextInterface $context): bool
  • added: method MagoFormatter.run(ContextInterface $context): TaskResultInterface
  • added: method MagoGuard.canRunInContext(ContextInterface $context): bool
  • added: method MagoGuard.run(ContextInterface $context): TaskResultInterface
  • added: method MagoLinter.canRunInContext(ContextInterface $context): bool
  • added: method MagoLinter.run(ContextInterface $context): TaskResultInterface
  • added: method PhpMd3.canRunInContext(ContextInterface $context): bool
  • added: method PhpMd3.run(ContextInterface $context): TaskResultInterface
  • added: method SecurityCheckerComposeraudit.canRunInContext(ContextInterface $context): bool
  • added: method SecurityCheckerComposeraudit.run(ContextInterface $context): TaskResultInterface
  • added: method SymfonyConsole.canRunInContext(ContextInterface $context): bool
  • added: method SymfonyConsole.run(ContextInterface $context): TaskResultInterface
  • added: method TwigCsFixer.canRunInContext(ContextInterface $context): bool
  • added: method TwigCsFixer.run(ContextInterface $context): TaskResultInterface
  • added: protected static method AbstractLinterTask.sharedOptionsResolver(): OptionsResolver
  • added: protected static method AbstractParserTask.sharedOptionsResolver(): OptionsResolver
  • added: static method ComposerValidateAutoload.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method MagoAnalyzer.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method MagoFormatter.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method MagoGuard.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method MagoLinter.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method PhpMd3.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method SecurityCheckerComposeraudit.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method SymfonyConsole.getConfigurableOptions(): ConfigOptionsResolver
  • added: static method TwigCsFixer.getConfigurableOptions(): ConfigOptionsResolver
  • removed: class LazyTaskConfig implements TaskConfigInterface
  • removed: constructor LazyTaskConfig(callable $configFactory)
  • removed: method LazyTaskConfig.getMetadata(): Metadata
  • removed: method LazyTaskConfig.getName(): string
  • removed: method LazyTaskConfig.getOptions(): array
  • changed: static method Metadata.getConfigurableOptions(): OptionsResolver → static method Metadata.getConfigurableOptions(): \GrumPHP\Task\Config\ConfigOptionsResolver
  • added: final class ConfigOptionsResolver
  • added: method ConfigOptionsResolver.resolve(array $data): array
  • added: static method ConfigOptionsResolver.fromClosure(\Closure $closure): self
  • added: static method ConfigOptionsResolver.fromOptionsResolver(OptionsResolver $optionsResolver): self
  • changed: static method Blacklist.getConfigurableOptions(): OptionsResolver → static method Blacklist.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method BranchName.getConfigurableOptions(): OptionsResolver → static method BranchName.getConfigurableOptions(): ConfigOptionsResolver
  • changed: static method CommitMessage.getConfigurableOptions(): OptionsResolver → static method CommitMessage.getConfigurableOptions(): ConfigOptionsResolver
  • added: const CommitMessage.MERGE_COMMIT_REGEX
  • added: method Paths.getGitWorktreeDir(): string