public function publishCommand($workspace, $targetWorkspace = null, $verbose = false, $dryRun = false)
{
$workspaceName = $workspace;
$workspace = $this->workspaceRepository->findOneByName($workspaceName);
if (!$workspace instanceof Workspace) {
$this->outputLine('Workspace "%s" does not exist', [$workspaceName]);
$this->quit(1);
}
if ($targetWorkspace === null) {
$targetWorkspace = $workspace->getBaseWorkspace();
$targetWorkspaceName = $targetWorkspace->getName();
} else {
$targetWorkspaceName = $targetWorkspace;
$targetWorkspace = $this->workspaceRepository->findOneByName($targetWorkspaceName);
if (!$targetWorkspace instanceof Workspace) {
$this->outputLine('Target workspace "%s" does not exist', [$targetWorkspaceName]);
$this->quit(2);
}
$possibleTargetWorkspaceNames = [];
$baseWorkspace = $workspace->getBaseWorkspace();
while ($targetWorkspace !== $baseWorkspace) {
if ($baseWorkspace === null) {
$this->outputLine('The target workspace must be a base workspace of "%s".', [$targetWorkspaceName]);
if (count($possibleTargetWorkspaceNames) > 1) {
$this->outputLine('For "%s" possible target workspaces currently are: %s', [$workspaceName, implode(', ', $possibleTargetWorkspaceNames)]);
} else {
$this->outputLine('For "%s" the only possible target workspace currently is "%s".', [$workspaceName, reset($possibleTargetWorkspaceNames)]);
}
$this->quit(3);
}
$possibleTargetWorkspaceNames[] = $baseWorkspace->getName();
$baseWorkspace = $baseWorkspace->getBaseWorkspace();
}
}
try {
$nodes = $this->publishingService->getUnpublishedNodes($workspace);
} catch (\Exception $exception) {
$this->outputLine('An error occurred while fetching unpublished nodes from workspace %s, publish aborted.', [$workspaceName]);
$this->quit(1);
}
$this->outputLine('The workspace %s contains %u unpublished nodes.', [$workspaceName, count($nodes)]);
foreach ($nodes as $node) {
/** @var NodeInterface $node */
if ($verbose) {
$this->outputLine(' ' . $node->getPath());
}
if (!$dryRun) {
$this->publishingService->publishNode($node, $targetWorkspace);
}
}
if (!$dryRun) {
$this->outputLine('Published all nodes in workspace %s to workspace %s', [$workspaceName, $targetWorkspaceName]);
}
}