/** * @param RepositoryList $repositories */ public function execute(RepositoryList $repositories) { $this->getLogger()->debug('Run plugin', [get_called_class()]); $parallelProcess = new ParallelProcess($this->getSymfonyStyle()); /** @var RepositoryModel[] $list */ $list = array_reverse($repositories->getAll()); $model = null; foreach ($list as $model) { $parallelProcess->add($model->getProvider()->buildCommand('fetch', []), $model->getAbsolutePath(), $this->isDryRun(), false); } $parallelProcess->run(); $this->getLogger()->debug('End plugin', [get_called_class()]); }
/** * @param RepositoryList $repositories */ public function execute(RepositoryList $repositories) { $this->getLogger()->debug('Run plugin', [get_called_class()]); $parallelProcess = new ParallelProcess($this->getSymfonyStyle()); $remoteBranch = null; if ($this->getInput()->hasArgument('remote-branch')) { $remoteBranch = $this->getInput()->getArgument('remote-branch'); } /** @var RepositoryModel[] $list */ $list = $repositories->getVendorModels(); $progressBar = new ProgressBarHelper($this->getSymfonyStyle()); $progressBar->create(count($list)); $model = null; foreach ($list as $model) { $progressBar->advance('Fetch status of ' . ($model->getPath() ?: 'project repository')); $currentBranch = $model->getBranch(); $hasCommits = $model->hasCommits(); $needPull = false; if ($currentBranch !== $remoteBranch || 'master' !== $currentBranch && 'master' !== $remoteBranch || $hasCommits) { $needPull = true; } if ($needPull) { $parallelProcess->add($model->getProvider()->buildCommand('fetch', []), $model->getAbsolutePath(), $this->isDryRun(), false); if ($model->getProvider()->hasRemoteBranch($currentBranch)) { $parallelProcess->add($model->getProvider()->buildCommand('pull', ['origin', $currentBranch]), $model->getAbsolutePath(), $this->isDryRun(), false); } $needMerge = !empty($remoteBranch) && $remoteBranch != $currentBranch; if ($needMerge && $model->getProvider()->hasRemoteBranch($remoteBranch)) { $parallelProcess->add($model->getProvider()->buildCommand('pull', ['origin', $remoteBranch]), $model->getAbsolutePath(), $this->isDryRun(), false); } if ($needMerge && !$model->hasConflicts() && $model->getProvider()->hasLocalBranch($remoteBranch)) { $parallelProcess->add($model->getProvider()->buildCommand('merge', [$remoteBranch]), $model->getAbsolutePath(), $this->isDryRun(), true); } } else { $this->getLogger()->debug('Skipped', [$model->getPackageName(), 'current' => $currentBranch, 'remote' => $remoteBranch, 'hasCommits' => $hasCommits]); } } $progressBar->finish(); $parallelProcess->run(); foreach ($list as $model) { if ($model->hasConflicts()) { $this->getSymfonyStyle()->writeln($model->getPackageName()); $this->getSymfonyStyle()->writeln($model->getConflicts()); } } $this->getLogger()->debug('End plugin', [get_called_class()]); }