|
6 | 6 |
|
7 | 7 | use Nette\Utils\FileSystem; |
8 | 8 | use Nette\Utils\Json; |
9 | | -use Nette\Utils\Strings; |
10 | 9 | use Rector\Jack\Composer\ComposerOutdatedResponseProvider; |
11 | | -use Rector\Jack\Composer\NextVersionResolver; |
| 10 | +use Rector\Jack\ComposerProcessor\OpenVersionsComposerProcessor; |
12 | 11 | use Rector\Jack\Enum\ComposerKey; |
13 | 12 | use Rector\Jack\OutdatedComposerFactory; |
14 | 13 | use Symfony\Component\Console\Command\Command; |
|
20 | 19 | final class OpenVersionsCommand extends Command |
21 | 20 | { |
22 | 21 | public function __construct( |
23 | | - private readonly NextVersionResolver $nextVersionResolver, |
24 | 22 | private readonly OutdatedComposerFactory $outdatedComposerFactory, |
25 | 23 | private readonly ComposerOutdatedResponseProvider $composerOutdatedResponseProvider, |
| 24 | + private readonly OpenVersionsComposerProcessor $openVersionsComposerProcessor, |
26 | 25 | ) { |
27 | 26 | parent::__construct(); |
28 | 27 | } |
@@ -93,58 +92,40 @@ protected function execute(InputInterface $input, OutputInterface $output): int |
93 | 92 |
|
94 | 93 | $composerJsonContents = FileSystem::read($composerJsonFilePath); |
95 | 94 |
|
96 | | - $outdatedPackages = $outdatedComposer->getPackagesShuffled($onlyDev, $packagePrefix); |
97 | | - |
98 | | - $openedPackageCount = 0; |
99 | | - foreach ($outdatedPackages as $outdatedPackage) { |
100 | | - $composerVersion = $outdatedPackage->getComposerVersion(); |
101 | | - |
102 | | - // already filled with open version |
103 | | - if (str_contains($composerVersion, '|')) { |
104 | | - continue; |
105 | | - } |
106 | | - |
107 | | - // convert composer version to next version |
108 | | - $nextVersion = $this->nextVersionResolver->resolve($outdatedPackage->getName(), $composerVersion); |
109 | | - $openedVersion = $composerVersion . '|' . $nextVersion; |
110 | | - |
111 | | - // replace using regex, to keep original composer.json format |
112 | | - $composerJsonContents = Strings::replace( |
113 | | - $composerJsonContents, |
114 | | - // find |
115 | | - sprintf('#"%s": "(.*?)"#', $outdatedPackage->getName()), |
116 | | - // replace |
117 | | - sprintf('"%s": "%s"', $outdatedPackage->getName(), $openedVersion) |
118 | | - ); |
119 | | - |
120 | | - $symfonyStyle->writeln(sprintf( |
121 | | - ' * Opened "<fg=green>%s</>" package to "<fg=yellow>%s</>" version', |
122 | | - $outdatedPackage->getName(), |
123 | | - $openedVersion |
124 | | - )); |
| 95 | + $changedPackageVersionsResult = $this->openVersionsComposerProcessor->process( |
| 96 | + $composerJsonContents, |
| 97 | + $outdatedComposer, |
| 98 | + $limit, |
| 99 | + $onlyDev, |
| 100 | + $packagePrefix |
| 101 | + ); |
125 | 102 |
|
126 | | - ++$openedPackageCount; |
127 | | - if ($openedPackageCount >= $limit) { |
128 | | - // we've reached the limit, so we can stop |
129 | | - break; |
130 | | - } |
131 | | - } |
| 103 | + $openedPackages = $changedPackageVersionsResult->getChangedPackageVersions(); |
| 104 | + $changedComposerJson = $changedPackageVersionsResult->getComposerJsonContents(); |
132 | 105 |
|
133 | 106 | if ($isDryRun === false) { |
134 | 107 | // update composer.json file, only if no --dry-run |
135 | | - FileSystem::write($composerJsonFilePath, $composerJsonContents . PHP_EOL); |
| 108 | + FileSystem::write($composerJsonFilePath, $changedComposerJson . PHP_EOL, null); |
136 | 109 | } |
137 | 110 |
|
138 | 111 | $symfonyStyle->success( |
139 | 112 | sprintf( |
140 | 113 | '%d packages %s opened up to the next nearest version.%s%s "composer update" to push versions up', |
141 | | - $openedPackageCount, |
| 114 | + count($openedPackages), |
142 | 115 | $isDryRun ? 'would be (is "--dry-run")' : 'were', |
143 | 116 | PHP_EOL, |
144 | 117 | $isDryRun ? 'Then you would run' : 'Now run' |
145 | 118 | ) |
146 | 119 | ); |
147 | 120 |
|
| 121 | + foreach ($openedPackages as $openedPackage) { |
| 122 | + $symfonyStyle->writeln(sprintf( |
| 123 | + ' * Opened "<fg=green>%s</>" package to "<fg=yellow>%s</>" version', |
| 124 | + $openedPackage->getPackageName(), |
| 125 | + $openedPackage->getNewVersion() |
| 126 | + )); |
| 127 | + } |
| 128 | + |
148 | 129 | return self::SUCCESS; |
149 | 130 | } |
150 | 131 | } |
0 commit comments