1212use Symfony \Component \Console \Helper \TableStyle ;
1313use Symfony \Component \Console \Input \InputArgument ;
1414use Symfony \Component \Console \Input \InputInterface ;
15+ use Symfony \Component \Console \Input \InputOption ;
1516use Symfony \Component \Console \Output \OutputInterface ;
1617use Symfony \Component \Console \Style \SymfonyStyle ;
1718use Webmozart \Assert \Assert ;
@@ -40,6 +41,13 @@ protected function configure(): void
4041 'One or more repositories to compare package versions of '
4142 );
4243
44+ $ this ->addOption (
45+ 'is-source ' ,
46+ null ,
47+ InputOption::VALUE_NONE ,
48+ 'Provided repositories are main sources, analyze their dependencies instead '
49+ );
50+
4351 $ this ->setDescription (
4452 'Compares package versions in multiple repositories, to easily sync multiple package upgrade '
4553 );
@@ -48,21 +56,33 @@ protected function configure(): void
4856 protected function execute (InputInterface $ input , OutputInterface $ output ): int
4957 {
5058 $ repositories = (array ) $ input ->getArgument ('repositories ' );
59+ $ isSource = (bool ) $ input ->getOption ('is-source ' );
5160 Assert::allString ($ repositories );
5261
62+ if ($ isSource ) {
63+ $ this ->symfonyStyle ->title (sprintf ('Loading dependencies for %d projects ' , count ($ repositories )));
64+
65+ $ projectsComposerJson = $ this ->composerJsonResolver ->resolveFromRepositories ($ repositories );
66+ foreach ($ projectsComposerJson ->all () as $ i => $ projectComposerJson ) {
67+ $ this ->symfonyStyle ->section (sprintf (
68+ '%d) Showing external repositories for "%s" project ' ,
69+ $ i + 1 ,
70+ $ projectComposerJson ->getRepositoryName ()
71+ ));
72+
73+ $ this ->renderTableForRepositories ($ projectComposerJson ->getRequiredRepositories ());
74+ $ this ->symfonyStyle ->newLine ();
75+ }
76+
77+ return self ::SUCCESS ;
78+ }
79+
5380 $ this ->symfonyStyle ->title (sprintf (
5481 'Loading "composer.json" files for %d repositories ' ,
5582 count ($ repositories )
5683 ));
5784
58- $ composerJsonCollection = $ this ->composerJsonResolver ->resolveFromRepositories ($ repositories );
59-
60- $ requiredPackageNames = $ composerJsonCollection ->getRequiredPackageNames ();
61-
62- $ tableHeadlines = array_merge (['dependency ' ], $ composerJsonCollection ->getRepositoryNames ());
63- $ tableRows = $ this ->createTableRows ($ requiredPackageNames , $ composerJsonCollection );
64-
65- $ this ->renderTable ($ tableHeadlines , $ tableRows );
85+ $ this ->renderTableForRepositories ($ repositories );
6686
6787 return self ::SUCCESS ;
6888 }
@@ -93,7 +113,7 @@ private function createTableRows(array $requiredPackageNames, ComposerJsonCollec
93113 }
94114
95115 // we need at least 2 values to compare
96- if ($ knownValuesCount < 2 ) {
116+ if ($ requiredPackageName !== ' php ' && $ knownValuesCount < 2 ) {
97117 continue ;
98118 }
99119
@@ -136,4 +156,18 @@ private function isUnknownPhp(string $packageName, ?string $packageVersion): boo
136156
137157 return $ packageVersion === null ;
138158 }
159+
160+ /**
161+ * @param string[] $repositories
162+ */
163+ private function renderTableForRepositories (array $ repositories ): void
164+ {
165+ $ composerJsonCollection = $ this ->composerJsonResolver ->resolveFromRepositories ($ repositories );
166+ $ requiredPackageNames = $ composerJsonCollection ->getRequiredPackageNames ();
167+
168+ $ tableHeadlines = array_merge (['dependency ' ], $ composerJsonCollection ->getRepositoryNames ());
169+ $ tableRows = $ this ->createTableRows ($ requiredPackageNames , $ composerJsonCollection );
170+
171+ $ this ->renderTable ($ tableHeadlines , $ tableRows );
172+ }
139173}
0 commit comments